中文文档

多节点多硬盘部署

重要

为了更优的体验和最佳的性能,您可以联系MinIO中国提供商业技术支持和技术托底服务。

更安心的分布式环境,请联系电话:4008-566-339。

本页面的程序涵盖了在多节点多硬盘(MNMD)或“分布式”配置中部署MinIO。 MNMD 部署提供企业级性能、可用性和可扩展性,并且是所有生产工作负载的推荐拓扑结构。

MNMD 部署支持 Erasure Coding(纠删码) 配置,可以容忍部署中多达一半的节点或驱动器的丢失,同时继续提供读操作。 在计划和设计MinIO部署时,请使用 纠删码计算器(EC计算器) 来探索纠删码(EC)设置对您拟定拓扑的影响。

先决条件

网络设置和防火墙

每个节点都应该具有对部署中其他每个节点的完全双向网络访问权限。 对于容器化或编排基础设施,这可能需要特定的网络和路由组件配置,例如入口或负载均衡器。 某些操作系统也可能需要设置防火墙规则。 例如,以下命令明确打开运行firewalld的服务器的默认MinIO服务器API端口 9000

firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload

部署中的所有MinIO服务器 必须 使用相同的监听端口。

如果您设置了一个静态的 MinIO控制台 端口(例如 :9001 ), 则还必须授予对该端口的访问权限,以确保来自外部客户端的连接。

MinIO 强烈建议 使用负载均衡器来管理与集群的连接。 负载均衡器应使用 “最小连接数” 算法将请求路由到MinIO部署, 因为部署中的任何MinIO节点都可以接收、路由或处理客户端请求:

以下负载均衡器已知可以与MinIO很好地配合使用:

为了支持MinIO而配置防火墙或负载均衡器不在此过程的范围内。 Nginx服务器反向代理MinIO配置 参考提供了一份基本配置,可将NGINX用作反向代理,并配置了基本的负载平衡。

连续的主机名

创建服务器池时,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硬件建议的 Storage 部分:

使用本地存储

直接连接存储(DAS)在性能和一致性方面比网络存储( 网络附加存储(NAS)存储区域网络(SAN)网络文件存储(NFS))有显著优势。 MinIO 强烈建议使用闪存存储(NVMe,SSD)作为主要或 “热” 数据。

使用 XFS 格式化驱动器。

MinIO 强烈建议为存储提供 XFS 格式化的驱动器。 MinIO 在内部测试和验证套件中使用 XFS,以提供对性能和行为在所有规模上的额外信心。

MinIO 并 测试也不推荐其他文件系统,如 EXT4、BTRFS 或 ZFS。

使用一致类型的驱动器

MinIO 不区分驱动器类型,并且不从混合存储类型中受益。 每个 :term:`pool`(池)必须使用相同类型(NVMe,SSD)的驱动器。

例如,部署一个仅由 NVMe 驱动器组成的池。 如果您将一些驱动器作为 SSD 或 HDD 部署,MinIO 会将与 NVMe 驱动器相同的方式来处理这些驱动器。 这可能会导致性能问题,因为一些驱动器具有不同的或更差的读/写特性,并且不能像 NVMe 驱动器那样以相同的速率响应。

使用一致大小的驱动器

MinIO 将每个硬盘使用的大小限制为池中最小的硬盘。

例如,部署一个由容量相同的 7.68TiB NVMe驱动器组成的数据池。 如果您部署了一个容量为 3.84TiB 的驱动器,MinIO会将池中的所有驱动器都视为具有那个较小的容量。

配置顺序挂载驱动器

MinIO 使用 Go 扩展表示法 {x...y} 来表示在创建新 deployment 时驱动器的顺序系列,其中 deployment 中的所有节点都具有相同的一组挂载驱动器。 将驱动器挂载路径配置为顺序系列,以最佳支持这种表示法。 例如,使用模式 /mnt/drive-n 挂载您的驱动器,其中 n1 开始,每增加一个驱动器就递增 1

在重新启动后保持驱动器挂载和映射不变

使用 /etc/fstab 确保在节点重新启动后驱动器到挂载点的映射一致。

在重新启动后,非Linux操作系统应使用等效的驱动器挂载管理工具以保持驱动器到挂载点的映射一致。

Exclusive access to drives

