docker安装minio+nginx负载均衡配置

1,833 阅读2分钟

安装minio(3台)

  • 安装minio
#拉取minio镜像
docker pull minio/minio:RELEASE.2022-03-11T11-08- 23Z.hotfix.29c773d72
​
# 主 机 解 析 191.191.170.66 minio-1
191.191.170.67  minio-2
191.191.170.68  minio-3
​
# 下面命令表示数据挂载磁盘,本次使用三台机器,每台机器模拟两个磁盘,minio分布式默认最少4个磁盘。生产环境下请配置磁盘” /minio/data”
-v /minio/data:/data1 -v /minio/backup:/data2
​
# 用户名和密码设置(原来旧版参数是key和秘钥)
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minioadmin
​
# --address 配置本机和集群节点
191.191.170.66:9000 http://minio-{1...3}/data{1...2}
​
#启动minio 
#minio-1执行
docker run -d --name minio-01 --restart=always --net=host -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minioadmin --privileged=true -v /minio/data:/data1 -v /minio/backup:/data2 minio/minio:RELEASE.2022-03-11T11-08-23Z.hotfix.29c773d72 server --console-address :9090 --address 191.191.170.66:9000 http://minio-{1...3}/data{1...2}
​
#minio-2执行
docker run -d --name minio-02 --restart=always --net=host -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minioadmin --privileged=true -v /minio/data:/data1 -v /minio/backup:/data2 minio/minio:RELEASE.2022-03-11T11-08-23Z.hotfix.29c773d72 server --console-address :9090 --address 191.191.170.67:9000 http://minio-{1...3}/data{1...2}
​
#minio-3执行
docker run -d --name minio-03 --restart=always --net=host -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minioadmin --privileged=true -v /minio/data:/data1 -v /minio/backup:/data2 minio/minio:RELEASE.2022-03-11T11-08-23Z.hotfix.29c773d72 server --console-address :9090 --address 191.191.170.68:9000 http://minio-{1...3}/data{1...2}
​
  • 配置nginx负载均衡

    • 首先安装nginx,有网络可选择直接pull

    • 创建目录和文件

      创建目录
      mkdir -p /cq-aiplatform/soft/nginx/conf
      mkdir -p /cq-aiplatform/soft/nginx/html
      
    • 创建配置文件,配置映射,要不然每次修改都要进入到容器内

      vi /cq-aiplatform/soft/nginx/conf/nginx.conf
      
    • 复制以下内容到配置文件中

      worker_processes  1;
      ​
      events {
          worker_connections  1024;
      }
      ​
      http{
        
          upstream http_minio_back{
              server 191.191.170.66:9000;
              server 191.191.170.67:9000;
              server 191.191.170.68:9000;
          }
          server{
              listen 6333;
              server_name localhost;
              ignore_invalid_headers off;
              #配置成上传文件不限制大小
              client_max_body_size 0;
              proxy_buffering off;
      ​
              location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header Host $http_host;
                  proxy_set_header X-Forwarded-Host $host:$server_port;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
      ​
                  proxy_connect_timeout 300;
                  proxy_http_version 1.1;
                  chunked_transfer_encoding off;
                  proxy_ignore_client_abort on;
      ​
                  proxy_pass http_minio_back
      ​
              }
          }
          }
      }
      
    • 启动nginx

      docker run  --name nginx -d -p 6333:6333 -v /cq-aiplatform/soft/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /cq-aiplatform/soft/nginx/logs:/var/log/nginx  -v /cq-aiplatform/soft/nginx/html:/usr/share/nginx/html nginx
      
    • 这个有个参数必须要加上proxy_set_header Host $http_host;要不然会报以下错误

      The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: 16DFE6A61E028F1D; S3 Extended Request ID: 93e73974-b2e2-499b-be80-c1421215f4cf; Proxy: null)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1372)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:770)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:744)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:704)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:686)
      at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550)
      at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:530)
      at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5248)
      at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5195)
      at com.amazonaws.services.s3.AmazonS3Client.access$300(AmazonS3Client.java:415)
      at com.amazonaws.services.s3.AmazonS3Client$PutObjectStrategy.invokeServiceCall(AmazonS3Client.java:6309)
      at com.amazonaws.services.s3.AmazonS3Client.uploadObject(AmazonS3Client.java:1840)
      at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1800)
      

集成springboot

配置类如下,在其他类中若要使用直接注入即可:

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import io.swagger.annotations.ApiModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
​
/**
 * minioClient配置
 *
 * @author qd.liu
 * @date 2022年1月20日
 */
@Configuration
@ApiModel(value = "minio配置")
public class MinioConfig {
​
​
    @Value("${oss.endpoint}")
    private String url;
    @Value("${oss.access-key}")
    private String accessKey;
    @Value("${oss.secret-key}")
    private String secretKey;
​
​
    @Bean
    public MinioClient getMinioClient() {
        MinioClient minioClient = null;
        try {
​
            minioClient = new MinioClient(url,accessKey,secretKey);
​
        } catch (InvalidEndpointException e) {
            e.printStackTrace();
        } catch (InvalidPortException e) {
            e.printStackTrace();
        }
        return minioClient;
    }
    
}

\