minio集群扩容简介
参考:https://docs.minio.io/docs/distributed-minio-quickstart-guide.html
minio默认支持集群无限扩容,通过在启动命令中指定新的set即可对现有分布式纠删码群集执行扩容。
官方扩容示例:
#创建集群
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...4}/export{1...16}
#扩容集群
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...4}/export{1...16} http://host{5...12}/export{1...16}
在扩容集群时用到了2组http://{...}
的语法参数,所以旧集群以及扩容都必须使用这种语法形式创建,命令行中的每组server称为一个zone,此示例中有2 server pools,对于外部的写数据请求,minio server会首先查找可用空间多的zone,然后再在zone内选择set和disk drive。
注意:添加的每个zone必须具有与原始zone相同的set集大小,以便维持相同的数据冗余SLA。例如,如果您的第一个zone是8个磁盘,则可以添加每个server pools包含16、32或1024个磁盘的zone。您只需确保部署SLA是原始数据冗余SLA的倍数。
docker扩容示例
下面使用docker完整演示minio集群扩容的基本流程。
准备独立磁盘
准备4个节点,配置主机名hosts解析
cat > /etc/hosts <<EOF
192.168.93.40 minio-1
192.168.93.41 minio-2
192.168.93.42 minio-3
192.168.93.43 minio-4
EOF
注意:扩容原节点和新节点使用的目录不能是根磁盘路径,必须使用独立磁盘,否则扩容失败。
每个节点添加一块至多块独立磁盘,这里以添加一块/dev/sdb
磁盘为例:
pvcreate /dev/sdb
vgcreate vg01 /dev/sdb
lvcreate -l 100%VG -n lv01 vg01
mkfs.xfs /dev/vg01/lv01
mkdir -p /data/minio/
cat >> /etc/fstab <<EOF
/dev/mapper/vg01-lv01 /data/minio/ xfs defaults 0 0
EOF
mount -a && df -h
每个节点创建2个挂载点目录
mkdir -p /data/minio/data{1...2}
创建新集群
使用minio-1、minio-2节点创建新集群,每个节点挂载2个目录,在minio-1和minio-2上执行:
docker run -d --name minio \
--restart=always \
--net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v /data/minio/data1:/data1 \
-v /data/minio/data2:/data2 \
minio/minio server \
http://minio-{1...2}/data{1...2}
注意minio版本,部分版本存在bug扩容后无法在原桶写入数据,最新版本已解决。
配置客户端信息
mc config host add minio http://minio-1:9000 minio minio123
查看集群信息
[root@minio-1 ~]# mc admin info minio
● minio-2:9000
Uptime: 40 seconds
Version: 2021-01-08T21:18:21Z
Network: 2/2 OK
Drives: 2/2 OK
● minio-1:9000
Uptime: 41 seconds
Version: 2021-01-08T21:18:21Z
Network: 2/2 OK
Drives: 2/2 OK
4 drives online, 0 drives offline
上传一些数据,用于验证扩容后数据可正常使用:
mc mb minio/bucket01
mc cp * minio/bucket01
执行集群扩容
将minio-3、minio-4节点扩容进现有集群。
首先停止并删除现有minio服务,minio-1和minio-2执行以下命令:
docker stop minio && docker rm minio
重新在4个节点执行以下命令:
docker run -d --name minio \
--restart=always \
--net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v /data/minio/data1:/data1 \
-v /data/minio/data2:/data2 \
minio/minio server \
http://minio-{1...2}/data{1...2} \
http://minio-{3...4}/data{1...2}
查看mino日志,可以看到Formatting 2nd zone,创建了2个zone:
[root@minio-1 ~]# docker logs -f minio
......
Waiting for a minimum of 2 disks to come online (elapsed 1s)
Formatting 2nd pool, 1 set(s), 4 drives per set.
Waiting for all MinIO sub-systems to be initialized.. lock acquired
Verifying if 1 bucket is consistent across drives...
All MinIO sub-systems initialized successfully
Status: 8 Online, 0 Offline.
Endpoint: http://192.168.93.40:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 http://127.0.0.1:9000
Browser Access:
http://192.168.93.40:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 http://127.0.0.1:9000
Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
查看集群信息,扩容成功
[root@minio-1 ~]# mc admin info minio
● minio-2:9000
Uptime: 36 seconds
Version: 2021-01-08T21:18:21Z
Network: 4/4 OK
Drives: 2/2 OK
● minio-3:9000
Uptime: 36 seconds
Version: 2021-01-08T21:18:21Z
Network: 4/4 OK
Drives: 2/2 OK
● minio-4:9000
Uptime: 36 seconds
Version: 2021-01-08T21:18:21Z
Network: 4/4 OK
Drives: 2/2 OK
● minio-1:9000
Uptime: 36 seconds
Version: 2021-01-08T21:18:21Z
Network: 4/4 OK
Drives: 2/2 OK
65 MiB Used, 1 Bucket, 6 Objects
8 drives online, 0 drives offline
查看之前上传的数据依然正常访问:
[root@minio-1 ~]# mc ls minio/bucket01
[2021-01-16 10:18:37 CST] 1.7KiB anaconda-ks.cfg
[2021-01-16 10:18:37 CST] 4.5MiB currentbuild.zip
[2021-01-16 10:18:37 CST] 2.6KiB docker-compose-secrets.yaml
[2021-01-16 10:18:37 CST] 60MiB minio-09.tar
[2021-01-16 10:18:40 CST] 330MiB minio.tar
[2021-01-16 10:18:38 CST] 1.7KiB minio:test
[2021-01-16 10:18:38 CST] 323B nohup.out
[2021-01-16 10:18:39 CST] 12MiB rclone-v1.53.3-linux-amd64.zip
原桶继续写入数据
mc cp * minio/bucket01
创建新桶并写入数据
mc mb minio/bucket02
mc cp * minio/bucket02
清理minio集群
docker stop minio && docker rm minio && rm -rf /data/minio/*