原创  MinIO 分布式存储方案+nginx 部署实施 问题与坑

分类:运维 2020-10-17T16:12:32    301人阅读   

介绍:

    MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。


下载:

官网下载:https://docs.min.io/cn/minio-quickstart-guide.html (神卡

本站下载:MinIO window 服务端和客户端(mc)&linux服务器端


部署(以centos为例)

将下载文件上传服务器,使用如下命令启动:

/opt/minio server /var/upload

启动会提示修改默认用户名和密码(默认为:minioadmin/minioadmin)

启动后使用 curl localhost:9000 查看 如果返回html服务启动成功


nginx集成:

添加如下配置:

server {
 listen 80;
 server_name example.com;#改成你自己的

 # To allow special characters in headers
 ignore_invalid_headers off;
 # Allow any size file to be uploaded.
 # Set to a value such as 1000m; to restrict file size to a specific value
 client_max_body_size 0;
 # To disable buffering
 proxy_buffering off;

 location / {
    #这几个头设置很重要丢失了会报错,见后面坑分析
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_host;

   proxy_connect_timeout 300;
   # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
   proxy_http_version 1.1;
   proxy_set_header Connection "";
   chunked_transfer_encoding off;

   proxy_pass http://localhost:9000; #改成你自己的
 }
}

如果使用分享连接功能可以添加如下配置:

location /photos/ {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_host;

   proxy_connect_timeout 300;
   # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
   proxy_http_version 1.1;
   proxy_set_header Connection "";
   chunked_transfer_encoding off;

   proxy_pass http://localhost:9000;
 }


坑:

报错:The request signature we calculated does not match the signature you provided.

1、使用 mc config host add damon_server http://your.fileserver.address Damon *** AWS15 --api s3v4

     报错:The request signature we calculated does not match the signature you provided.

     原因:nginx代理没有设置 proxy_set_header 导致头信息丢失,参考上述配置修改

     临时方案 ,使用 mc config host add damon_server http://your.fileserver.address Damon *** AWS15 --api s3v2

      连接,因为签名 s3v4 是严格模式 ,s3v2 不是 

2、生成分享连接报错 The request signature we calculated does not match the signature you provided.

    原因1:同上

    原因2:生成分享连接连接服务器时使用的服务器地址和分享链接不一致(minio会校验连接host)

                比如,小编文件服务起和应用服务器在同一台主机,于是使用如下代码(python)生成连接

def makeShareUrl(fileName):
    try:
        minioClient = Minio('localhost:9000',
                            access_key='you guess',
                            secret_key='you guess',
                            secure=False)
        return minioClient.presigned_get_object('resource', fileName, expires=timedelta(hours=6))
    except Exception as e:
        print(str(e))
    return None

然后将地址改成外网地址,一直报错

应该在连接也是用外网地址,如下:

def makeShareUrl(fileName):
    try:
        minioClient = Minio('yy123.ink',
                            access_key='you guess',
                            secret_key='you guess',
                            secure=False)
        return minioClient.presigned_get_object('resource', fileName, expires=timedelta(hours=6))
    except Exception as e:
        print(str(e))
    return None
3、配置文件位置

    官网说默认配置文件在用户目录~/.minio/config.json其实是在的文文件存放目录 /文件存放路径/.minio.sys/config/config.json 中

分享到: