安装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;
}
}
\