minio集群部署


minio集群部署

一、Minio分布式部署的優勢

1.1 數據保護

  • 分布式 Minio 采用糾刪碼來防范多個節點宕機和位衰減。
  • 分布式 Minio 至少需要 4 個節點(4台服務器),使用分布式 Minio 就 自動引入了糾刪碼功能。
  • 糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio 采用 Reed-Solomon code 將對象拆分成 N/2 數據和 N/2 奇偶校驗塊。 這就意味着如果是 12 塊盤,一個對象會被分成 6 個數據塊、6 個奇偶校驗塊,你可以丟失任意 6 塊盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的盤中的數據進行恢復。
  • 糾刪碼的工作原理和 RAID 或者復制不同,像 RAID6 可以在損失兩塊盤的情況下不丟數據,而 Minio 糾刪碼可以在丟失一半的盤的情況下,仍可以保證數據安全。 而且 Minio 糾刪碼是作用在對象級別,可以一次恢復一個對象,而RAID 是作用在卷級別,數據恢復時間很長。 Minio 對每個對象單獨編碼,存儲服務一經部署,通常情況下是不需要更換硬盤或者修復。Minio 糾刪碼的設計目標是為了性能和盡可能的使用硬件加速。
  • 位衰減又被稱為數據腐化 Data Rot、無聲數據損壞 Silent Data Corruption ,是目前硬盤數據的一種嚴重數據丟失問題。硬盤上的數據可能會神不知鬼不覺就損壞了,也沒有什么錯誤日志。正所謂明槍易躲,暗箭難防,這種背地里犯的錯比硬盤直接故障還危險。 所以 Minio 糾刪碼采用了高速 HighwayHash 基於哈希的校驗和來防范位衰減。

1.2 高可用

  • 單機 Minio 服務存在單點故障,相反,如果是一個 N 節點的分布式 Minio ,只要有 N/2 節點在線,你的數據就是安全的。不過你需要至少有 N/2+1 個節點來創建新的對象。
  • 例如,一個 8 節點的 Minio 集群,每個節點一塊盤,就算 4 個節點宕機,這個集群仍然是可讀的,不過你需要 5 個節點才能寫數據。

1.3 限制

  • 分布式 Minio 單租戶存在最少 4 個盤最多 16 個盤的限制(受限於糾刪碼)。這種限制確保了 Minio 的簡潔,同時仍擁有伸縮性。如果你需要搭建一個多租戶環境,你可以輕松的使用編排工具(Kubernetes)來管理多個Minio實例。
  • 注意,只要遵守分布式 Minio 的限制,你可以組合不同的節點和每個節點幾塊盤。比如,你可以使用 2 個節點,每個節點 4 塊盤,也可以使用 4 個節點,每個節點兩塊盤,諸如此類。

1.4 一致性

  • Minio 在分布式和單機模式下,所有讀寫操作都嚴格遵守 read-after-write 一致性模型。

二、Minio分布式集群搭建

2.1 環境准備

  • data1 data2 生產環境得掛2塊不同的磁盤

2.2、安裝包下載

[root@minio1 ~]#  wget http://dl.minio.org.cn/server/minio/release/darwin-amd64/minio
[root@minio1 ~]#  chmod +x minio

2.3、對應目錄創建

  • run:啟動腳本及二進制文件目錄;
  • data:數據存儲目錄;
  • conf:配置文件目錄;
[root@minio1 ~]# mkdir /app/minio/{data1,run,conf} -p
[root@minio1 ~]# mv minio /app/minio/run/

2.4、集群啟動文件

  • MINIO_ACCESS_KEY:用戶名,長度最小是5個字符;
  • MINIO_SECRET_KEY:密碼,密碼不能設置過於簡單,不然minio會啟動失敗,長度最小是8個字符;
  • –config-dir:指定集群配置文件目錄;
  • --console-address: 指定web端口(新版本需要指定,老版本應該是9000)
