目录
MinIO Cluster On Linux
通过MinIO在Linux上的安装与部署-CSDN博客我们可以得到一个单节点的MinIO服务,我们基于已有的服务,通过复制虚拟机的方式快速扩展为 MinIO 集群。以下是详细步骤:
1. 准备虚拟机节点
首先准备一台刚刚下载好minio安装包还未进行任何操作的的虚拟机进行克隆(操作详情请参考:Linux多节点网络配置_linux ifcfg-ens33 uuid-CSDN博客)
这里统一规划好主机名和配置文件
节点名称 |
IP地址 |
操作系统 |
数据目录 |
备注 |
Node201 |
192.168.33.201 |
CentOS_7_2009 |
/mnt/data |
初始机 |
Node202 |
192.168.33.202 |
CentOS_7_2009 |
/mnt/data |
高可用节点 |
Node203 |
192.168.33.203 |
CentOS_7_2009 |
/mnt/data |
高可用节点 |
Node204 |
192.168.33.204 |
CentOS_7_2009 |
/mnt/data |
高可用节点 |
Node205 |
192.168.33.205 |
CentOS_7_2009 |
-- |
Nginx集群转发点 |
Nginx代理MinIO集群参考:Nginx代理MinIO集群-CSDN博客
在初始机上统一编辑下列文件
编辑 /etc/hosts
文件,添加所有节点的 IP 和主机名映射
vim /etc/hosts # 添加各个节点和主机名的映射 192.168.33.201 Node201 192.168.33.202 Node202 192.168.33.203 Node203 192.168.33.204 Node204
编辑 /etc/default/minio
文件,更新 MINIO_VOLUMES
配置,指定所有节点的存储路径:
vim /etc/default/minio # 更新MINIO_VOLUMES 配置 MINIO_ROOT_USER="minioadmin" MINIO_ROOT_PASSWORD="minioadmin" MINIO_VOLUMES="http://node201/mnt/data http://node202/mnt/data http://node203/mnt/data http://node204/mnt/data" MINIO_OPTS="--address :9000 --console-address :9001"
为每台虚拟机设置唯一的主机名
hostnamectl set-hostname Node201 # 在 Node201 上执行 hostnamectl set-hostname Node202 # 在 Node202 上执行 hostnamectl set-hostname Node203 # 在 Node203 上执行 hostnamectl set-hostname Node204 # 在 Node204 上执行
2. 挂载数据目录到独立磁盘
MinIO 集群节点必须挂载到独立磁盘中,MinIO的纠删码模式要求每个节点的数据目录必须挂载到 独立的物理磁盘(或独立的虚拟磁盘卷),原因如下:
- 数据冗余:纠删码依赖跨节点和跨驱动器的数据分布,确保数据高可用性。
- 避免单点故障:若多个目录挂载到同一磁盘,磁盘故障会导致所有数据丢失,违背冗余设计。
- 性能优化:独立磁盘提供更高 I/O 吞吐量。
这里在准备好的虚拟机节点上一个一个操作,不能统一操作之后直接克隆,这样不符合MinIO的纠删码模式,从而导致启动不成功。
2.1. 添加新磁盘
如下图,根据提示可以添加一块新的磁盘
编辑
2.2. 检查系统中已识别的磁盘
lsblk
/dev/sda
系统磁盘及其子分区属于系统根分区
/dev/sdb
属于新添加的磁盘
编辑
2.3. 检查MinIO数据目录所在分区
检查MinIO数据目录/mnt/data
的所在的分区
df -h /mnt/data
可以看到当前目录是属于系统根分区的
编辑
2.4. 格式化新磁盘
创建分区
fdisk /dev/sdb
在fdisk交互界面,输入以下命令:
n
:创建新分区。p
:选择主分区。1
:分区编号为 1。- 按
Enter
:使用默认的起始扇区。 - 按
Enter
:使用默认的结束扇区。 w
:保存并退出。
完成磁盘分区
编辑
格式化分区为ext4系统
mkfs.ext4 /dev/sdb1
编辑
ext4 是 Linux 系统中广泛使用的一种文件系统,它具备高可靠性、高性能以及支持大文件和大分区等优点。
2.5. 挂载数据目录到新磁盘
挂载/mnt/data到新分区,查看挂载情况
#如果还未创建数据目录首先创建 mkdir /mnt/data mount /dev/sdb1 /mnt/data df -h /mnt/data
可以看到/mnt/data已经挂载到新分区
编辑
2.6. 修改数据目录的所有者/组/权限
默认情况下,挂载瞬间:当磁盘(如 /dev/sdb1
)挂载到目录(如 /mnt/data
)时,该目录的权限会立即被覆盖,变为磁盘文件系统根目录的权限(默认通常是 root:root
)
需要我们手动修改磁盘文件系统本身的权限,确保/mnt/data
的权限是minio-user:minio-user 755
,这样改动后我们的数据目录的权限就时持久的了。
# 查看挂载后的目录权限和所有者 ls -ld /mnt/data mkdir -p /mnt/data groupadd -r minio-user useradd -M -r -g minio-user minio-user chown -R minio-user:minio-user /mnt/data chmod -R 755 /mnt/data # 查看设置权限后的目录权限和所有者 ls -ld /mnt/data
编辑
2.7. 自动挂载数据目录
获取新分区/dev/sdb1的UUID
blkid /dev/sdb1
编辑
编辑/etc/fstab文件,在其末尾添加以下内容:
vim /etc/fstab #将挂载目录所有者设为minio-user用户,将组设为minio-user组,权限为775文件为664 UUID=your-disk-uuid /mnt/data ext4 defaults 0 0
2.8. 检查数据目录是否已挂载
df -h /mnt/data #如果未挂载在新分区,那么手动挂载一下 mount /dev/sdb1 /mnt/data
编辑
3. 启动前的检查
3.1. 检查各节点之间的网络连通性
检查/etc/hosts文件,是否包含了所有节点的IP和主机名映射,相互ping通
cat /etc/hosts #在各节点上相互ping测试连通性 ping node201 ping node202 ping node203 ping node204
编辑
3.2. 检查MinIO的配置文件
cat /etc/default/minio
编辑
3.3. 修改MinIO服务配置
参照下方官方的服务配置模版修改,最简单暴力的方式是直接删除文件再重新创建
rm /usr/lib/systemd/system/minio.service vim /usr/lib/systemd/system/minio.service
[Unit] Description=MinIO Documentation=https://minio.org.cn/docs/minio/linux/index.html Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local User=minio-user Group=minio-user ProtectProc=invisible EnvironmentFile=-/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=) # This may improve systemctl setups where other services use `After=minio.server` # Uncomment the line to enable the functionality # Type=notify # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name})
3.4. 重新加载服务配置
检查完毕之后,在每个节点上重新加载配置,确保所有的配置生效
systemctl daemon-reload
3.5. 检查防火墙是否关闭
如果出现下方无法访问节点之间的9000端口问题,那么就是防火墙阻挡了节点之间的端口访问,需要手动关闭
systemctl stop firewalld systemctl disable firewalld
编辑
4. 启动 MinIO 集群
在每台虚拟机上重新启动 MinIO 服务:
systemctl stop minio systemctl start minio systemctl enable minio #查看详细日志 journalctl -u minio -b
5. 验证集群状态
访问 MinIO Web 控制台:
- 打开浏览器,访问
http://<任意节点IP>:9000
。 - 使用
minioadmin
和minioadmin
登录。
检查集群健康状态:
- 进入
Monitoring
,检查集群健康状态。
编辑
使用 MinIO 客户端(mc
)验证集群:
- 安装
mc
:
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/
- 配置集群别名:
mc alias set minio2 http://192.168.132.129:9000 minioadmin minioadmin
编辑
- 查看集群信息:
mc admin info minio2
编辑
6. 验证高可用性
这里将会使用mc
测试MinIO集群的高可用性
- 安装
mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/ #验证是否安装成功 mc --version
编辑
- 为某个节点配置别名(方便管理多个集群,并显著提高安全性,不用每次都将用户名、密码、访问地址写在命令行中)
mc alias set minio1 http://192.168.132.128:9000 minioadmin minioadmin mc alias set minio2 http://192.168.132.129:9000 minioadmin minioadmin mc alias set minio3 http://192.168.132.130:9000 minioadmin minioadmin
- 验证别名配置情况
mc admin info minio3
编辑
- 创建Bucket并上传文件
创建一个Bucket
mc mb minio1/test-bucket
上传一个文件到test-bucket
echo "This is a test file111." > test-file111.txt mc cp test-file111.txt minio1/test-bucket/
编辑
列出test-bucket中的文件
mc ls minio1/test-bucket
编辑
- 模拟节点故障
关闭某一节点(例如:minio2)
[root@minio2 ~]# sudo systemctl stop minio
检测MinIO集群状态,并访问MinIO集群
mc admin info minio3 mc ls minio1/test-bucket
编辑
- 验证数据一致性
恢复节点
[root@minio2 ~]# sudo systemctl start minio
下载之前上传的文件,验证内容是否正确
mc admin info minio3 mc cp minio1/test-bucket/test-file222.txt ./downloaded-file222.txt cat downloaded-file222.txt
编辑
- 总结
通过以上步骤,已经成功测试了 MinIO 集群的高可用性。以下是一些关键点:
- 高可用性:即使某个节点故障,MinIO 仍然可以通过其他节点提供服务。
- 数据一致性:MinIO 会自动同步数据,确保所有节点上的数据一致。
- 读写操作:在集群正常运行的情况下,可以正常上传、下载和列出文件。
7. 其他配置
7.1. 防火墙配置
如果启用了防火墙,开放 MinIO 的端口(默认 9000):
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent sudo firewall-cmd --reload
7.2. 监控和日志
- 查看 MinIO 日志:
sudo journalctl -u minio.service -f
8. 总结
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考 MinIO 官方文档。
作者联系方式vx:2743642415