中文文档

单节点多硬盘部署MinIO

本页面的步骤介绍了如何以单节点多驱动器(SNMD)配置部署MinIO。 SNMD 部署提供了驱动器级别的可靠性以及故障转移/恢复功能,但由于单个节点的限制,会对性能和扩展性产生限制。

对于生产环境,MinIO强烈推荐使用:ref:多节点多磁盘 (Distributed) <minio-mnmd> 拓扑结构进行部署,以实现企业级别的性能、可用性和可扩展性。

先决条件

存储需求

以下要求概述了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

Deploy 单节点多硬盘 MinIO

下面的流程部署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 。 对于Windows主机,请指定一个类似Windows风格的路径: C:\minio\config 。 MinIO服务器容器可以使用此文件作为来源: environment variables

以下示例提供了一个启动的环境变量配置文件:

# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment.

MINIO_ROOT_USER=myminioadmin
MINIO_ROOT_PASSWORD=minio-secret-key-change-me

# MINIO_VOLUMES sets the storage volumes or paths to use for the MinIO server.
# The specified path uses MinIO expansion notation to denote a sequential series of drives between 1 and 4, inclusive.
# All drives or paths included in the expanded drive list must exist *and* be empty or freshly formatted for MinIO to start successfully.

MINIO_VOLUMES="/data-{1...4}"

# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
# 例如, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9001"

根据您的本地部署需求,包括任何其他所需的环境变量。 ..

在 Server 版本加入: RELEASE.2024-03-03T17-50-39Z

MinIO会自动生成唯一的根凭据,如果以下所有条件都成立:

  • KES 版本 2024-03-01T18-06-46Z 或更高版本运行

  • Have not defined:

    • MINIO_ROOT_USER variable

    • MINIO_ROOT_PASSWORD variable

  • Have:

当这些条件在启动时得到满足时,MinIO会使用KMS为部署生成唯一的根凭据,使用基于 哈希的消息验证码(HMAC)

如果MinIO生成了这样的凭据,那么用于生成凭据的密钥 必须 保持不变, 并且 继续存在。 部署上的所有数据都是用这个密钥加密的!

要旋转生成的根凭据,您需要在KMS中生成一个新密钥,然后更新 MINIO_KMS_KES_KEY_NAME 环境变量的值以使用新密钥。

4) 启动MinIO服务

在本地主机上执行以下命令,以将MinIO SNSD 部署作为一个服务启动:

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

journalctl 的显示输出的样例如下面展示的内容:

Status:         1 Online, 0 Offline.
API: http://192.168.2.100:9000  http://127.0.0.1:9000
RootUser: myminioadmin
RootPass: minio-secret-key-change-me
Console: http://192.168.2.100:9090 http://127.0.0.1:9090
RootUser: myminioadmin
RootPass: minio-secret-key-change-me

Command-line: https://minio.org.cn/docs/minio/linux/reference/minio-mc.html
   $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me

Documentation: https://minio.org.cn/docs/minio/linux/index.html

API 列出了客户端可以访问MinIO S3 API的网络接口和端口。 Console 列出了网络接口和端口,客户端可以通过这些接口和端口访问MinIO网页端的控制台。

5) 连接到MinIO服务

您可以通过在首选的浏览器中输入MinIO服务器 Console控制台 中的任何主机名或IP地址来访问MinIO控制台,例如http://localhost:9001。

登录MinIO的用户名和密码配置参数为 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 这些配置可以在在容器指定的环境文件中进行修改。

MinIO控制台 displaying Buckets view in a fresh installation

您可以使用MinIO控制台进行一般管理任务,如身份和访问管理、指标和日志监控或服务器配置。每个MinIO服务器都包含其自己的嵌入式MinIO控制台。 如果您的本地主机防火墙允许外部访问控制台端口,则同一网络上的其他主机可以使用您的本地主机的IP地址或主机名访问控制台。

你可以使用终端或Shell访问MinIO部署,请参考以下文档 MinIO客户端 (mc) 。 请查看关于 MinIO客户端安装快速入门 的安装的说明 mc

使用下面的命令 alias 可创建一个新的mc连接,连接对应于的MinIO部署的S3服务器。

请指定来自MinIO 服务器的 API 对应的主机名或IP地址,例如: http://localhost:9000

mc alias set myminio http://localhost:9000 myminioadmin minio-secret-key-change-me
  • myminio 替换为所需的别名。

  • myminioadmin 替换为容器指定的环境文件中的 MINIO_ROOT_USER 值。

  • minio-secret-key-change-me 替换为容器指定的环境文件中的 MINIO_ROOT_PASSWORD 值。

您可以使用任何 mc 命令与容器进行交互。 如果您的本地主机防火墙允许外部访问MinIO S3 API端口,同一网络上的其他主机可以使用您本地主机的IP或主机名访问MinIO部署。

Join Slack 商业支持购买咨询