︿
Top

MinIO 教學 (一) 安裝部署

 



建置部署要點

  1. 強烈建議為新 Server Pool 的所有節點選擇基本上相似的硬體配置。確保硬體(CPU、記憶體、主機板、儲存適配器)和軟體(作業系統、核心設定、系統服務)在池中的所有節點上保持一致
  2. 如果一個伺服器池發生故障,MinIO 會停止所有池的 I/O,直到叢集恢復正常運作
  3. 如果是一個有 N 塊硬碟的分布式 Minio,只要有 N/2 硬碟在線,你的數據就是安全的,不過你需要至少有 N/2+1 個硬碟來創建新的對象
  4. MinIO 建議生產叢集一個Server Pool中至少包含4個 MinIO 伺服器節點,以確保適當的高可用性和持久性
  5. MinIO 建議直連的 JBOD 陣列,xfs 格式的磁碟以獲得最佳效能
  6. MinIO 建議使用 /etc/fstab 或類似的基於檔案的永久掛載配置



原理概要


MinIO 是一套相容於 AWS S3 API 的高性能分布式對象(Objects)存儲系統,可透過多台主機、多個硬碟(Drive)搭建起高可用性的存儲池,是目前替代 AWS S3 最佳的 Open Source 對象存儲本地解決方案。

MinIO 在數據保護部分採用了糾刪碼(Erasure Code)的方式,將一個存儲對象分散存放於叢集裡的數個 Drive 中(上圖橘色磁碟部分,這樣稱為一個 Set),如此一來只要叢集中有 N/2 的硬碟還在線,則數據可讀,只要 (N/2)+1 的硬碟還在線,則數據可讀可寫,比如上圖中共有4台 MinIO 伺服器、每台伺服器分別掛載了4顆硬碟,就算有2台伺服器突然斷電失聯,這個 MinIO 叢集的資料仍可讀,不過需要3台伺服器在線才能讀寫數據。



測試環境說明

測試關係故僅安裝3台機器作為示範,正式環境建議至少4台機器




安裝前準備

已知每台機器分配4顆100GB硬碟、作業系統為 Almalinux 9.4,分別於三台機器上製作磁碟格式化、掛載腳本 init.sh 並分別執行,以下將建立 minio 主要工作目錄、格式化與掛載磁碟
#!/bin/bash
# init.sh for minio installation

ROOT_FOLDER="/opt/minio"

mkdir -p ${ROOT_FOLDER}
mkdir -p ${ROOT_FOLDER}/data
mkdir -p ${ROOT_FOLDER}/data/export1
mkdir -p ${ROOT_FOLDER}/data/export2
mkdir -p ${ROOT_FOLDER}/data/export3
mkdir -p ${ROOT_FOLDER}/data/export4

# format
mkfs.xfs /dev/vdb -L DRIVE1
mkfs.xfs /dev/vdc -L DRIVE2
mkfs.xfs /dev/vdd -L DRIVE3
mkfs.xfs /dev/vde -L DRIVE4

# mount
mount /dev/vdb ${ROOT_FOLDER}/data/export1
mount /dev/vdc ${ROOT_FOLDER}/data/export2
mount /dev/vdd ${ROOT_FOLDER}/data/export3
mount /dev/vde ${ROOT_FOLDER}/data/export4


將掛載內容寫入每一台機器的 /etc/fstab

LABEL=DRIVE1 /opt/minio/data/export1 xfs defaults,noatime 0 2
LABEL=DRIVE2 /opt/minio/data/export2 xfs defaults,noatime 0 2
LABEL=DRIVE3 /opt/minio/data/export3 xfs defaults,noatime 0 2
LABEL=DRIVE4 /opt/minio/data/export4 xfs defaults,noatime 0 2


確保每一台機器有對齊時間(Almalinux9已內建,無需執行此步驟

[root@host ~]# systemctl enable --now chronyd


Almalinux minimal 環境下在每一台機器上安裝基本需求套件

[root@host ~]# dnf install wget vim lrzsz nano net-tools -y


hostnamectl 設定三台主機的主機名稱並於三台機器上寫入每台機器的主機名稱(/etc/hosts

192.168.88.81 minio1
192.168.88.53 minio2
192.168.88.79 minio3


防火牆配置(本例未來規劃使用 AWS SecurityGroup 管理防火牆故無需 Firewalld,若你是本地機器安裝僅需於 Firewalld 中開放 TCP9000、TCP9001)

[root@host ~]# systemctl disable firewalld
[root@host ~]# systemctl stop firewalld


三台主機配置作業系統 limits 並重啟電腦

[root@host ~]# vim /etc/security/limits.conf
* soft nofile 524288
* hard nofile 524288
[root@host ~]# vim /etc/systemd/system.conf
DefaultLimitNOFILE=524288:524288
[root@host ~]# vim /etc/systemd/user.conf
DefaultLimitNOFILE=524288:524288
[root@host ~]# reboot



安裝MinIO

在每一台機器上下載 minio 安裝檔案(本例指定2023-07到2023-08之間發布的版本

[root@minio1 ~]# cd /opt/minio
[root@minio1 minio]# wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2023-07-21T21-12-44Z
[root@minio1 minio]# mv minio.RELEASE.2023-07-21T21-12-44Z minio
[root@minio1 minio]# chmod +x ./minio
[root@minio1 minio]# mv ./minio /usr/local/bin/


確認 minio 版本

[root@minio1 minio]# minio --help


替每一台機器編寫服務啟動腳本並預設開機啟動

[root@minio1 minio]# vim /usr/lib/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})
[root@minio1 minio]# chmod +x /usr/lib/systemd/system/minio.service
[root@minio1 minio]# systemctl enable minio


在每一台機器上製作環境變數設定檔(內含admin的登入帳密配置)

[root@minio1 minio]# vim /etc/default/minio
# Set the hosts and volumes MinIO uses at startup
# The command uses MinIO expansion notation {x...y} to denote a
# sequential series.
#
# The following example covers four MinIO hosts
# with 4 drives each at the specified hostname and drive locations.
# The command includes the port that each MinIO server listens on
# (default 9000)

MINIO_VOLUMES="http://minio{1...3}:9000/opt/minio/data/export{1...4}/minio"

# Set all MinIO server options
#
# The following explicitly sets the MinIO Console listen address to
# port 9001 on all network interfaces. The default behavior is dynamic
# port selection.

MINIO_OPTS="--console-address :9001"

# Set the root username. This user has unrestricted permissions to
# perform S3 and administrative API operations on any resource in the
# deployment.
#
# Defer to your organizations requirements for superadmin user name.

MINIO_ROOT_USER=minioadmin

# Set the root password
#
# Use a long, random, unique string that meets your organizations
# requirements for passwords.

MINIO_ROOT_PASSWORD=minio-secret-keyXXXX


分別於三台機器上建立 minio 服務啟動所需的用戶群組

[root@minio1 minio]# groupadd -r minio-user
[root@minio1 minio]# useradd -M -r -g minio-user minio-user
[root@minio1 minio]# chown minio-user:minio-user \
/opt/minio/data/export1 /opt/minio/data/export2 \
/opt/minio/data/export3 /opt/minio/data/export4


分別於三台機器上啟動 minio 服務

[root@minio1 minio]# systemctl start minio


選擇任一台機器的 ip 加上端口號,透過瀏覽器直接進入 webUI 管理頁面(帳密為 /etc/default/minio 中你所設定的那組)


由於本例的 MinIO 是分佈式叢集的關係,叢集內的每一台機器都可以提供 webUI 服務,因此推薦使用雲端ELB 或地端 Nginx 來做對外的負載平衡與反向代理。



導覽MinIO

在左方菜單的「Health」可以查看 MinIO 的安裝版本與管理節點、磁碟的數量


在左方菜單的「Object Brower」頁面中點擊「Create a Bucket」建立一個測試用的存儲空間


名稱不接受大寫,只能是小寫字元


點進 bucket 設定存取權限將 policy 設定為「public」讓 bucket 可被存取




點擊上方「Object Browser」瀏覽 bucket 內容


從右上方「Upload」按鈕可以上傳 object 到 bucket03 中


點選剛剛上傳的 object 並選擇右方菜單中的「Preview」可以預覽物件內容


在左方菜單的「Monitoring」下的「Mertircs」可以查看伺服器池(Server Pool)的組成與空間使用狀況




本文內容參閱以下連結:
Deploy MinIO: Multi-Node Multi-Drive
Hardware Checklist
12 圖入門高性能分佈式對象存儲 MinIO
Minio筆記_minio存儲空間佔用-CSDN博客

tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言