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) 映射,用于将宿主机上的文件或目录挂载到容器内。具体来说,这行代码的意思是:
volumes:- 这个关键字表示后面跟着的是一个或多个卷映射。- ./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; # 指定代理目标。}}
}
解释和说明:
-
Global Configuration (全局配置):
- 设置了运行 Nginx 的用户、错误日志的位置、PID 文件的位置等基本配置项。
-
Events Block (事件块):
- 设置了每个工作进程的最大并发连接数。
-
HTTP Configuration (HTTP 配置):
- 包含了 MIME 类型配置文件。
- 定义了访问日志的格式。
- 启用了高效文件传输。
- 设置了保持连接的超时时间。
-
Upstream Blocks (上游配置):
- 定义了两个负载均衡组
adobe和console,分别包含三个服务器,并为console组启用了基于 IP 的会话保持。
- 定义了两个负载均衡组
-
Server Blocks (服务器配置):
- HTTP 重定向到 HTTPS:
- 侦听80端口,并将所有HTTP请求重定向到HTTPS。
- HTTPS 服务器块:
- 侦听443端口,用于SSL,并启用了 SSL 证书和密钥,以及 SSL 会话缓存、协议版本和加密套件等配置。
- 两个服务器块分别代理到
adobe和console上游组,并支持 WebSocket。
- HTTP 重定向到 HTTPS:
通过以上配置,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

相关文章:
Minos 多主机分布式 docker-compose 集群部署
参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) 【运维】docker-compose安装minio集群-CSDN博客 Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能 中文地址:MinIO | 用于AI的S3 …...
Unity + Hybridclr + Addressable + 微信小程序 热更新报错
报错时机: Generate All 怎么All 死活就是报错 生成微信小程序,并启动后 报错内容: MissingMethodException:AoT generic method notinstantiated in aot.assembly:Unity.ResourceManager:dll, 原因: Hybridclr 开发文档 解…...
鸿蒙开发—黑马云音乐之Music页面
目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果: 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…...
IsaacLab | 如何在Manipulation任务中添加新的目标(target)
如是我闻: 终于让我给摸索出来了,在这里描述一下问题场景。 假使说我们有一个机械臂操作的任务,这样婶的 Isaac Lab | Push 我们想做多目标的任务,这时候需要向环境中添加第二个目标,像这样 Isaac Lab | Add target 那…...
【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)
接上篇《60、Pandas中DataFrame对象的操作(一)》 上一篇我们讲解了DataFrame对象的简介、基本操作及数据清洗相关的内容。本篇我们来继续讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。 一、DataFrame的统计分析 在数据分析和处理中…...
Linux(虚拟机)的介绍
Linux介绍 常见的操作系统 Windows:微软公司开发的一款桌面操作系统(闭源系统)。版本有dos,win98,win NT,win XP , win7, win vista. win8, win10,win11。服务器操作系统:winserve…...
CSS(九)——CSS 轮廓(outline)
CSS 轮廓(outline) 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 轮廓(outline)属性指定元素轮廓的样式、颜色和宽度。 让我们用一个图来看…...
Unity Timeline:构建复杂动画序列的利器
Unity的Timeline是一个强大的动画工具,它允许开发者创建复杂的动画序列,将动画、音频和事件整合到一个统一的时间轴上。Timeline的可视化编辑界面使得动画制作变得更加直观和灵活。本文将介绍Unity Timeline的基本概念、功能以及如何使用它来实现动画。 …...
C# 与C++ cli
cli CLI(Command Line Interface)是一种通过命令行界面与计算机系统进行交互的方式。它提供了一种以文本形式输入命令和接收系统输出的方法,用于执行各种操作和管理计算机系统。以下是CLI的详细解释: 一、定义与基本概念 定义&…...
Linux文件编程--打开及创建
...
Vue3点击按钮实现跳转页面并携带参数
前提:有完整的路由规则 1.源页面 <template><div><h1>源页面</h1><!--通过js代码跳转--><template #default"scope"><button click"toTargetView(scope.row)">点击跳转携带参数</button><…...
探索Linux-1-虚拟机远程登陆XShell6远程传输文件Xftp6
Linux是什么? Linux是一个开源的操作系统内核,由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。它基于Unix操作系统,但提供了更多的自由和灵活性。Linux内核是操作系统的核心部分,负责管理系统资源、处理…...
SpringBoot中使用监听器
1.定义一个事件 /*** 定义事件* author hrui* date 2024/7/25 12:46*/ public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message message;}public String getMessage() …...
mybatise全接触-面试宝典-知识大全
1 . 简述什么是Mybatis和原理 ? Mybatis工作原理: (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者…...
Catalyst优化器:让你的Spark SQL查询提速10倍
目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…...
【Hot100】LeetCode—416. 分割等和子集
目录 题目1- 思路2- 实现⭐152. 乘积最大子数组——题解思路 3- ACM 实现 题目 原题连接:416. 分割等和子集 1- 思路 理解为背包问题 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量…...
前端开发知识-vue
大括号里边放键值对,即是一个对象。 一、vue可以简化前端javascript的操作。 主要特点是可以实现视图、数据的双向绑定。 使用vue主要分为三个步骤: 1.javascript中引入vue.js 可以src中可以是vue的网址,也可以是本地下载。 2.在javasc…...
【嵌入式硬件】快衰减和慢衰减
1.引语 在使用直流有刷电机驱动芯片A4950时,这款芯片采用的是PWM控制方式,我发现他的正转、反转有两种控制方式,分别是快衰减和慢衰减。 2.理解 慢衰减:相当于加在电机(感性原件)两端电压消失,将电机两端正负短接。 快衰减:相当于加在电机(感性原件)两端电压消失,将电机…...
C语言 | Leetcode C语言题解之第275题H指数II
题目: 题解: int hIndex(int* citations, int citationsSize) {int left 0, right citationsSize - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > citationsSize - mid) {right mid - 1;} else {left mi…...
速盾:网络安全和 CDN 之间的关系是怎样的?
网络安全和内容交付网络(CDN)之间有着密切的关系。网络安全主要涉及保护网络和系统免受各种威胁和攻击,而CDN是一种用于提供更快速、高效和可靠的内容交付服务的技术。在当今数字化和云计算时代,网络安全和CDN之间的关系变得更加紧…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
