扩展分布式 MinIO 部署
MinIO 支持通过添加新的节点来扩展现有的分布式部署服务器池每个存储池都会扩展集群的总可用存储容量。
扩展不提供业务连续性/灾难恢复(BC/DR)级别的保护。 虽然每个池都是一组具有独立性的独立服务器擦除集对于可用性而言,一个池的完全丢失将导致MinIO停止部署中所有池的I/O操作。 同样地,在一个池中失去法定人数的擦除集将导致存储在该集中对象的数据丢失,无论其他擦除集或池的数量如何。
新的服务器池已就绪不需要使用与任何现有服务器池相同类型或规格的硬件和软件配置,尽管这样做可以简化集群管理并在各池之间实现更可预测的性能。 新池中的所有驱动器应该在新池中必须是相同类型和大小。 查看 MinIO 的硬件推荐有关选择适当配置的更完整指导,请参阅详细文档。
为您的单池或多池 MinIO 部署提供业务连续性-灾难恢复(BC-DR)级别的故障转移和恢复支持,请使用站点复制.
本页面的过程扩展了一个现有的分布式添加额外服务器池的MinIO部署。
重要
MinIO 不支持扩展单节点单驱动器拓扑结构。
前提条件
网络与防火墙
每个节点应该能够与部署中的其他每个节点建立完全的双向网络连接。对于容器化或编排的基础设施,这可能需要对网络和路由组件(如入口或负载均衡器)进行特定配置。某些操作系统可能还需要设置防火墙规则。例如,以下命令显式打开默认的MinIO服务器API端口9000在使用服务器时firewalld:
firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload
部署中的所有 MinIO 服务器必须使用相同的监听端口。
如果你设置了静态MinIO 控制台端口(例如:9001你必须也授予该端口访问权限,以确保外部客户端的连接。
MinIO强烈推荐使用负载均衡器来管理到集群的连接。负载均衡器应使用"最少连接"算法将请求路由到MinIO部署,因为部署中的任何MinIO节点都可以接收、路由或处理客户端请求。
以下负载均衡器已知与 MinIO 兼容良好:
配置防火墙或负载均衡器以支持 MinIO 超出了本流程的范围。配置 MinIO 服务器的 NGINX 代理reference 提供了一个基准配置,用于将 NGINX 作为反向代理并配置基本负载均衡。
顺序主机名
MinIO需要使用展开表示法{x...y}表示在创建服务器池时的一系列顺序排列的MinIO主机。因此MinIO需要使用顺序编号的主机名来表示每个minio server池中的进程。
创建必要的DNS主机名映射之前要启动此过程。 例如,以下主机名将支持一个4节点分布式服务器池:
minio5.example.comminio6.example.comminio7.example.comminio8.example.com
您可以使用扩展符号指定完整的主机名范围minio{5...8}.example.com.
配置 DNS 以支持 MinIO 不在本流程的讨论范围内。
存储要求
以下要求总结了存储MinIO 硬件建议部分:
- 使用本地存储
直连存储(DAS)相比网络存储具有显著的性能和一致性优势(NAS, SAN, NFSMinIO 强烈建议对主数据或"热"数据使用闪存存储(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.84TiBMinIO 将池中的所有驱动器视为具有该较小容量。- 配置顺序驱动器挂载
MinIO 使用 Go 扩展表示法
{x...y}在创建新服务器池时,用顺序序列表示驱动器系列,其中服务器池中的所有节点都具有一组相同的已挂载驱动器。 将驱动器挂载路径配置为顺序序列,以最好地支持此表示法。 例如,使用以下模式挂载驱动器:/mnt/drive-n你好,n开始于1并递增1每个驱动器。- 持久化驱动器挂载和映射在重启后保持
使用
/etc/fstab确保节点重启时驱动器到挂载点的映射保持一致。非 Linux 操作系统应使用等效的驱动器挂载管理工具。
驱动器独占访问
MinIO需要 独家对象存储所提供的驱动器或卷的访问权限。 任何其他进程、软件、脚本或人员均不得执行任何直接对提供给 MinIO 的驱动器或卷,或 MinIO 置于其上的对象或文件执行操作。
除非得到 MinIO 工程团队指示,否则不得使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、校验分片或元数据文件,包括在不同驱动器或节点间的转移操作。 此类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自我修复能力范围。
擦除码奇偶校验所需的最小驱动器数
MinIO 要求每个存储池满足部署要求纠删码设置。具体来说,新的池拓扑必须
至少支持2 x EC:N每台驱动器擦除集你好,EC:N是标准部署的奇偶校验存储类。此要求确保新服务器池能够满足预期SLA部署的。
您可以使用MinIO Erasure Code Calculator检查Erasure Code Stripe Size (K+M)您新池的最高
列值至少为2 x EC:N池支持部署的擦除编码奇偶校验设置。
时间同步
多节点系统必须保持同步的时间和日期,以维持稳定的节点间操作和交互。
确保所有节点定期同步到同一时间服务器。
操作系统在同步时间和日期的方法上有所不同,例如通过ntp, timedatectl或timesyncd.
请查阅操作系统的文档,了解如何在各个节点间设置和维护精确且一致的系统时钟时间。
首先备份集群设置
使用mc admin cluster bucket export和mc admin cluster iam export在开始停用之前分别获取存储桶元数据和IAM配置快照的命令。
您可以使用这些快照进行恢复桶和IAM必要时从用户或进程错误中恢复的设置。
注意事项
写入文件
MinIO 不会自动在新服务器池之间重新平衡对象。 相反,MinIO 会将新的写入操作执行到具有最多可用存储空间的池, 该权重由池的可用空间量除以所有可用池的总可用空间得出。
确定特定存储池上写入操作概率的公式是
\(FreeSpaceOnPoolA / FreeSpaceOnAllPools\)
假设有一个由三个存储池组成的群组,总共有 10 TiB 的可用空间,分布如下:
Pool A 有 3 TiB 的可用空间
Pool B 有 2 TiB 的可用空间
Pool C 有 5 TiB 的可用空间
MinIO 计算写入每个存储池的操作概率为:
Pool A: 30% chance (\(3TiB / 10TiB\))
Pool B: 20% chance (\(2TiB / 10TiB\))
Pool C: 50% chance (\(5TiB / 10TiB\))
除了空闲空间计算外,如果写入选项(带校验)会导致驱动器使用率超过99%或已知空闲inode数量低于1000,MinIO将不会写入该存储池。
如果需要,您可以手动启动重新平衡过程mc admin rebalance要了解更多关于重新平衡的工作原理,请参阅跨部署管理对象.
同样地,MinIO 在停用过程中不会向存储池写入数据。
扩展是无中断的
添加新的服务器池需要重启全部部署中的 MinIO 服务器进程大致在同一时间。
MinIO 强烈建议同时重启部署中的所有 MinIO 服务器进程。 MinIO 操作具有原子性和严格一致性。 因此,重启过程不会中断应用程序和正在进行的操作。
Do 不执行"滚动"(例如一次一个节点)重启。
基于容量的规划
MinIO建议规划足够的存储容量来存储至少在达到70%使用率前的2年数据。 正在执行服务器池扩展更频繁地或"即时"地进行通常表明存在架构或规划问题。
例如,考虑一个预期每年至少产生100 TiB数据的应用套件,其扩展前的目标周期为3年。 该部署在初始服务器池中拥有约500 TiB可用存储,使得集群安全满足70%阈值的同时,还为数据增长保留了一定缓冲空间。 新的服务器池应当理想情况下至少需要增加500TiB的存储空间,以便在进一步扩容前达到类似的使用寿命。
由于 MinIO纠删码需要一些存储空间用于奇偶校验,总的raw存储容量必须超过计划值可用的容量。 考虑使用 MinIOErasure Code Calculator关于特定擦除编码设置的容量规划指导。
推荐的操作系统
本教程假设所有运行 MinIO 的主机都使用推荐的 Linux 操作系统.
部署中的所有主机应使用匹配的配置运行软件配置.
扩展分布式 MinIO 部署
以下过程添加一个服务器池到现有的 MinIO 部署。每个存储池都会扩展集群的总可用存储容量,同时保持整体的可用性集群的。
以下提供的所有命令均使用示例值。请将这些值替换为适合您部署环境的值。
Review the前提条件在开始此过程之前。
在开始之前完成所有计划的硬件扩展停用较旧的硬件池.
1) 在新服务器池中的每个节点上安装 MinIO 二进制文件
以下选项卡提供了使用 RPM、DEB 或二进制文件在 64 位 Linux 操作系统上安装 MinIO 的示例。
RPM 和 DEB 软件包会自动将 MinIO 安装到必要的系统路径并创建minio服务systemctlMinIO强烈推荐使用RPM或DEB安装方式。
要更新使用以下方式管理的部署:systemctl, 看到更新 systemctl 管理的 MinIO 部署.
amd64(Intel 或 AMD 64 位处理器)
请选择以下选项之一,为运行在 Intel 或 AMD 64 位处理器上的 Linux 机器下载 MinIO 服务器安装文件。
使用以下命令下载最新的稳定版 MinIO RPM 并安装它。
wget RPMURL -O minio.rpm
sudo dnf install minio.rpm
使用以下命令下载最新的稳定版 MinIO DEB 并安装:
wget DEBURL -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 (ARM 64位处理器)
请选择以下选项之一,为运行在 ARM 64 位处理器上的 Linux 机器下载 MinIO 服务器安装文件。
使用以下命令下载最新的稳定版 MinIO RPM 并安装它。
wget |minio-rpmarm64| -O minio.rpm
sudo dnf install minio.rpm
使用以下命令下载最新的稳定版 MinIO DEB 并安装:
wget |minio-debarm64| -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) 添加 TLS/SSL 证书
MinIO 支持传输层安全协议 (TLS)1.2+
在检测到有效的 x.509 证书时自动.crt) 和
私钥 (.key) 在 MinIO 中${HOME}/.minio/certs目录。
对于systemd托管部署,请使用$HOME运行 MinIO 服务器进程的用户目录。提供的minio.servicefile 以进程方式运行minio-user上一步包含创建此用户及其主目录的说明/home/minio-user.
将 TLS 证书放入
/home/minio-user/.minio/certs在每个主机上。If 任何MinIO 服务器或客户端使用由未知证书颁发机构签名的证书(自签名或内部 CA),您必须将 CA 证书放置在
/home/minio-user/.minio/certs/CAs部署中所有 MinIO 主机上的证书。MinIO 会拒绝无效的证书(不受信任、已过期或格式错误的证书)。
如果minio.servicefile specifies a different user account, use the$HOME该账户的目录。或者,使用自定义证书目录指定minio server --certs-dir命令行参数。修改MINIO_OPTS变量在/etc/default/minio要设置此选项。systemd运行 MinIO 服务器进程的用户必须对指定目录拥有读取和列出权限。
有关配置 MinIO TLS 的更多具体指导,包括通过服务器名称指示(SNI)实现多域名支持,请参阅网络加密(TLS)您可以选择跳过此步骤以在不启用TLS的情况下部署。MinIO强烈建议反对早期开发阶段之外的非TLS部署。
3) 创建systemd服务文件
The.deb or .rpmpackages install the following
安装以下软件包systemd服务文件到/usr/lib/systemd/system/minio.service对于二进制安装,请在所有 MinIO 主机上手动创建此文件。
Note
systemd检查/etc/systemd/...在检查之前的路径/usr/lib/systemd/...path and uses the first file it finds.
为避免配置选项冲突或出现意外情况,请检查该文件是否仅存在于/usr/lib/systemd/system/minio.servicepath.
参考systemd.unit 手册页有关文件路径搜索顺序的详细信息。
[Unit]
Description=MinIO
Documentation=https://docs.min.io/community/minio-object-store/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})
Theminio.service文件以...身份运行minio-user默认的用户和组。
您可以使用以下方式创建用户和组:groupadd和useraddcommands. The following example creates the user, group, and sets permissions
to access the folder paths intended for use by MinIO. These commands typically
require 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 上发布了更多启动脚本示例github.com/minio/minio-service.
要更新使用以下方式管理的部署systemctl, 看到更新 systemctl 管理的 MinIO 部署.
4) 创建服务环境文件
在以下位置创建环境文件:/etc/default/minioMinIO 服务使用此文件作为所有环境变量MinIO 使用和theminio.servicefile.
以下示例假设:
该部署包含一个由四个具有顺序主机名的MinIO服务器主机组成的单一服务器池。
minio1.example.com minio3.example.com minio2.example.com minio4.example.com
每个主机都有4个本地连接的驱动器,挂载点按顺序排列:
/mnt/disk1/minio /mnt/disk3/minio /mnt/disk2/minio /mnt/disk4/minio
新的服务器池由八台新的 MinIO 主机组成,这些主机具有连续的 主机名:
minio5.example.com minio9.example.com minio6.example.com minio10.example.com minio7.example.com minio11.example.com minio8.example.com minio12.example.com
所有主机都有八个本地连接的驱动器,挂载点按顺序排列:
/mnt/disk1/minio /mnt/disk5/minio /mnt/disk2/minio /mnt/disk6/minio /mnt/disk3/minio /mnt/disk7/minio /mnt/disk4/minio /mnt/disk8/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 starts the MinIO server with two server pools.
#
# The space delimiter indicates a seperate server pool
#
# The second set of hostnames and volumes is the newly added pool.
# The pool has sufficient stripe size to meet the existing erasure code
# parity of the deployment (2 x EC:4)
#
# The command includes the port on which the MinIO servers listen for each
# server pool.
MINIO_VOLUMES="https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio https://minio{5...12}.example.net:9000/mnt/disk{1...8}/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 节点都应包含具有匹配值的相同环境变量。
5) 使用扩展配置重启 MinIO 部署
在每个节点上执行以下命令同时在部署中 要重启 MinIO 服务:
sudo systemctl restart minio.service
使用以下命令确认服务在线且功能正常:
sudo systemctl status minio.service
journalctl -f -u minio.service
MinIO 在服务器进程连接和同步期间可能会记录数量增加的非关键警告。这些警告通常是暂时性的,应在部署上线后自行解决。
MinIO 强烈建议同时重启部署中的所有 MinIO 服务器进程。 MinIO 操作具有原子性和严格一致性。 因此,重启过程不会中断应用程序和正在进行的操作。
Do 不执行"滚动"(例如一次一个节点)重启。
6) 后续步骤
更新所有负载均衡器、反向代理或其他网络控制平面, 以将客户端请求路由到 MinIO 分布式部署中的新主机。 虽然 MinIO 会自动管理内部路由,但让控制平面处理初始连接管理 可以减少网络跃点并提高效率。
Review theMinIO 控制台确认更新后的集群拓扑并监控性能。