Minio集群部署
本文最后更新于 2024-05-22,文章内容可能已经过时。
Minio集群部署
一,分布式Minio概述
1.1概念
分布式minio可以在多个服务器节点上,多块硬盘上共享存储空间,提供对象存储服务。分布式minio由于多节点,避免了单点故障,保证文件存储的高可用。
1.2搭建流程简述
搭建分布式minio,主流程就是各个节点都要写一个相同的启动脚本,做一些配置,比如用户名,密码和文件存储的位置。然后依次去各个节点启动minio服务,启动的时候就会按照这个脚本的配置搭建分布式minio服务。
注意:
- 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,即:用户名和密码
- 分布式Minio存放数据的磁盘目录必须是空目录
- 分布式Minio官方建议生产环境最少4个节点,因为有N个节点,得至少保证有N/2的节点才能可读,保证至少N/2+1的节点才能可写。这里只是作演示搭建,只有2个节点
- 分布式Minio节点时间差不能差距太多,最好同一内网
- 分布式Minio会在每个磁盘都存一份数据文件保证数据的可靠性与安全性
二,环境准备
2.1节点环境
准备虚拟机:3台centos7(配置好网络,保证3台虚拟机互通)
虚拟器安装和网络配置
192.168.10.101
192.168.10.102
192.168.10.103
准备搭建minio相关文件
minio:minio服务器文件。下载地址:minio
mc:mc客户端文件。这个用于执行minio命令行,搭建时候可不用。下载地址:mc
run.sh:minion分布式搭建启动脚本。手动创建,里面配置内容稍后介绍
2.2节点磁盘挂载
所有节点
2.2.1硬盘分区
fdisk /dev/sdb
输入n 创建新的分区
输入p回车
默认分区输入1,回车,指定存储空间大小+10240M
输入W回车保存
分区/dev/sdb2与上述/dev/sdb1分区相同
[root@minio1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part
└─sdb2 8:18 0 10G 0 part
sr0 11:0 1 4.4G 0 rom
2.2.2 格式化磁盘分区
[root@minio1 ~]# mkfs -t ext4 /dev/sdb1
[root@minio1 ~]# mkfs -t ext4 /dev/sdb2
[root@minio2 ~]# mkfs -t ext4 /dev/sdb1
[root@minio2 ~]# mkfs -t ext4 /dev/sdb2
[root@minio3 ~]# mkfs -t ext4 /dev/sdb1
[root@minio3 ~]# mkfs -t ext4 /dev/sdb2
2.2.3磁盘目录挂载
mkdir /data{1,2}
[root@minio1 ~]# mount /dev/sdb2 /data1
[root@minio1 ~]# mount /dev/sdb1 /data2
[root@minio2 ~]# mount /dev/sdb2 /data1
[root@minio2 ~]# mount /dev/sdb1 /data2
[root@minio3 ~]# mount /dev/sdb2 /data1
[root@minio3 ~]# mount /dev/sdb1 /data2
查看挂载成功df –h
[root@minio1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.7G 16G 10% /
/dev/sda1 1014M 169M 846M 17% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 9.8G 37M 9.2G 1% /data1
/dev/sdb2 9.8G 37M 9.2G 1% /data2
设置分区在系统重启后自动挂载
在/etc/fstab文件末尾添加
/dev/sdb1 /data1/ ext4 defaults 0 0
/dev/sdb2 /data2/ ext4 defaults 0 0
重新加载配置
mount -a
三,集群部署
3.1 minion目录创建
mkdir -p /data/minio
3.2 minio安装包下载
下载或者上传下载好的minio二进制文件
官网下载地址:
https://dl.min.io/server/minio/release/linux-amd64/minio
本文采用wget命令安装
下载minio到/data/minio目录下
cd /data/minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
3.3 集群启动文件配置
Minio默认9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
注意 :
- MINIO_ROOT_USER:用户名,长度最小是5个字符
- MINIO_ROOT_PASSWORD:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
- –config-dir:指定集群配置文件目录
创建minio集群启动文件
vim /data/minio/run.sh
集群节点192.168.10.101内容为
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=adminbfd123
/data/minio/minio server --config-dir /etc/minio \
--address "0.0.0.0:9029" --console-address ":9000" \
http://192.168.10.101/data1 http://192.168.10.101/data2 \
http://192.168.10.102/data1 http://192.168.10.102/data2 \
http://192.168.10.103/data1 http://192.168.10.103/data2 \
集群节点192.168.10.102内容为
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=adminbfd123
/data/minio/minio server --config-dir /etc/minio \
--address "0.0.0.0:9029" --console-address ":9000" \
http://192.168.10.101/data1 http://192.168.10.101/data2 \
http://192.168.10.102/data1 http://192.168.10.102/data2 \
http://192.168.10.103/data1 http://192.168.10.103/data2 \
集群节点192.168.10.103内容为
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=adminbfd123
/data/minio/minio server --config-dir /etc/minio \
--address "0.0.0.0:9029" --console-address ":9000" \
http://192.168.10.101/data1 http://192.168.10.101/data2 \
http://192.168.10.102/data1 http://192.168.10.102/data2 \
http://192.168.10.103/data1 http://192.168.10.103/data2 \
3.4 创建Minio.server
vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=MinIO High Performance Object Storage — MinIO Object Storage for Kubernetes
[Service]
WorkingDirectory=/data/minio
ExecStart=/data/minio/run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
修改配置文件后需要重加载配置
systemctl daemon-reload
3.5 权限修改
所有节点执行以下命令
chmod +x /usr/lib/systemd/system/minio.service
chmod +x /data/minio/minio
chmod +x /data/minio/run.sh
3.6 启动集群
逐个节点启动
注意:启动集群时一定要检查自己的防火墙是否是关闭状态,如果不是关闭状态,则会出错
systemctl start minio
systemctl enable minio
查看集群状态
systemctl status minio.service
[root@minio1 minio]# systemctl status minio.service
● minio.service - Minio service
Loaded: loaded (/usr/lib/systemd/system/minio.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2024-03-21 20:28:16 CST; 52s ago
Main PID: 11613 (run.sh)
CGroup: /system.slice/minio.service
├─11613 /bin/bash /data/minio/run.sh
└─11614 /data/minio/minio server --config-dir /etc/minio --address 0.0.0.0:9029 --console-address...
Mar 21 20:28:55 minio1 run.sh[11613]: Copyright: 2015-2024 MinIO, Inc.
Mar 21 20:28:55 minio1 run.sh[11613]: License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Mar 21 20:28:55 minio1 run.sh[11613]: Version: RELEASE.2024-03-15T01-07-19Z (go1.21.8 linux/amd64)
Mar 21 20:28:55 minio1 run.sh[11613]: API: http://0.0.0.0:9029
Mar 21 20:28:55 minio1 run.sh[11613]: WebUI: http://192.168.10.101:9000 http://127.0.0.1:9000
Mar 21 20:28:55 minio1 run.sh[11613]: Docs: https://min.io/docs/minio/linux/index.html
Mar 21 20:28:55 minio1 run.sh[11613]: Use `mc admin info` to look for latest server/drive info
Mar 21 20:28:55 minio1 run.sh[11613]: Status: 2 Online, 4 Offline.
Mar 21 20:28:55 minio1 run.sh[11613]: STARTUP WARNINGS:
Mar 21 20:28:55 minio1 run.sh[11613]: - Detected Linux kernel version older than 4.0.0 release, there a...mance
Hint: Some lines were ellipsized, use -l to show in full.
查看启动日志
journalctl -u minio.service –f
[root@minio1 minio]# journalctl -u minio.service –f
Failed to add match '–f': Invalid argument
Failed to add filters: Invalid argument
[root@minio1 minio]# journalctl -u minio.service -f
-- Logs begin at Thu 2024-03-21 19:57:13 CST. --
Mar 21 20:28:55 minio1 run.sh[11613]: Copyright: 2015-2024 MinIO, Inc.
Mar 21 20:28:55 minio1 run.sh[11613]: License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Mar 21 20:28:55 minio1 run.sh[11613]: Version: RELEASE.2024-03-15T01-07-19Z (go1.21.8 linux/amd64)
Mar 21 20:28:55 minio1 run.sh[11613]: API: http://0.0.0.0:9029
Mar 21 20:28:55 minio1 run.sh[11613]: WebUI: http://192.168.10.101:9000 http://127.0.0.1:9000
Mar 21 20:28:55 minio1 run.sh[11613]: Docs: https://min.io/docs/minio/linux/index.html
Mar 21 20:28:55 minio1 run.sh[11613]: Use `mc admin info` to look for latest server/drive info
Mar 21 20:28:55 minio1 run.sh[11613]: Status: 2 Online, 4 Offline.
Mar 21 20:28:55 minio1 run.sh[11613]: STARTUP WARNINGS:
Mar 21 20:28:55 minio1 run.sh[11613]: - Detected Linux kernel version older than 4.0.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x.x linux kernel version for best performance
3.7 登录
http://任一IP:9000/
四,minio节点故障恢复数据
minio集群有纠删码机制,即使在集群数据盘挂掉一半的情况下,你集群中数据也是安全的。但是如果集群想要正常读写你需要有N/2+1的节点数才可以正常读写如果现有minio集群由于节点损坏或节点物理故障需更换节点时,请直接进行更换节点。
注意事项:
- 如果更换节点旧节点数据量较大,在节点更换时可以正常使用请先备份原有节点数据到新节点,避免同步的数据过多导致网络带宽被占用
- 如果数据量小,可以不进行备份数据,直接进行更换,节点启动完毕会自动同步数据
- 如果节点挂掉时集群还在读写数据,会导致集群挂掉的节点与其他minio节点数据不同,这里在恢复节点后需修复数据(自动修复,无需人为干预)
最好部署minio集群时使用hosts文件做地址解析,避免更换节点时修改minio配置文件参数
- 感谢你赐予我前进的力量