MinIO 要求 专有 对提供给对象存储的驱动器或卷的访问。 其他任何进程、软件、脚本或人员都不得直接对提供给MinIO的驱动器或卷执行 任何 操作,也不得对MinIO放置在其上的对象或文件执行操作。

除非由MinIO工程部门指导,否则不要使用脚本或工具直接修改、删除或移动提供给MinIO的驱动器上的任何数据片段、校验片段或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。 这些操作很可能会导致广泛的数据损坏和丢失,超出了MinIO的修复能力。

内存要求

在 RELEASE.2024-01-28T22-35-53Z 版本发生变更: MinIO 在启动时预分配 2GiB 的系统内存。

MinIO建议每个主机最少使用32GiB的内存。 有关MinIO中内存分配的更多指导,请参阅 Memory

时间同步

多节点系统必须保持时间和日期同步,以维持稳定的节点间操作和交互。 确保所有节点定期同步到同一时间服务器。 操作系统用于同步时间和日期的方法有所不同,例如使用 ntp , timedatectl , 或者 timesyncd

检查操作系统的文档,了解如何跨节点设置和维护准确且相同的系统时钟时间。

考虑因素

擦除编码奇偶校验

MinIO的 擦除编码 是一种数据冗余和可用性特性,它允许MinIO部署在丢失多个驱动器或节点时自动重建对象。

MinIO默认设置为 EC:4 ,即每个 擦除集合 包含4个校验块。 您可以通过设置适当的 MinIO Storage Class environment variable 环境变量来设置自定义的校验级别。 考虑使用MinIO的 Erasure Code Calculator 来指导选择适合您集群的正确擦除编码校验级别。

重要

虽然您可以随时更改擦除奇偶校验设置,但使用给定奇偶校验写入的对象 不会 更新为新的奇偶校验设置。 MinIO 只对新写入的对象应用已更改的奇偶校验。 现有对象保留创建时的奇偶校验值。

基于容量的规划

MinIO建议在达到70%使用率之前,规划足够的存储容量以存储 至少 2年的数据。 更频繁地进行 服务器池扩展 或基于 “即时需求” 进行扩展通常表明架构或规划存在问题。

例如,考虑一个预计每年至少产生100 TiB数据的应用程序套件,并且计划在3年后进行扩展。 通过确保部署初始就有约500 TiB的可用存储空间,集群可以安全地达到70%的阈值,并为每年数据存储输出的增长提供额外的缓冲空间。

由于MinIO的 擦除编码 需要一部分存储来存储校验信息,因此总的 原始 存储必须超过计划中的 可用 容量。 考虑使用MinIO的 Erasure Code Calculator 来指导规划特定擦除代码设置下的存储容量。

推荐的操作系统

本教程假设所有运行 MinIO 的主机都使用

推荐的操作系统 例如 RHEL8+ 或 Ubuntu 18.04+。

现有数据

在分布式环境中启动新的 MinIO 服务器时,存储设备不得有现有数据。

一旦启动MinIO服务器,所有与数据的交互都必须通过S3 API完成。 使用 MinIO客户端MinIO控制台 或 MinIO 软件开发套件 之一 使用buckets和对象。

警告

修改后端驱动器上的文件可能会导致数据损坏或数据丢失。

布署分布式MinIO服务器

以下过程创建一个新的分布式 MinIO 部署,其中包括 单个 服务器池

下面提供的所有命令均使用示例值。 将这些值替换为 那些适合您的部署。

在开始之前查看 先决条件 程序。

1) 在各个节点安装MinIO二进制包

下面的内容提供了在64位Linux操作系统上使用RPM、DEB或二进制文件安装MinIO的示例。 RPM和DEB软件包会自动将MinIO安装到必要的系统路径,并创建一个适用于 systemctlminio 服务。 MinIO强烈建议使用RPM或DEB安装方式。 要更新使用的部署,其管理方式是: systemctl , 详细内容请查看 minio-upgrade-systemctl.

amd64 (Intel or AMD 64位处理程序)

使用以下选项之一下载适用于运行 Linux 操作系统的 Intel 或 AMD 64 位处理器的 MinIO 服务器安装文件。

使用以下命令下载最新版本的稳定 MinIO RPM 并安装:

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250422221226.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_20250422221226.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb

