Minio的扩容
Minio是一款分布式对象存储软件,这篇文章介绍如何对minio进行扩容。
扩容前有几点要注意:
- Minio的扩容需要创建新的服务器池(Server Pool),不要在现有的池中增加硬盘(环境变量MINIO_VOLUMES的值中,空格隔开的就是minio的一个个池)
- 配置时间同步,可以在每台服务器安装ntpd
- 扩容前备份原集群桶和IAM配置,使用命令“mc admin cluster bucket export ALIAS”和“mc admin cluster iam export ALIAS”
- 新的主机名最好包含序号,如minio2.example.cn。硬盘的挂载点也包含序号,如/mnt/disk1,/mnt/disk2等
- 硬盘的类型保持相同,如果选择SSD就都用SSD,不建议机械盘和SSD混用。大小也相同
- 扩容操作需要同时(尽量最小时间间隔)重启集群中的全部minio服务,不是一个起来再启动另一个。
- 实验环境
扩容增加一台服务器,安装四块数据盘作为minio的后端存储。
原服务器域名,minio1.example.cn,硬盘挂载点/mnt/disk{1...4}
新服务器域名,minio2.example.cn,硬盘挂载点/mnt/disk{1...4}
- 节点配置
新服务器minio2.example.cn的安装参照Minio的安装和数据高可用原理,安装完成后不要启动,修改环境变量文件/etc/default/minio,
#两个server pool,每个节点四块硬盘组成一个server pool
MINIO_VOLUMES="http://minio1.example.cn:9000/mnt/disk{1...4}/minio http://minio2.example.cn:9000/mnt/disk{1...4}/minio"
#Web UI的地址
MINIO_OPTS="--console-address :9001"
#超管的用户名
MINIO_ROOT_USER=minioadmin
#超管的密码
MINIO_ROOT_PASSWORD=minioadminWo3
#客户端访问minio的API地址,由Nginx做负载均衡,不是WebUI的地址
MINIO_SERVER_URL="http://minio.example.cn"
原服务器minio1.example.cn的环境变量文件/etc/default/minio也需要修改,和上面保持一致。
- 负载均衡配置
为了保证客户端访问minio的稳定性,使用Nginx作为前端负载均衡,Nginx的配置文件如下,
upstream minio_upstream {least_conn;server minio1.example.cn:9000;server minio2.example.cn:9000;}server {listen 80;server_name minio.example.cn;location / {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_pass http://minio_upstream;}
}
- 扩容
配置完成后,启动Nginx和两个minio实例。启动后发现集群报下面异常,

在minio2服务器上发现是因为minio对硬盘没有写入权限导致,

使用下面命令修改文件系统所有者为minio-user
chown -R minio-user:minio-user /mnt
再次重启minio,状态恢复,查看状态如下,

- 对象均衡
加入新的服务池(server pool)后,集群容器翻倍,但是原有的数据不会自动从Pool 1移动到Pool 2,可以看到Pool 2的空间并没有使用,

可以手动平衡(不是必需的,新的数据会写入Pool 2),
#手动执行数据平衡
mc admin rebalance start ALIAS
#查看平衡的状态
mc admin rebalance status ALIAS
平衡完成后,看到两个池的容器基本一致。

个人感觉这里显示有问题,百分比应该分别是31%和27%才对。看两台服务器文件系统的占用,


- 总结
本文对minio的扩容做了简单介绍,生产环境需要规划好服务器的数量和每台服务器上硬盘的数量,每个池要留够硬盘用于存放校验数据(parity),防止设计不合理降低高可用性。