当前位置:   article > 正文

Minio多主机分布式 docker-compose 集群部署

Minio多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com)

【运维】docker-compose安装minio集群-CSDN博客

Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能

中文地址:MinIO | 用于AI的S3 & Kubernetes原生对象存储

官网地址:MinIO | High Performance, Kubernetes Native Object Storage

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

一 准备工作

1、三台机器  配置 vim /etc/hosts

192.168.1.244 minio4
192.168.1.243 minio3
192.168.1.242 minio2

验证

查看docker

查看 docker-compose -v

如果没有则安装 

sudo yum install docker-compose

二、编写docker-compose.yml 文件

整体目录结构如下:

希望 nginx 在243上

有两个类型的docker-compose.yml (带nginx和不带nginx的),具体如下

1、不带nginx(242和244)

  1. version: "3"
  2. services:
  3. minio:
  4. image: quay.io/minio/minio
  5. container_name: minio-node2
  6. hostname: minio2
  7. expose:
  8. - "19000"
  9. - "19001"
  10. environment:
  11. - MINIO_ROOT_USER=minio
  12. - MINIO_ROOT_PASSWORD=minio@123
  13. volumes:
  14. - ./data-1:/data1
  15. - ./data-2:/data2
  16. command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
  17. privileged: true
  18. healthcheck:
  19. test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
  20. interval: 30s
  21. timeout: 20s
  22. retries: 3
  23. extra_hosts:
  24. - minio2:192.168.1.242
  25. - minio3:192.168.1.243
  26. - minio4:192.168.1.244
  27. restart: always
  28. network_mode: host
  1. version: "3"
  2. services:
  3. minio:
  4. image: quay.io/minio/minio
  5. container_name: minio-node4
  6. hostname: minio4
  7. expose:
  8. - "19000"
  9. - "19001"
  10. environment:
  11. - MINIO_ROOT_USER=minio
  12. - MINIO_ROOT_PASSWORD=minio@123
  13. volumes:
  14. - ./data-1:/data1
  15. - ./data-2:/data2
  16. command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
  17. privileged: true
  18. healthcheck:
  19. test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
  20. interval: 30s
  21. timeout: 20s
  22. retries: 3
  23. extra_hosts:
  24. - minio2:192.168.1.242
  25. - minio3:192.168.1.243
  26. - minio4:192.168.1.244
  27. restart: always
  28. network_mode: host

 2、带nginx (243)

  1. version: "3"
  2. services:
  3. minio:
  4. image: quay.io/minio/minio
  5. container_name: minio-node3
  6. hostname: minio3
  7. expose:
  8. - "19000"
  9. - "19001"
  10. environment:
  11. - MINIO_ROOT_USER=minio
  12. - MINIO_ROOT_PASSWORD=minio@123
  13. volumes:
  14. - /home/minio-data1:/data1
  15. - /home/minio-data2:/data2
  16. command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
  17. privileged: true
  18. healthcheck:
  19. test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
  20. interval: 30s
  21. timeout: 20s
  22. retries: 3
  23. extra_hosts:
  24. - minio2:192.168.1.242
  25. - minio3:192.168.1.243
  26. - minio4:192.168.1.244
  27. restart: always
  28. network_mode: host
  29. nginx:
  30. image: nginx:1.19.2-alpine
  31. hostname: nginx
  32. volumes:
  33. - /home/dockerinstall/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf:ro
  34. - /home/dockerinstall/nginx/cert/server1.crt:/etc/nginx/ssl/server.crt:ro
  35. - /home/dockerinstall/nginx/cert/server1.key:/etc/nginx/ssl/server.key:ro
  36. ports:
  37. - "9000:9090"
  38. - "9001:9091"
  39. - "443:443" # 添加这一行来映射 443 端口
  40. extra_hosts:
  41. - minio2:192.168.1.242
  42. - minio3:192.168.1.243
  43. - minio4:192.168.1.244
  44. restart: always

这句话是在 Docker Compose 文件中定义的一个卷 (volume) 映射,用于将宿主机上的文件或目录挂载到容器内。具体来说,这行代码的意思是:

  1. volumes: - 这个关键字表示后面跟着的是一个或多个卷映射。
  2. - ./nginx.conf:/etc/nginx/nginx.conf:ro - 这是一个具体的卷映射配置,其中包含了三个部分:
    • ./nginx.conf - 表示宿主机上的文件路径,即当前目录下的 nginx.conf 文件。
    • :/etc/nginx/nginx.conf - 表示容器内的文件路径,即将宿主机上的 nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 路径。
    • :ro - 表示只读权限,意味着挂载到容器内的文件只能被读取而不能被修改。

