文档

部署 MinIO:单节点多磁盘

此页面上的过程涵盖了在单节点多磁盘 (SNMD) 配置中部署 MinIO。SNMD 部署提供了驱动器级别的可靠性和故障转移/恢复功能,但单节点限制了性能和扩展能力。

对于生产环境,MinIO 强烈建议使用 多节点多磁盘 (分布式) 拓扑结构进行部署,以获得企业级性能、可用性和可扩展性。

先决条件

存储要求

以下要求总结了 MinIO 硬件建议中关于 存储 部分的内容

使用本地存储

与网络存储(NASSANNFS)相比,直连存储 (DAS) 具有显著的性能和一致性优势。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 的模式挂载驱动器,其中 n1 开始,每个驱动器递增 1

在重启后持久化驱动器挂载和映射

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

非 Linux 操作系统应使用等效的驱动器挂载管理工具。

驱动器的独占访问

MinIO **需要**对用于对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或人员都不应对提供给 MinIO 的驱动器或卷或 MinIO 在其上放置的对象或文件执行任何操作。

除非 MinIO 工程师指示,否则请勿使用脚本或工具直接修改、删除或移动提供的驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点到另一个驱动器或节点。此类操作极有可能导致广泛的损坏和数据丢失,超出 MinIO 的修复能力。

内存需求

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

MinIO 建议每个主机至少有 32GiB 的内存。请参阅 内存,以获取有关 MinIO 中内存分配的更多指南。

部署单节点多驱动器 MinIO

以下过程部署由单个 MinIO 服务器和多个驱动器或存储卷组成的 MinIO。

1) 下载 MinIO 服务器

以下选项卡提供了使用 RPM、DEB 或二进制文件将 MinIO 安装到 64 位 Linux 操作系统的示例。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"
其他架构

MinIO 还支持其他架构

  • ppc64le

  • s390x

有关下载这些架构的二进制文件、RPM 或 DEB 文件的说明,请参阅 MinIO 下载页面

2) 创建 systemd 服务文件

.deb.rpm 软件包将以下 systemd 服务文件安装到 /usr/lib/systemd/system/minio.service。对于二进制安装,请在所有 MinIO 主机上手动创建此文件。

注意

systemd 在检查 /usr/lib/systemd/... 路径之前会检查 /etc/systemd/... 路径,并使用它找到的第一个文件。为了避免冲突或意外的配置选项,请检查文件是否仅存在于 /usr/lib/systemd/system/minio.service 路径下。

有关文件路径搜索顺序的详细信息,请参阅 systemd.unit 的手册页

[Unit]
Description=MinIO
Documentation=http://min-io.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 准备使用的文件夹路径。这些命令通常需要 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 准备使用的驱动器路径相匹配。

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

MinIO 在 github.com/minio/minio-service 上发布了其他启动脚本示例。

要更新使用 systemctl 管理的部署,请参阅 更新 systemctl 管理的 MinIO 部署

3) 创建环境变量文件

/etc/default/minio 处创建一个环境变量文件。对于 Windows 主机,请指定类似于 C:\minio\config 的 Windows 样式路径。MinIO 服务器容器可以使用此文件作为所有 环境变量 的来源。

以下示例提供了一个起始环境文件

# 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.
# For example, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9001"

根据您的本地部署需要包含任何其他环境变量。..

服务器版本中的新增功能: RELEASE.2024-03-03T17-50-39Z

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

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

  • **未**定义

    • MINIO_ROOT_USER 变量

    • MINIO_ROOT_PASSWORD 变量

  • :

在启动时满足这些条件时,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 服务不会在主机重启时自动启动。您必须使用 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:9001 http://127.0.0.1:9001
RootUser: myminioadmin
RootPass: minio-secret-key-change-me

Command-line: http://min-io.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: http://min-io.cn/docs/minio/linux/index.html

API 块列出了客户端可以访问 MinIO S3 API 的网络接口和端口。Console 块列出了客户端可以访问 MinIO Web 控制台的网络接口和端口。

5) 连接到 MinIO 服务

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

使用在指定给容器的环境文件中配置的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 登录。

MinIO Console displaying Buckets view in a fresh installation

您可以使用 MinIO 控制台执行一般管理任务,例如身份和访问管理、指标和日志监控或服务器配置。每个 MinIO 服务器都包含其自己的嵌入式 MinIO 控制台。

如果您的本地主机防火墙允许外部访问控制台端口,则同一网络上的其他主机可以使用本地主机的 IP 或主机名访问控制台。

您可以使用MinIO 客户端mc)通过终端或 Shell 访问 MinIO 部署。有关安装mc的说明,请参阅MinIO 客户端安装快速入门

创建一个对应于 MinIO 部署的新别名。指定 MinIO 服务器API块中的任何主机名或 IP 地址,例如http://127.0.0.1:9000

mc alias set myminio http://127.0.0.1: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 部署。