minio集群介绍
官方文档:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html
本方案采用在多节点多驱动器 (MNMD) 或“分布式”配置部署 MinIO。 MNMD 部署提供企业级性能、可用性和可扩展性,是所有生产工作负载的推荐拓扑。
MNMD 部署支持纠删码配置,该配置可以容忍部署中最多一半的节点或驱动器丢失,同时继续提供读取操作服务。
集群部署要求
- 官方推荐的最小配置是4台服务器,每台服务器4个盘,这样可以做到minio高可用。
- 建议使用单独的分区作为minio的数据存储目录,不能使用根分区的目录作为minio的数据存储目录,但可以每个节点仅一块独立磁盘创建4个常规目录。
- MinIO 不支持分布式部署的非连续主机名或 IP 地址。可以在每个节点上使用 /etc/hosts 来设置支持扩展表示法的简单 DNS 方案。
- 多节点系统必须保持时间和日期同步,以维持稳定的节点间操作和交互。
ubuntu部署minio集群
节点规划及磁盘规划如下,每个节点准备四块磁盘:
节点名称 | 节点IP | minio磁盘 | 挂载点 | 操作系统 |
---|---|---|---|---|
minio1.example.com | 192.168.72.51 | /dev/sdb /dev/sdc /dev/sdd /dev/sde | /var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4 | Ubuntu22.04 |
minio2.example.com | 192.168.72.52 | /dev/sdb /dev/sdc /dev/sdd /dev/sde | /var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4 | Ubuntu22.04 |
minio3.example.com | 192.168.72.53 | /dev/sdb /dev/sdc /dev/sdd /dev/sde | /var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4 | Ubuntu22.04 |
minio4.example.com | 192.168.72.54 | /dev/sdb /dev/sdc /dev/sdd /dev/sde | /var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4 | Ubuntu22.04 |
lb1.example.com | 192.168.72.55 | - | - | Ubuntu22.04 |
lb2.example.com | 192.168.72.56 | - | - | Ubuntu22.04 |
VIP | 192.168.72.100 | - | - | - |
说明:VIP地址解析到minio.example.com
域名,作为统一入口。
- minio API访问地址为:
http://minio.example.com
- minio console访问地址为:
http://minio.example.com/minio/ui
集群架构如下:
准备节点
所有minio节点分别配置主机名
hostnamectl set-hostname minio1.example.com
hostnamectl set-hostname minio2.example.com
hostnamectl set-hostname minio3.example.com
hostnamectl set-hostname minio4.example.com
所有minio节点分别配置hosts解析
cat >/etc/hosts<<EOF
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF
所有minio节点配置时间同步。
Minio 多节点系统必须保持时间和日期同步,以维持稳定的节点间操作和交互。
apt install -y chrony
systemctl enable --now chrony
timedatectl set-timezone Asia/Shanghai
准备磁盘
每个节点挂载4块磁盘,其中sda为系统盘:
root@minio1:~# lsblk -d -n -o NAME | grep '^sd'
sda
sdb
sdc
sdd
sde
在每个节点上,分别创建四个目录来挂载四个驱动器:
sudo mkdir -p /var/lib/minio/data1
sudo mkdir -p /var/lib/minio/data2
sudo mkdir -p /var/lib/minio/data3
sudo mkdir -p /var/lib/minio/data4
分别在每个节点上,将磁盘格式化为 XFS 文件系统:
sudo mkfs.xfs /dev/sdb -L DISK1
sudo mkfs.xfs /dev/sdc -L DISK2
sudo mkfs.xfs /dev/sdd -L DISK3
sudo mkfs.xfs /dev/sde -L DISK4
配置自动挂载
cat >>/etc/fstab<<EOF
LABEL=DISK1 /var/lib/minio/data1 xfs defaults,noatime 0 2
LABEL=DISK2 /var/lib/minio/data2 xfs defaults,noatime 0 2
LABEL=DISK3 /var/lib/minio/data3 xfs defaults,noatime 0 2
LABEL=DISK4 /var/lib/minio/data4 xfs defaults,noatime 0 2
EOF
挂载所有在 /etc/fstab
文件中已定义但尚未挂载的文件系统
sudo mount -av
确认文件系统挂载正常
root@minio1:~# df -hT
......
/dev/sdb xfs 100G 746M 100G 1% /var/lib/minio/data1
/dev/sdc xfs 100G 746M 100G 1% /var/lib/minio/data2
/dev/sdd xfs 100G 746M 100G 1% /var/lib/minio/data3
/dev/sde xfs 100G 746M 100G 1% /var/lib/minio/data4
安装minio
分别在每个节点上使用deb包安装 MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240704142545.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
使用 groupadd
和 useradd
命令创建用户和组
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /var/lib/minio
创建服务环境文件
在 /etc/default/minio
创建环境文件。 MinIO 服务使用此文件作为 MinIO 和 minio.service
文件使用的所有环境变量的源。
cat >/etc/default/minio<<EOF
MINIO_VOLUMES="http://minio{1...4}.example.com:9000/var/lib/minio/data{1...4}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio@123456
MINIO_BROWSER_REDIRECT_URL="http://minio.example.com/minio/ui"
EOF
在部署中的每个节点上发出以下命令以启动 MinIO 服务,需要多个节点依次同时执行
sudo systemctl restart minio.service
使用以下命令确认服务在线且正常运行:
sudo systemctl status minio.service
journalctl -f -u minio.service
打开MinIO控制台
打开浏览器并访问端口 :9001
处的任何 MinIO 主机名以打开 MinIO 控制台登录页面。例如
http://minio1.example.com:9001
使用上一步中的 minio_root_user
和 minio_root_password
登录。
可以使用 MinIO 控制台执行一般管理任务,例如身份和访问管理、指标和日志监控或服务器配置。每个 MinIO 服务器都包含其自己的嵌入式 MinIO 控制台。
配置负载均衡
官方文档:https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
使用nginx
和keepalived
实现负载均衡,准备2台服务器作为负载均衡节点。
分别在lb节点配置主机名
hostnamectl set-hostname lb1.example.com
hostnamectl set-hostname lb2.example.com
分别在lb节点配置hosts解析
cat >/etc/hosts<<EOF
192.168.72.55 lb1.example.com
192.168.72.56 lb2.example.com
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF
在2个节点安装nginx和keepalived:
apt install -y nginx keepalived
创建nginx配置文件,修改server地址并自定义listen端口,注意修改server_name
参数:
cat > /etc/nginx/conf.d/minio-lb.conf <<'EOF'
upstream minio_s3 {least_conn;server minio1.example.com:9000;server minio2.example.com:9000;server minio3.example.com:9000;server minio4.example.com:9000;
}upstream minio_console {least_conn;server minio1.example.com:9001;server minio2.example.com:9001;server minio3.example.com:9001;server minio4.example.com:9001;
}server {listen 80;listen [::]:80;server_name minio.example.com;# Allow special characters in headersignore_invalid_headers off;# Allow any size file to be uploaded.# Set to a value such as 1000m; to restrict file size to a specific valueclient_max_body_size 0;# Disable bufferingproxy_buffering off;proxy_request_buffering off;location / {proxy_set_header Host $http_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_connect_timeout 300;# Default is HTTP/1, keepalive is only enabled in HTTP/1.1proxy_http_version 1.1;proxy_set_header Connection "";chunked_transfer_encoding off;proxy_pass https://minio_s3; # This uses the upstream directive definition to load balance}location /minio/ui/ {rewrite ^/minio/ui/(.*) /$1 break;proxy_set_header Host $http_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_set_header X-NginX-Proxy true;# This is necessary to pass the correct IP to be hashedreal_ip_header X-Real-IP;proxy_connect_timeout 300;# To support websockets in MinIO versions released after January 2023proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)# Uncomment the following line to set the Origin request to an empty string# proxy_set_header Origin '';chunked_transfer_encoding off;proxy_pass https://minio_console; # This uses the upstream directive definition to load balance}
}
EOF
启动nginx服务
systemctl restart nginx
创建keepalived配置文件,根据实际环境修改interface
及virtual_ipaddress
参数,2个节点配置相同:
cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalivedglobal_defs {router_id miniovrrp_version 2vrrp_garp_master_delay 1script_user rootenable_script_security
}vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx"timeout 3interval 3 # check every 1 secondfall 2 # require 2 failures for KOrise 2 # require 2 successes for OK
}vrrp_instance lb-minio {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.72.100}track_script {chk_nginx}
}
EOF
启动keepalvied服务
systemctl restart keepalived
查看生成的VIP地址
root@lb1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:9a:92:75 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.72.55/24 brd 192.168.72.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.72.100/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::250:56ff:fe9a:9275/64 scope link valid_lft forever preferred_lft forever
测试连接
在需要访问minio的机器上,配置hosts解析
echo "192.168.72.100 minio.example.com" >>/etc/hosts
浏览器访问minio console
http://minio.example.com/minio/ui/
查看Metrics信息:
任意机器安装minio客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/
配置minio客户端
mc alias set myminio http://minio.example.com minioadmin Minio@123456
通过API接口,查看集群状态
root@ubuntu:~# mc admin info myminio
● minio1.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1● minio2.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1● minio3.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1● minio4.example.com:9000Uptime: 25 minutes Version: 2024-07-04T14:25:45ZNetwork: 4/4 OK Drives: 4/4 OK Pool: 1Pools:1st, Erasure sets: 1, Drives per erasure set: 1616 drives online, 0 drives offline
root@ubuntu:~#
参考:https://elma365.com/en/help/minio-cluster.html