综上所述,这行配置的作用是将宿主机当前目录下的 nginx.conf 文件以只读的方式挂载到容器内的 /etc/nginx/nginx.conf 路径。这样做的目的是为了让容器能够使用宿主机提供的 Nginx 配置文件,并且确保容器内的进程不能修改这个配置文件。

nginx配置文件如下:

  1. user nginx; # 设置 Nginx 运行的用户为 "nginx"
  2. worker_processes auto; # 自动确定工作进程的数量,通常是根据 CPU 核心数来决定。
  3. error_log /var/log/nginx/error.log warn; # 将错误日志记录到指定路径,并仅记录警告及以上级别的日志。
  4. pid /var/run/nginx.pid; # 指定 Nginx 进程 ID 文件的路径。
  5. events {
  6. worker_connections 4096; # 设置每个工作进程的最大并发连接数。
  7. }
  8. http {
  9. include /etc/nginx/mime.types; # 包含 MIME 类型配置文件。
  10. default_type application/octet-stream; # 设置默认 MIME 类型。
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # 定义访问日志的格式。
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main; # 将访问日志记录到指定路径,并采用上面定义的日志格式。
  15. sendfile on; # 启用高效文件传输。
  16. keepalive_timeout 65; # 设置保持连接的超时时间。
  17. upstream adobe { # 定义了一个名为 "adobe" 的负载均衡组,包含三个服务器。
  18. server minio2:19000;
  19. server minio3:19000;
  20. server minio4:19000;
  21. }
  22. upstream console { # 定义了一个名为 "console" 的负载均衡组,同样包含三个服务器,并使用 ip_hash 进行基于 IP 的会话保持。
  23. ip_hash;
  24. server minio2:19001;
  25. server minio3:19001;
  26. server minio4:19001;
  27. }
  28. # HTTP 服务器块,用于重定向 HTTP 到 HTTPS
  29. server {
  30. listen 80; # 监听 80 端口,用于将 HTTP 请求重定向到 HTTPS。
  31. server_name 192.168.1.243; # 设置服务器名称,这里是 IP 地址。
  32. return 301 https://$host$request_uri; # 将 HTTP 请求重定向到 HTTPS。
  33. }
  34. # HTTPS 服务器块
  35. server {
  36. listen 443 ssl; # 监听 443 端口,用于 SSL。
  37. listen [::]:443 ssl; # 监听 IPv6 地址的 443 端口,用于 SSL。
  38. server_name 192.168.1.243; # 设置服务器名称,这里是 IP 地址。
  39. ssl_certificate /etc/nginx/ssl/server1.crt; # SSL 证书文件路径。
  40. ssl_certificate_key /etc/nginx/ssl/server1.key; # SSL 私钥文件路径。
  41. ssl_session_timeout 5m; # SSL 会话缓存的有效时间。
  42. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的 SSL/TLS 版本。
  43. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 支持的加密套件。
  44. ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件列表。
  45. # To allow special characters in headers
  46. ignore_invalid_headers off; # 允许特殊字符出现在 HTTP 头中。
  47. # Allow any size file to be uploaded.
  48. # Set to a value such as 1000m; to restrict file size to a specific value
  49. client_max_body_size 0; # 允许上传任意大小的文件。
  50. # To disable buffering
  51. proxy_buffering off; # 关闭代理缓冲。
  52. proxy_request_buffering off; # 不对请求体进行缓冲。
  53. location / { # 定义根路径的处理规则。
  54. proxy_set_header Host $http_host; # 设置 Host 头。
  55. proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实 IP。
  56. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置客户端 IP 列表。
  57. proxy_set_header X-Forwarded-Proto $scheme; # 设置协议类型。
  58. proxy_connect_timeout 300; # 设置连接超时时间。
  59. # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
  60. proxy_http_version 1.1; # 使用 HTTP/1.1 版本。
  61. proxy_set_header Connection ""; # 清空 Connection 头,避免代理服务器使用 close 或者 keep-alive。
  62. # For WebSocket support
  63. proxy_set_header Upgrade $http_upgrade; # 设置升级协议头。
  64. proxy_set_header Connection "upgrade"; # 设置连接类型为升级。
  65. chunked_transfer_encoding off; # 禁用分块传输编码。
  66. proxy_pass http://adobe; # 指定代理目标。
  67. }
  68. }
  69. # 另一个服务器块监听 9091 端口
  70. server {
  71. listen 9091;
  72. listen [::]:9091; # 监听 IPv6 地址的 9091 端口。
  73. server_name 192.168.1.243;
  74. # To allow special characters in headers
  75. ignore_invalid_headers off; # 允许特殊字符出现在 HTTP 头中。
  76. # Allow any size file to be uploaded.
  77. # Set to a value such as 1000m; to restrict file size to a specific value
  78. client_max_body_size 0; # 允许上传任意大小的文件。
  79. # To disable buffering
  80. proxy_buffering off; # 关闭代理缓冲。
  81. proxy_request_buffering off; # 不对请求体进行缓冲。
  82. location / { # 定义根路径的处理规则。
  83. proxy_set_header Host $http_host; # 设置 Host 头。
  84. proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实 IP。
  85. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置客户端 IP 列表。
  86. proxy_set_header X-Forwarded-Proto $scheme; # 设置协议类型。
  87. proxy_set_header X-NginX-Proxy true; # 设置代理标识。
  88. # This is necessary to pass the correct IP to be hashed
  89. real_ip_header X-Real-IP; # 指定使用哪个头作为真实 IP。
  90. proxy_connect_timeout 300; # 设置连接超时时间。
  91. # To support websocket
  92. proxy_http_version 1.1; # 使用 HTTP/1.1 版本。
  93. proxy_set_header Upgrade $http_upgrade; # 设置升级协议头。
  94. proxy_set_header Connection "upgrade"; # 设置连接类型为升级。
  95. chunked_transfer_encoding off; # 禁用分块传输编码。
  96. proxy_pass http://console; # 指定代理目标。
  97. }
  98. }
  99. # 另一个服务器块监听 9090 端口
  100. server {
  101. listen 9090;
  102. listen [::]:9090; # 监听 IPv6 地址的 9090 端口。
  103. server_name 192.168.1.243;
  104. # To allow special characters in headers
  105. ignore_invalid_headers off; # 允许特殊字符出现在 HTTP 头中。
  106. # Allow any size file to be uploaded.
  107. # Set to a value such as 1000m; to restrict file size to a specific value
  108. client_max_body_size 0; # 允许上传任意大小的文件。
  109. # To disable buffering
  110. proxy_buffering off; # 关闭代理缓冲。
  111. proxy_request_buffering off; # 不对请求体进行缓冲。
  112. location / { # 定义根路径的处理规则。
  113. proxy_set_header Host $http_host; # 设置 Host 头。
  114. proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实 IP。
  115. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置客户端 IP 列表。
  116. proxy_set_header X-Forwarded-Proto $scheme; # 设置协议类型。
  117. proxy_connect_timeout 300; # 设置连接超时时间。
  118. # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
  119. proxy_http_version 1.1; # 使用 HTTP/1.1 版本。
  120. proxy_set_header Connection ""; # 清空 Connection 头,避免代理服务器使用 close 或者 keep-alive。
  121. chunked_transfer_encoding off; # 禁用分块传输编码。
  122. proxy_pass http://adobe; # 指定代理目标。
  123. }
  124. }
  125. }

