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