当前位置: 首页 > news >正文

Minos 多主机分布式 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)

version: "3"
services:minio:image: quay.io/minio/miniocontainer_name: minio-node2hostname: minio2expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- ./data-1:/data1- ./data-2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: host
version: "3"
services:minio:image: quay.io/minio/miniocontainer_name: minio-node4hostname: minio4expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- ./data-1:/data1- ./data-2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: host

 2、带nginx (243)

version: "3"services:minio:image: quay.io/minio/miniocontainer_name: minio-node3hostname: minio3expose:- "19000"- "19001"environment:- MINIO_ROOT_USER=minio- MINIO_ROOT_PASSWORD=minio@123volumes:- /home/minio-data1:/data1- /home/minio-data2:/data2command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}privileged: truehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]interval: 30stimeout: 20sretries: 3extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: alwaysnetwork_mode: hostnginx:image: nginx:1.19.2-alpinehostname: nginxvolumes:- /home/dockerinstall/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf:ro- /home/dockerinstall/nginx/cert/server1.crt:/etc/nginx/ssl/server.crt:ro- /home/dockerinstall/nginx/cert/server1.key:/etc/nginx/ssl/server.key:roports:- "9000:9090"- "9001:9091"- "443:443"  # 添加这一行来映射 443 端口extra_hosts:- minio2:192.168.1.242- minio3:192.168.1.243- minio4:192.168.1.244restart: 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配置文件如下:

user nginx;  # 设置 Nginx 运行的用户为 "nginx"。
worker_processes auto;  # 自动确定工作进程的数量,通常是根据 CPU 核心数来决定。error_log /var/log/nginx/error.log warn;  # 将错误日志记录到指定路径,并仅记录警告及以上级别的日志。
pid /var/run/nginx.pid;  # 指定 Nginx 进程 ID 文件的路径。events {worker_connections 4096;  # 设置每个工作进程的最大并发连接数。
}http {include /etc/nginx/mime.types;  # 包含 MIME 类型配置文件。default_type application/octet-stream;  # 设置默认 MIME 类型。log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';  # 定义访问日志的格式。access_log /var/log/nginx/access.log main;  # 将访问日志记录到指定路径,并采用上面定义的日志格式。sendfile on;  # 启用高效文件传输。keepalive_timeout 65;  # 设置保持连接的超时时间。upstream adobe {  # 定义了一个名为 "adobe" 的负载均衡组,包含三个服务器。server minio2:19000;server minio3:19000;server minio4:19000;}upstream console {  # 定义了一个名为 "console" 的负载均衡组,同样包含三个服务器,并使用 ip_hash 进行基于 IP 的会话保持。ip_hash;server minio2:19001;server minio3:19001;server minio4:19001;}# HTTP 服务器块,用于重定向 HTTP 到 HTTPSserver {listen 80;  # 侦听80端口,用于将HTTP请求重定向到HTTPS。server_name 192.168.1.24;  # 自己的域名。return 301 https://$host$request_uri;  # 将HTTP请求重定向到HTTPS。}# HTTPS 服务器块server {listen 443 ssl;  # 侦听443端口,用于SSL。listen [::]:443 ssl;  # 侦听 IPv6 地址的443端口,用于SSL。server_name 192.168.1.243;  # 自己的域名。ssl_certificate /etc/nginx/ssl/server1.crt;  # SSL 证书文件路径。ssl_certificate_key /etc/nginx/ssl/server1.key;  # SSL 私钥文件路径。ssl_session_timeout 5m;  # SSL 会话缓存的有效时间。ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 支持的 SSL/TLS 版本。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;  # 支持的加密套件。ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件列表。# To allow special characters in headersignore_invalid_headers off;  # 允许特殊字符出现在 HTTP 头中。# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;  # 允许上传任意大小的文件。# To disable bufferingproxy_buffering off;  # 关闭代理缓冲。proxy_request_buffering off;  # 不对请求体进行缓冲。location / {  # 定义根路径的处理规则。proxy_set_header Host $http_host;  # 设置 Host 头。proxy_set_header X-Real-IP $remote_addr;  # 设置客户端真实 IP。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置客户端 IP 列表。proxy_set_header X-Forwarded-Proto $scheme;  # 设置协议类型。proxy_connect_timeout 300;  # 设置连接超时时间。# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1;  # 使用 HTTP/1.1 版本。proxy_set_header Connection "";  # 清空 Connection 头,避免代理服务器使用 close 或者 keep-alive。# For WebSocket supportproxy_set_header Upgrade $http_upgrade;  # 设置升级协议头。proxy_set_header Connection "upgrade";  # 设置连接类型为升级。chunked_transfer_encoding off;  # 禁用分块传输编码。proxy_pass http://adobe;  # 指定代理目标。}}# HTTPS 服务器块 for consoleserver {listen 443 ssl;  # 侦听443端口,用于SSL。listen [::]:443 ssl;  # 侦听 IPv6 地址的443端口,用于SSL。server_name 192.168.1.243;  # 自己的域名。ssl_certificate /etc/nginx/ssl/server1.crt;  # SSL 证书文件路径。ssl_certificate_key /etc/nginx/ssl/server1.key;  # SSL 私钥文件路径。ssl_session_timeout 5m;  # SSL 会话缓存的有效时间。ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 支持的 SSL/TLS 版本。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;  # 支持的加密套件。ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件列表。# To allow special characters in headersignore_invalid_headers off;  # 允许特殊字符出现在 HTTP 头中。# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;  # 允许上传任意大小的文件。# To disable bufferingproxy_buffering off;  # 关闭代理缓冲。proxy_request_buffering off;  # 不对请求体进行缓冲。location / {  # 定义根路径的处理规则。proxy_set_header Host $http_host;  # 设置 Host 头。proxy_set_header X-Real-IP $remote_addr;  # 设置客户端真实 IP。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置客户端 IP 列表。proxy_set_header X-Forwarded-Proto $scheme;  # 设置协议类型。proxy_set_header X-NginX-Proxy true;  # 设置代理标志。# This is necessary to pass the correct IP to be hashedreal_ip_header X-Real-IP;  # 设置用于 IP 哈希的头部。proxy_connect_timeout 300;  # 设置连接超时时间。# For WebSocket supportproxy_set_header Upgrade $http_upgrade;  # 设置升级协议头。proxy_set_header Connection "upgrade";  # 设置连接类型为升级。chunked_transfer_encoding off;  # 禁用分块传输编码。proxy_pass http://console;  # 指定代理目标。}}
}

