本文最后更新于 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/

image7-1-uiel.png

四,minio节点故障恢复数据

minio集群有纠删码机制,即使在集群数据盘挂掉一半的情况下,你集群中数据也是安全的。但是如果集群想要正常读写你需要有N/2+1的节点数才可以正常读写如果现有minio集群由于节点损坏或节点物理故障需更换节点时,请直接进行更换节点。

注意事项:

  • 如果更换节点旧节点数据量较大,在节点更换时可以正常使用请先备份原有节点数据到新节点,避免同步的数据过多导致网络带宽被占用
  • 如果数据量小,可以不进行备份数据,直接进行更换,节点启动完毕会自动同步数据
  • 如果节点挂掉时集群还在读写数据,会导致集群挂掉的节点与其他minio节点数据不同,这里在恢复节点后需修复数据(自动修复,无需人为干预)

最好部署minio集群时使用hosts文件做地址解析,避免更换节点时修改minio配置文件参数