解释和说明:

  1. Global Configuration (全局配置):

    • 设置了运行 Nginx 的用户、错误日志的位置、PID 文件的位置等基本配置项。
  2. Events Block (事件块):

    • 设置了每个工作进程的最大并发连接数。
  3. HTTP Configuration (HTTP 配置):

    • 包含了 MIME 类型配置文件。
    • 定义了访问日志的格式。
    • 启用了高效文件传输。
    • 设置了保持连接的超时时间。
  4. Upstream Blocks (上游配置):

    • 定义了两个负载均衡组 adobe 和 console,分别包含三个服务器,并为 console 组启用了基于 IP 的会话保持。
  5. Server Blocks (服务器配置):

    • HTTP 重定向到 HTTPS:
      • 侦听80端口,并将所有HTTP请求重定向到HTTPS。
    • HTTPS 服务器块:
      • 侦听443端口,用于SSL,并启用了 SSL 证书和密钥,以及 SSL 会话缓存、协议版本和加密套件等配置。
      • 两个服务器块分别代理到 adobe 和 console 上游组,并支持 WebSocket。

通过以上配置,Nginx 将能够支持 HTTPS,并将 HTTP 请求重定向到 HTTPS,同时代理到不同的后端服务。

分别在242,243,244上创建目录和上传相关配置文件

然后分别启动

docker-compose up -d

参考:sudo yum install tree 安装tree命令   sudo yum install lrzsz 安装rz命令

-----------------------------------------------

安装完毕 登录验证

http 登录 用户名 minio 密码 minio@123

---------------------------------------------------------------------------------------

https登录 未成功 需要重新生产ssl文件----这段貌似没用 请忽略
在本地修改

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf

openssl rsa -in server1.key -out server1_rsa.key

输入密码123456

mv server1_rsa.key server1.key
---------------------------------------------------------------------------------------------------------------------

docker-compose stop

重新启动

docker-compose up -d

https://192.168.1.243/

也可以正常访问了

-----------------------------------------

参考:Minio搭建文件服务器的学习
1、创建Bucket

点击 prod记录后 将private改为public

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号