解释和说明:

  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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性
  • Flink SQL 的工作机制
  • C++学习笔记——模板
  • UNIX 域协议
  • 从零到一使用 Ollama、Dify 和 Docker 构建 Llama 3.1 模型服务
  • 【Golang 面试 - 基础题】每日 5 题(十)
  • AIGC-VDM -Video Diffusion Models论文解读
  • CeoMax总裁主题最新3.8.1破解免授权版/WordPress付费资源素材下载主题
  • PHP完整表单实例
  • 爬虫学习——20.Scrapy框架(2)入门
  • 【开发学习笔记】git的工作区与分支
  • centos7 mysql 基本测试(7)主从并行简单测试
  • Cocos Creator2D游戏开发(6)-飞机大战(4)-敌机产生
  • Spring知识点
  • DataEase一键部署:轻松搭建数据可视化平台
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 3.7、@ResponseBody 和 @RestController
  • GitUp, 你不可错过的秀外慧中的git工具
  • Vue2.x学习三:事件处理生命周期钩子
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 经典排序算法及其 Java 实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 理解在java “”i=i++;”所发生的事情
  • 前端面试题总结
  • 前端面试之CSS3新特性
  • 什么是Javascript函数节流?
  • 事件委托的小应用
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我从编程教室毕业
  • 用jQuery怎么做到前后端分离
  • 国内开源镜像站点
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​卜东波研究员:高观点下的少儿计算思维
  • #100天计划# 2013年9月29日
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)常见O(n^2)排序算法解析
  • (4)Elastix图像配准:3D图像
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .gitignore文件—git忽略文件
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 的缓存方案
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Remoting学习笔记(三)信道
  • .Net中wcf服务生成及调用
  • .sys文件乱码_python vscode输出乱码
  • @Value读取properties中文乱码解决方案
  • [100天算法】-x 的平方根(day 61)
  • [30期] 我的学习方法
  • [AIGC 大数据基础]hive浅谈
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解