【bitnami/minio】docker compose 配置集群知识梳理

一、通用概述

bitnami/minio 是 minio 的封装版本,所以有些配置还是得按 bitnami 的约定来。
bitnami/minio 官方说明文档请看这里
注意的是,各节点间必须采用统一端口号,默认的端口号为:9000(API端口)/9001(前端端口)
使用 MINIO_API_PORT_NUMBER=9010 MINIO_CONSOLE_PORT_NUMBER=9011 更改当前节点的端口。
全部可配置属性参考官方给出的表格:

NameDescriptionDefault Value
MINIO_DATA_DIRMinIO directory for data./bitnami/minio/data
MINIO_API_PORT_NUMBERMinIO API port number.9000
MINIO_CONSOLE_PORT_NUMBERMinIO RMI port number.9001
MINIO_SCHEMEMinIO web scheme.http
MINIO_SKIP_CLIENTSkip MinIO client configuration.no
MINIO_DISTRIBUTED_MODE_ENABLEDEnable MinIO distributed mode.no
MINIO_DEFAULT_BUCKETSMinIO default buckets.nil
MINIO_STARTUP_TIMEOUTMinIO startup timeout.10
MINIO_SERVER_URLMinIO server external URL.$MINIO_SCHEME://localhost:$MINIO_API_PORT_NUMBER
MINIO_APACHE_CONSOLE_HTTP_PORT_NUMBERMinIO Console UI HTTP port, exposed via Apache with basic authentication.80
MINIO_APACHE_CONSOLE_HTTPS_PORT_NUMBERMinIO Console UI HTTPS port, exposed via Apache with basic authentication.443
MINIO_APACHE_API_HTTP_PORT_NUMBERMinIO API HTTP port, exposed via Apache with basic authentication.9000
MINIO_APACHE_API_HTTPS_PORT_NUMBERMinIO API HTTPS port, exposed via Apache with basic authentication.9443
MINIO_FORCE_NEW_KEYSForce recreating MinIO keys.no
MINIO_ROOT_USERMinIO root user name.minio
MINIO_ROOT_PASSWORDPassword 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

这里我们把单节点多硬盘中的 minio0minio1 拆分到两台服务器上,另外添加 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

在上述文件中添加 minio0minio1 的相关配置,ip 请按当前节点所在服务器的真实 ip 即可。
两台服务器均需要修改 etc/hosts 文件。
接着需要让修改后的 hosts 文件生效,这个大伙可以百度查一下,我看了一下答案还挺多的,需要大伙试一下。
如何判断是否生效?很简单用ping一下另一台主机即可:ping minio0ping minio1
随后依次 docker compose up -d 启动两个节点即可,节点会互相等待对方,直到都连接成功。
可能出现的问题是 volume 映射的磁盘没有读写权限,手动赋予即可。

四、多节点负载均衡

这个我还没尝试,贴一个已经浏览的博客
https://blog.csdn.net/qq_45408390/article/details/131239753


五、参考文章:

  1. minio官方教程
  2. bitnami/minio官方教程
  3. 搭建docker集群
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值