一、通用概述
bitnami/minio 是 minio 的封装版本,所以有些配置还是得按 bitnami 的约定来。
bitnami/minio 官方说明文档请看这里
注意的是,各节点间必须采用统一端口号,默认的端口号为:9000(API端口)/9001(前端端口)
使用 MINIO_API_PORT_NUMBER=9010
MINIO_CONSOLE_PORT_NUMBER=9011
更改当前节点的端口。
全部可配置属性参考官方给出的表格:
Name | Description | Default Value |
---|---|---|
MINIO_DATA_DIR | MinIO directory for data. | /bitnami/minio/data |
MINIO_API_PORT_NUMBER | MinIO API port number. | 9000 |
MINIO_CONSOLE_PORT_NUMBER | MinIO RMI port number. | 9001 |
MINIO_SCHEME | MinIO web scheme. | http |
MINIO_SKIP_CLIENT | Skip MinIO client configuration. | no |
MINIO_DISTRIBUTED_MODE_ENABLED | Enable MinIO distributed mode. | no |
MINIO_DEFAULT_BUCKETS | MinIO default buckets. | nil |
MINIO_STARTUP_TIMEOUT | MinIO startup timeout. | 10 |
MINIO_SERVER_URL | MinIO server external URL. | $MINIO_SCHEME://localhost:$MINIO_API_PORT_NUMBER |
MINIO_APACHE_CONSOLE_HTTP_PORT_NUMBER | MinIO Console UI HTTP port, exposed via Apache with basic authentication. | 80 |
MINIO_APACHE_CONSOLE_HTTPS_PORT_NUMBER | MinIO Console UI HTTPS port, exposed via Apache with basic authentication. | 443 |
MINIO_APACHE_API_HTTP_PORT_NUMBER | MinIO API HTTP port, exposed via Apache with basic authentication. | 9000 |
MINIO_APACHE_API_HTTPS_PORT_NUMBER | MinIO API HTTPS port, exposed via Apache with basic authentication. | 9443 |
MINIO_FORCE_NEW_KEYS | Force recreating MinIO keys. | no |
MINIO_ROOT_USER | MinIO root user name. | minio |
MINIO_ROOT_PASSWORD | Password for MinIO root user. | miniosecret |
二、单节点单硬盘
大伙一般不会用单硬盘,除非是做测试。
version: '2'
services:
minio1:
# 国内镜像源不要使用 :latest 不然拉下来是两年前的镜像
image: 'bitnami/minio:2024.7.16'
volumes:
# 将数据映射出
- './data:/bitnami/minio/data'
environment:
- MINIO_ROOT_USER=minio-root-user # 前端登录账户
- MINIO_ROOT_PASSWORD=minio-root-password # 前端登录密码
二、单节点多硬盘
根据minio规定,必须满足4块及以上硬盘的要求(且必须是偶数个),
例如单节点4硬盘、2节点每节点2硬盘 都是可以的。
(可以用文件夹假装被挂载的硬盘来做测试)
这个很愉快的用官方给的配置即可。
version: '2'
services:
minio-0:
# 国内镜像源不要使用 :latest 不然拉下来是两年前的镜像
image: 'bitnami/minio:2024.7.16'
volumes:
- 'minio_0_data_0:/bitnami/minio/data-0'
- 'minio_0_data_1:/bitnami/minio/data-1'
environment:
- MINIO_ROOT_USER=minio # 前端登录账户
- MINIO_ROOT_PASSWORD=miniosecret # 前端登录密码
- MINIO_DISTRIBUTED_MODE_ENABLED=yes
- MINIO_DISTRIBUTED_NODES=minio-{0...1}/bitnami/minio/data-{0...1}
minio-1:
# 国内镜像源不要使用 :latest 不然拉下来是两年前的镜像
image: 'bitnami/minio:2024.7.16'
volumes:
- 'minio_1_data_0:/bitnami/minio/data-0'
- 'minio_1_data_1:/bitnami/minio/data-1'
environment:
- MINIO_ROOT_USER=minio # 前端登录账户
- MINIO_ROOT_PASSWORD=miniosecret # 前端登录密码
- MINIO_DISTRIBUTED_MODE_ENABLED=yes
- MINIO_DISTRIBUTED_NODES=minio-{0...1}/bitnami/minio/data-{0...1}
# 这块我感觉加不加都行,因为 docker compose 的默认配置就是这个
volumes:
minio_0_data_0:
driver: local
minio_0_data_1:
driver: local
minio_1_data_0:
driver: local
minio_1_data_1:
driver: local
这里 minio 0-1 节点处于同一 docker 网络环境,无需配置网络,节点间即可找到彼此。
针对上述配置文件中的
MINIO_DISTRIBUTED_NODES=minio-{0...1}/bitnami/minio/data-{0...1}
和volume映射的 /bitnami/minio/data-0
/bitnami/minio/data-1
是要相互对应的,应当是 2 存储盘, 2 备份盘。所以 minio0 和 minio1 具有相同的volume映射源。
关于 MINIO_DISTRIBUTED_NODES
的配置一开始我也不太懂,于是看了一下源码,给出一小段:
# libminio.sh 141行
minio_start_bg() {
# 前面省略 ...
if is_boolean_yes "$MINIO_DISTRIBUTED_MODE_ENABLED"; then
read -r -a nodes <<<"$(tr ',;' ' ' <<<"${MINIO_DISTRIBUTED_NODES}")"
for node in "${nodes[@]}"; do
if is_distributed_ellipses_syntax; then
args+=("${MINIO_SCHEME}://${node}")
else
args+=("${MINIO_SCHEME}://${node}:${MINIO_API_PORT_NUMBER}/${MINIO_DATA_DIR}")
fi
done
else
args+=("${MINIO_DATA_DIR}")
fi
# 后面省略 ...
}
大概意思就是如果 MINIO_DISTRIBUTED_MODE_ENABLED
的值为 yes
,且当前节点中有代表缩略的 ...
三个点,那么就不在 node
拼接端口号和 minio 的数据路径了。如果 MINIO_DISTRIBUTED_NODES
= minio1, minio2
,那么这种未缩略的形式是会自动加上端口号和数据路径的。
三、多节点多硬盘
有了单节点多硬盘的标准写法,那么多节点的就没什么难度了。
(没有得到这个标准写法的时候,我摸索的真的好痛苦 T_T)
唯一需要注意的一点:网络配置,不同于单节点,节点间通过容器服务名就能找到对方,多节点我们就必须配置网络了,不过也很简单。我们先将标准配置贴出。
# 服务器 0
version: '3'
services:
minio0:
# 国内镜像源不要使用 :latest 不然拉下来是两年前的镜像
image: 'bitnami/minio:2024.7.16'
volumes:
- './minio-data0:/bitnami/minio/data-0'
- './minio-data1:/bitnami/minio/data-1'
network_mode: host # 接入物理网络
environment:
- MINIO_API_PORT_NUMBER=9010 # 自定义API端口
- MINIO_CONSOLE_PORT_NUMBER=9011 # 自定义前端端口
- MINIO_ROOT_USER=minio # 前端登录账户
- MINIO_ROOT_PASSWORD=minioadmin # 前端登录密码
- MINIO_DISTRIBUTED_MODE_ENABLED=yes
- MINIO_DISTRIBUTED_NODES=minio{0...1}/bitnami/minio/data-{0...1}
- MINIO_SKIP_CLIENT=yes
# 服务器 1
version: '3'
services:
minio1:
image: 'bitnami/minio:2024.7.16'
volumes:
- './minio-data0:/bitnami/minio/data-0'
- './minio-data1:/bitnami/minio/data-1'
network_mode: host # 接入物理网络
environment:
- MINIO_API_PORT_NUMBER=9010
- MINIO_CONSOLE_PORT_NUMBER=9011
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=minioadmin
- MINIO_DISTRIBUTED_MODE_ENABLED=yes
- MINIO_DISTRIBUTED_NODES=minio{0...1}/bitnami/minio/data-{0...1}
- MINIO_SKIP_CLIENT=yes
这里我们把单节点多硬盘中的 minio0
和 minio1
拆分到两台服务器上,另外添加 network_mode: host
将 docker 接入物理网络。
开始配置本地域名解析(这玩意应该是这个叫法?)
编辑 /etc/hosts
:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.1.122 minio0
192.168.1.123 minio1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
在上述文件中添加 minio0
和 minio1
的相关配置,ip
请按当前节点所在服务器的真实 ip
即可。
两台服务器均需要修改 etc/hosts
文件。
接着需要让修改后的 hosts
文件生效,这个大伙可以百度查一下,我看了一下答案还挺多的,需要大伙试一下。
如何判断是否生效?很简单用ping
一下另一台主机即可:ping minio0
、ping minio1
随后依次 docker compose up -d
启动两个节点即可,节点会互相等待对方,直到都连接成功。
可能出现的问题是 volume 映射的磁盘没有读写权限,手动赋予即可。
四、多节点负载均衡
这个我还没尝试,贴一个已经浏览的博客
https://blog.csdn.net/qq_45408390/article/details/131239753