# 虛擬機搭建,此處我就整了一塊盤
[root@minio1 ~]# vim /app/minio/run/run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin2021

/app/minio/run/minio server --console-address ":50000" --config-dir /app/minio/conf \
http://192.168.1.106/app/minio/data
http://192.168.1.107/app/minio/data
http://192.168.1.108/app/minio/data
http://192.168.1.109/app/minio/data

[root@minio1 run]# chmod +x run.sh 
# 生產可以4台機器8塊盤,或者8台機器8塊盤,成4的倍數
[root@minio1 ~]# vim /app/minio/run/run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin2021

/app/minio/run/minio server --console-address ":50000" --config-dir /app/minio/conf \
http://192.168.1.106/app1/minio/data1 http://192.168.1.106/app2/minio/data2 \
http://192.168.1.107/app1/minio/data1 http://192.168.1.107/app2/minio/data2 \
http://192.168.1.108/app1/minio/data1 http://192.168.1.108/app2/minio/data2 \
http://192.168.1.109/app1/minio/data1 http://192.168.1.109/app2/minio/data2 \

[root@minio1 run]# chmod +x run.sh 

2.5、 配置為系統服務

[root@minio1 ~]# vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/app/minio/run/
ExecStart=/app/minio/run/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

注意:

  • 將minio二進制文件上傳到/data/minio/run目錄!

2.6、 啟動集群

systemctl daemon-reload && systemctl enable minio && systemctl start minio

2.7、集群狀態查看

[root@minio1 run]# systemctl status minio
● minio.service - Minio service
   Loaded: loaded (/usr/lib/systemd/system/minio.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2021-10-17 23:15:00 CST; 21min ago
     Docs: https://docs.minio.io/
 Main PID: 9738 (run.sh)
   CGroup: /system.slice/minio.service
           ├─9738 /bin/bash /app/minio/run/run.sh
           └─9739 /app/minio/run/minio server --console-address :50000 --config-dir /app/minio/conf http://192.168.1.106/app/minio/data http://192.168.1.107/app/minio/data http://192.16...

Oct 17 23:15:28 minio1 run.sh[9738]: Waiting for all MinIO sub-systems to be initialized.. lock acquired
Oct 17 23:15:28 minio1 run.sh[9738]: Waiting for all MinIO sub-systems to be initialized.. possible cause (Unable to initialize config system: Unable to load config file. S.../config.json)
Oct 17 23:15:30 minio1 run.sh[9738]: Waiting for all MinIO sub-systems to be initialized.. lock acquired
Oct 17 23:15:30 minio1 run.sh[9738]: Automatically configured API requests per node based on available memory on the system: 54
Oct 17 23:15:30 minio1 run.sh[9738]: All MinIO sub-systems initialized successfully
Oct 17 23:15:30 minio1 run.sh[9738]: Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
Oct 17 23:15:30 minio1 run.sh[9738]: Status:         4 Online, 0 Offline.
Oct 17 23:15:30 minio1 run.sh[9738]: API: http://192.168.1.106:9000  http://127.0.0.1:9000
Oct 17 23:15:30 minio1 run.sh[9738]: Console: http://192.168.1.106:50000 http://127.0.0.1:50000
Oct 17 23:15:30 minio1 run.sh[9738]: Documentation: https://docs.min.io

2.8、集群訪問

  • 因為當前是集群模式,所以訪問任意節點都是一樣的,所以,需要nginx代理集群
upstream minio.tzh{
        server 192.168.1.106:50000 weight=1;
        server 192.168.1.107:50000 weight=1;
        server 192.168.1.108:50000 weight=1;
        server 192.168.1.109:50000 weight=1;
    }
    server {
        listen 80;
        server_name minio.tzh;
        location / {
                proxy_pass http://minio.tzh;
                proxy_set_header Host $http_host;
                client_max_body_size 1000m;
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM