部署 MinIO:多節點多硬碟
此頁面上的程序涵蓋在多節點多硬碟 (MNMD) 或「分散式」組態中部署 MinIO。 MNMD 部署提供企業級效能、可用性和可擴展性,是所有生產工作負載的建議拓撲。
MNMD 部署支援 抹除碼 組態,這些組態可容忍部署中多達一半的節點或硬碟的損失,同時繼續提供讀取操作。在規劃和設計 MinIO 部署時,請使用 MinIO 抹除碼計算器,以探索抹除碼設定對您預期拓撲的影響。
先決條件
網路和防火牆
每個節點都應具有對部署中每個其他節點的完整雙向網路存取權限。對於容器化或協調的基礎設施,這可能需要對網路和路由元件(例如入口或負載平衡器)進行特定組態。某些作業系統可能還需要設定防火牆規則。例如,以下命令會明確開啟執行 firewalld 的伺服器的預設 MinIO 伺服器 API 連接埠 9000
firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload
部署中的所有 MinIO 伺服器必須使用相同的監聽連接埠。
如果您設定靜態的 MinIO 主控台 連接埠(例如 :9001
),您還必須授予對該連接埠的存取權,以確保外部用戶端的連線能力。
MinIO 強烈建議使用負載平衡器來管理與叢集的連線。負載平衡器應使用「最少連線」演算法將請求路由到 MinIO 部署,因為部署中的任何 MinIO 節點都可以接收、路由或處理用戶端請求。
已知以下負載平衡器可以與 MinIO 良好運作
設定防火牆或負載平衡器以支援 MinIO 超出了此程序的範圍。設定 MinIO 伺服器的 NGINX Proxy 參考資料提供了將 NGINX 用作反向 Proxy 時的基本組態,並設定了基本的負載平衡。
循序主機名稱
MinIO 要求在建立伺服器池時使用展開表示法 {x...y}
來表示 MinIO 主機的連續序列。MinIO 支援使用主機名稱或 IP 位址的連續序列來表示部署中的每個 minio server
程序。
此程序假設使用連續的主機名稱,因為這樣在管理上的負擔較低,尤其是在較大型的分散式叢集中。
在開始此程序之前,請先建立必要的 DNS 主機名稱對應。例如,以下的主機名稱將支援 4 節點分散式部署
minio-01.example.com
minio-02.example.com
minio-03.example.com
minio-04.example.com
您可以使用展開表示法 minio-0{1...4}.example.com
來指定整個主機名稱範圍。
非連續的主機名稱或 IP 位址
MinIO 不支援分散式部署使用非連續的主機名稱或 IP 位址。您可以在每個節點上使用 /etc/hosts
來設定簡單的 DNS 方案,以支援展開表示法。例如
# /etc/hosts
198.0.2.10 minio-01.example.net
198.51.100.3 minio-02.example.net
198.0.2.43 minio-03.example.net
198.51.100.12 minio-04.example.net
上述主機設定支援 minio-0{1...4}.example.net
的展開表示法,將連續的主機名稱對應到所需的 IP 位址。
儲存需求
以下需求摘要了 MinIO 硬體建議的儲存章節
- 使用本機儲存
直接連接儲存 (DAS) 在效能和一致性方面比網路儲存 (NAS、SAN、NFS) 具有顯著的優勢。MinIO 強烈建議對主要或「熱」資料使用快閃儲存 (NVMe、SSD)。
- 為磁碟機使用 XFS 格式
MinIO 強烈建議為儲存配置 XFS 格式化的磁碟機。MinIO 將 XFS 用於內部測試和驗證套件的一部分,為各種規模的效能和行為提供額外的信心。
MinIO 不測試也不建議任何其他檔案系統,例如 EXT4、BTRFS 或 ZFS。
- 使用一致的磁碟機類型
MinIO 不區分磁碟機類型,也無法從混合儲存類型中獲益。每個集區都必須使用相同的類型 (NVMe、SSD)
例如,部署僅由 NVMe 磁碟機組成的集區。如果您將某些磁碟機部署為 SSD 或 HDD,MinIO 會將這些磁碟機視為與 NVMe 磁碟機相同。這可能會導致效能問題,因為某些磁碟機具有不同或較差的讀取/寫入特性,且無法以與 NVMe 磁碟機相同的速率回應。
- 使用一致的磁碟機大小
MinIO 將每個磁碟機使用的大小限制為部署中最小的磁碟機。
例如,部署由相同數量的 NVMe 磁碟機組成的集區,這些磁碟機具有相同的
7.68TiB
容量。如果您部署一個具有3.84TiB
的磁碟機,MinIO 會將集區中的所有磁碟機視為具有較小的容量。- 設定循序磁碟機掛載
MinIO 使用 Go 展開表示法
{x...y}
來表示建立新部署時的磁碟機連續序列,其中部署中的所有節點都具有一組相同的已掛載磁碟機。將磁碟機掛載路徑設定為連續序列,以最佳方式支援此表示法。例如,使用/mnt/drive-n
的模式掛載磁碟機,其中n
從1
開始,每個磁碟機遞增1
。- 在重新啟動時持續磁碟機掛載和對應
使用
/etc/fstab
來確保在節點重新啟動時,磁碟機到掛載的對應保持一致。非 Linux 作業系統應使用等效的磁碟機掛載管理工具。
磁碟機的獨佔存取權
MinIO 要求對提供用於物件儲存的磁碟機或磁碟區進行獨佔存取。不應有其他程序、軟體、指令碼或人員直接對提供給 MinIO 的磁碟機或磁碟區,或 MinIO 放置在其上的物件或檔案執行任何動作。
除非 MinIO 工程部門指示,否則請勿使用指令碼或工具直接修改、刪除或移動提供磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。此類作業很可能會導致廣泛的損毀和資料遺失,超出 MinIO 的修復能力。
記憶體需求
變更於版本 RELEASE.2024-01-28T22-35-53Z: MinIO 在啟動時預先配置 2GiB 的系統記憶體。
MinIO 建議每個主機至少有 32GiB 的記憶體。如需更多有關 MinIO 中記憶體配置的指引,請參閱記憶體。
時間同步
多節點系統必須維持時間和日期同步,才能維持穩定的節點間作業和互動。請確保所有節點定期同步到同一時間伺服器。作業系統用於同步時間和日期的方法各有不同,例如使用 ntp
、timedatectl
或 timesyncd
。
請查看作業系統的說明文件,以了解如何在節點間設定和維護精確且相同的系統時鐘時間。
考量事項
清除碼同位
MinIO 清除碼是一種資料冗餘和可用性功能,可讓 MinIO 部署在叢集中遺失多個磁碟機或節點時,自動即時重建物件。
MinIO 預設為 EC:4
,或每個清除集合 4 個同位區塊。您可以設定適當的MinIO 儲存類別環境變數,來設定自訂的同位層級。請考慮使用 MinIO 清除碼計算器,以取得為叢集選取適當清除碼同位層級的指引。
重要事項
雖然您可以隨時變更清除同位設定,但以給定同位寫入的物件不會自動更新為新的同位設定。
以容量為基礎的規劃
MinIO 建議在達到 70% 使用率之前,規劃足以儲存至少 2 年資料的儲存容量。更頻繁或以「即時」方式執行伺服器集區擴充通常表示架構或規劃問題。
例如,假設一個應用程式套件預計每年產生至少 100 TiB 的資料,且擴充前的目標為 3 年。藉由確保部署預先擁有約 500TiB 的可用儲存空間,叢集可以安全地達到 70% 的閾值,並為每年資料儲存輸出成長提供額外的緩衝。
由於 MinIO 清除碼需要一些儲存空間用於同位,因此原始儲存總量必須超過計劃的可用容量。請考慮使用 MinIO 清除碼計算器,以取得圍繞特定清除碼設定規劃容量的指引。
建議的作業系統
本教學課程假設所有執行 MinIO 的主機都使用建議的 Linux 作業系統,例如 RHEL8+ 或 Ubuntu 18.04+。
預先存在的資料
在分散式環境中啟動新的 MinIO 伺服器時,儲存裝置不得有現有資料。
一旦您啟動 MinIO 伺服器,與資料的所有互動都必須透過 S3 API 完成。使用MinIO 用戶端、MinIO 主控台或其中一個 MinIO 軟體開發套件來處理儲存貯體和物件。
警告
修改後端磁碟機上的檔案可能會導致資料損毀或資料遺失。
部署分散式 MinIO
以下程序會建立一個由單一伺服器集區組成的新分散式 MinIO 部署。
以下提供的所有命令都使用範例值。請將這些值替換為適用於您的部署的值。
在開始此程序之前,請檢閱先決條件。
1) 在每個節點上安裝 MinIO 二進位檔
以下索引標籤提供使用 RPM、DEB 或二進位檔在 64 位元 Linux 作業系統上安裝 MinIO 的範例。RPM 和 DEB 套件會自動將 MinIO 安裝到必要的系統路徑,並為 systemctl
建立 minio
服務。MinIO 強烈建議使用 RPM 或 DEB 安裝路徑。若要更新使用 systemctl
管理的部署,請參閱更新 systemctl 管理的 MinIO 部署。
amd64 (Intel 或 AMD 64 位元處理器)
使用下列其中一個選項來下載在 Intel 或 AMD 64 位元處理器上執行 Linux 的機器適用的 MinIO 伺服器安裝檔案。
使用下列命令下載最新的穩定 MinIO RPM 並安裝它。
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20241029160148.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm
使用以下指令下載最新的穩定版 MinIO DEB 並安裝:
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20241029160148.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
使用以下指令下載最新的穩定版 MinIO 二進制檔案,並將其安裝到系統的 $PATH
中:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
arm64 (Apple M1/M2 或其他 ARM 64 位元處理器)
使用以下選項之一,下載在 ARM 64 位元處理器 (例如 Apple M1 或 M2) 上執行 Linux 的機器適用的 MinIO 伺服器安裝檔案。
使用下列命令下載最新的穩定 MinIO RPM 並安裝它。
wget https://dl.min.io/server/minio/release/linux-arm64/archive/minio-20241029160148.0.0-1.aarch64.rpm -O minio.rpm
sudo dnf install minio.rpm
使用以下指令下載最新的穩定版 MinIO DEB 並安裝:
wget https://dl.min.io/server/minio/release/linux-arm64/archive/minio_20241029160148.0.0_arm64.deb -O minio.deb
sudo dpkg -i minio.deb
使用以下指令下載最新的穩定版 MinIO 二進制檔案,並將其安裝到系統的 $PATH
中:
wget https://dl.min.io/server/minio/release/linux-arm64/minio
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
其他架構
2) 建立 systemd
服務檔案
.deb
或 .rpm
套件會將下列 systemd 服務檔案安裝到 /usr/lib/systemd/system/minio.service
。對於二進制檔案安裝,請在所有 MinIO 主機上手動建立此檔案。
注意
systemd
會先檢查 /etc/systemd/...
路徑,然後再檢查 /usr/lib/systemd/...
路徑,並使用找到的第一個檔案。為避免發生衝突或產生非預期的組態選項,請檢查該檔案是否僅存在於 /usr/lib/systemd/system/minio.service
路徑中。
如需有關檔案路徑搜尋順序的詳細資訊,請參閱 systemd.unit 的 man 頁面。
[Unit]
Description=MinIO
Documentation=https://minio.dev.org.tw/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})
minio.service
檔案預設以 minio-user
使用者和群組身分執行。您可以使用 groupadd
和 useradd
指令建立使用者和群組。以下範例會建立使用者、群組,並設定權限來存取 MinIO 預定使用的資料夾路徑。這些指令通常需要 root (sudo
) 權限。
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4
指定的磁碟機路徑僅為範例。請變更它們以符合 MinIO 預定使用的磁碟機路徑。
或者,您可以將 User
和 Group
的值變更為系統主機上另一個具有必要存取權和權限的使用者和群組。
MinIO 在 github.com/minio/minio-service 上發佈其他啟動腳本範例。
若要更新使用 systemctl
管理的部署,請參閱 更新 systemctl 管理的 MinIO 部署。
3) 建立服務環境檔案
在 /etc/default/minio
建立一個環境檔案。MinIO 服務會使用此檔案作為 MinIO 和 minio.service
檔案使用的所有環境變數的來源。
以下範例假設:
部署具有由四個 MinIO 伺服器主機組成的單一伺服器集區,且主機名稱依序排列。
minio1.example.com minio3.example.com minio2.example.com minio4.example.com
所有主機都有四個本機連接的磁碟機,且掛載點依序排列。
/mnt/disk1/minio /mnt/disk3/minio /mnt/disk2/minio /mnt/disk4/minio
部署具有在
https://minio.example.net
上執行的負載平衡器,該平衡器管理所有四個 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="https://minio{1...4}.example.net:9000/mnt/disk{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-key-CHANGE-ME
您可以根據您的部署需求指定其他 環境變數或伺服器命令列選項。部署中的所有 MinIO 節點應包含相同的環境變數,且每個變數的值都相同。
4) 新增 TLS/SSL 憑證
MinIO 會在偵測到 MinIO ${HOME}/.minio/certs
目錄中有有效的 x.509 憑證 (.crt
) 和私密金鑰 (.key
) 時,自動啟用 傳輸層安全性 (TLS) 1.2 以上版本。
對於 systemd
管理的部署,請使用執行 MinIO 伺服器處理程序的使用者的 $HOME
目錄。提供的 minio.service
檔案會以 minio-user
身分執行處理程序。上一個步驟包含有關建立此使用者 (其主目錄為 /home/minio-user
) 的說明。
將 TLS 憑證放置在每個主機的
/home/minio-user/.minio/certs
中。如果任何 MinIO 伺服器或用戶端使用由不明憑證授權單位 (自我簽署或內部 CA) 簽署的憑證,您必須將 CA 憑證放置在部署中所有 MinIO 主機的
/home/minio-user/.minio/certs/CAs
中。MinIO 會拒絕無效憑證 (不受信任、過期或格式錯誤)。
如果 minio.service
檔案指定其他使用者帳戶,請使用該帳戶的 $HOME
目錄。或者,您可以使用 minio server --certs-dir
命令列引數指定自訂憑證目錄。修改 /etc/default/minio
中的 MINIO_OPTS
變數以設定此選項。執行 MinIO 伺服器處理程序的 systemd
使用者必須具有指定目錄的讀取和清單權限。
如需設定 MinIO 以用於 TLS 的更具體指南 (包括透過伺服器名稱指示 (SNI) 支援多網域),請參閱 網路加密 (TLS)。您可以選擇略過此步驟以部署未啟用 TLS 的服務。MinIO 強烈建議不要在早期開發之外進行非 TLS 部署。
5) 執行 MinIO 伺服器處理程序
在部署中的每個節點上發出以下指令,以啟動 MinIO 服務:
sudo systemctl start minio.service
使用以下指令確認服務已連線且正常運作:
sudo systemctl status minio.service
journalctl -f -u minio.service
當伺服器處理程序連線並同步時,MinIO 可能會記錄較多的非嚴重警告。這些警告通常是暫時性的,應在部署上線時解決。
在版本 RELEASE.2023-02-09T05-16-53Z 中變更:如果 MinIO 偵測到足夠的磁碟機來滿足部署的寫入仲裁,則會啟動。
如果在啟動 MinIO 後有任何磁碟機保持離線狀態,請在開始生產工作負載之前檢查並解決任何阻止其運作的問題。
MinIO 服務不會在主機重新啟動時自動啟動。您必須使用 systemctl enable minio.service
在主機啟動時啟動處理程序。
sudo systemctl enable minio.service
6) 開啟 MinIO 主控台
開啟您的瀏覽器並存取任何 MinIO 主機名稱 (使用連接埠 :9001
),以開啟 MinIO 主控台 登入頁面。例如,https://minio1.example.com:9001
。
使用上一個步驟中的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 登入。

您可以使用 MinIO 主控台執行一般管理工作,例如身分識別與存取管理、指標與記錄監視或伺服器組態。每個 MinIO 伺服器都包含自己的內嵌 MinIO 主控台。