使用以下命令下载安装最新版本的稳定 MinIO二进制包, 并设置 $PATH :

wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
arm64 (ARM 64-bit processors)

使用以下选项之一为在 ARM 64 位处理器上运行 Linux 的机器下载 MinIO 服务器安装文件。

使用以下命令下载最新版本的稳定 MinIO RPM 并安装:

wget https://dl.min.io/server/minio/release/linux-arm64/archive/minio-20250422221226.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_20250422221226.0.0_arm64.deb -O minio.deb
sudo dpkg -i minio.deb

使用以下命令下载最新版本的稳定 MinIO 二进制文件, 并将其安装到系统 $PATH 中:

wget https://dl.minio.org.cn/server/minio/release/linux-arm64/minio
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
其他架构

MinIO 还支持其他体系结构:

  • ppc64le

  • s390x

有关下载这些体系结构的二进制文件、RPM 或 DEB 文件的说明,请参考和阅读: MinIO下载.

2) 创建 systemd 系统启动服务文件

.deb or .rpm 安装包将安装 systemd 文件至 /usr/lib/systemd/system/minio.service

对于二进制安装,请在所有 MinIO 主机上手动创建此文件。

备注

systemd 命令启动前,系统内部会检查 /etc/systemd/... 这个路径,是否存在启动系统文件,如果冲突请在 /usr/lib/systemd/... 路径,找到对应文件,避免重复创建后的冲突。

并且,为了避免冲突或意外的配置选项,请确保该文件仅存在于 /usr/lib/systemd/system/minio.service

请参考 systemd.unit 手册和说明 了解有关文件路径搜索顺序的详细信息。

[Unit]
Description=MinIO
Documentation=https://minio.org.cn/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 用户和组身份运行。 您可以使用 groupadduseradd 命令创建用户和组. 以下示例创建用户、组并设置权限以访问MinIO预定用于存储的文件夹路径。 这些命令通常需要管理员 ( 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拟用于使用的这些驱动器的路径。

或者,将 UserGroup 的值改为系统主机上另一个 具有必要访问和权限的用户和组。

MinIO在其网站上发布了一些额外的启动脚本示例 github.com/minio/minio-service.

要更新使用 systemctl , 请访问 minio-upgrade-systemctl 查看。

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控制台 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

您可以指定其他 environment variables 或服务器命令行选项(根据需要) 由您的部署。 部署中的所有 MinIO 节点应包含相同的 每个变量具有相同值的环境变量。

4) 添加TLS/SSL证书

MinIO 启用 安全传输层 (TLS) 1.2+ 检测到有效的 x.509 证书(.crt)后自动进行 私钥(.key)位于 MinIO ${HOME}/.minio/certs 目录中。

对于 systemd 管理的部署,请使用 $HOME 目录 运行 MinIO 服务器进程的用户。 提供的 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 的证书目录 命令行参数。 修改 MINIO_OPTS 环境变量 /etc/default/minio 设置此选项。 运行的 systemd 用户 MinIO 服务器进程 必须 具有指定的读取和 列出权限目录。

有关为 TLS 配置 MinIO 的更具体指南,包括多域 通过服务器名称指示 (SNI) 支持,请参考和阅读 网络加密(TLS) 。 你可以 您可以选择跳过此步骤以在不启用 TLS 的情况下进行部署。 MinIO强烈 建议*反对*早期开发之外的非 TLS 部署。

5) 运行和启动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后任何驱动器仍处于离线状态,请检查和修复阻止其功能的任何问题,然后再开始生产工作负载。

MinIO服务不会在主机重新启动时自动启动。 您必须使用 systemctl enable minio.service 将进程作为主机引导的一部分,在服务器重启的过程中该进程会自动重启,而不用再进行手动管理。

sudo systemctl enable minio.service

6) 打开MinIO控制台

打开浏览器并访问端口 :9001 处的任何 MinIO 主机名 打开 MinIO控制台 登录页面。 例如, https://minio1.example.com:9001 .

使用 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 登录 从上一步开始。

MinIO控制台 Login Page

您可以使用MinIO控制台进行常规管理任务, 如身份和访问管理、指标和日志监控以及服务器配置。 每个MinIO服务器都包含了自己的内嵌 MinIO控制台。

7) 下一步

Join Slack 商业支持购买咨询