部署 MinIO:单节点多驱动器
本页面的步骤涵盖在单节点多驱动器 (SNMD) 配置中部署 MinIO。SNMD 部署提供驱动器级可靠性和故障转移/恢复,但单个节点会限制性能和扩展能力。
对于生产环境,MinIO 强烈建议使用 MinIO Kubernetes 运算符来部署多节点多驱动器 (MNMD) 或“分布式”租户。
先决条件
存储要求
以下要求总结了 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 中内存分配的更多指导,请参阅 内存。
部署单节点多驱动器 MinIO
以下步骤部署由单个 MinIO 服务器和多个驱动器或存储卷组成的 MinIO。
1) 拉取 MinIO 的最新稳定映像
选择 Podman 或 Docker 的标签以查看拉取 MinIO 容器映像的说明。说明中包括 quay.io 和 DockerHub 的示例。
- quay.io
podman pull quay.io/minio/minio
- DockerHub
podman pull docker://minio/minio
- quay.io
docker pull quay.io/minio/minio
- DockerHub
docker pull docker://minio/minio
2) 创建环境变量文件
在 /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 Release 2024-03-01T18-06-46Z 或更高版本正在运行
**未** 定义
MINIO_ROOT_USER变量MINIO_ROOT_PASSWORD变量
已:
使用 受支持的 KMS 目标 设置 KES
使用 MinIO 环境变量 禁用了根访问权限
当启动时满足这些条件时,MinIO 使用 KMS 使用 基于哈希的消息认证码 (HMAC) 为部署生成唯一的根凭据。
如果 MinIO 生成此类凭据,用于生成凭据的密钥**必须**保持相同,*并且* 必须继续存在。部署上的所有数据都使用此密钥加密!
要轮换生成的根凭据,请在 KMS 中生成一个新密钥,然后使用新密钥更新 MINIO_KMS_KES_KEY_NAME 的值。
3) 创建并运行容器
选择您选择的容器管理界面以获取相关的命令语法。
将命令复制到文本文件中以供进一步修改。
podman run -dt \
-p 9000:9000 -p 9001:9001 \
-v PATH1:/data-1 \
-v PATH2:/data-2 \
-v PATH3:/data-3 \
-v PATH4:/data-4 \
-v /etc/default/minio:/etc/config.env \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
--name "minio_local" \
minio server --console-address ":9001"
根据您的本地环境需要指定任何其他 选项 到 podman run。
将命令复制到文本文件中以供进一步修改。
docker run -dt \
-p 9000:9000 -p 9001:9001 \
-v PATH1:/data-1 \
-v PATH2:/data-2 \
-v PATH3:/data-3 \
-v PATH4:/data-4 \
-v /etc/default/minio:/etc/config.env \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
--name "minio_local" \
minio server --console-address ":9001"
根据您的本地环境需要指定任何其他 选项 到 docker run。
对于在无根模式下运行 Docker,您可能需要设置以下其他 Docker CLI 选项
- Linux
--user $(id -u):$(id -g)- 指示容器以当前登录的用户身份运行。- Windows
--security-opt "credentialspec=file://path/to/file.json"- 指示容器使用 Windows 组托管服务帐户 运行。
下表描述了命令的每一行,并提供了额外的配置说明
行 |
说明 |
|---|---|
podman run -dtdocker run -dt |
指示 Podman/Docker 以分离 ( |
|
将本地机器上的端口 |
|
将本地机器上的存储卷
包括其他 |
|
将上一步中创建的环境文件挂载到容器上的 MinIO 服务器使用此环境文件进行配置。 |
|
设置一个指向环境文件的容器挂载路径的 MinIO 环境变量。 |
|
为容器设置一个自定义名称。省略此值以允许 Podman/Docker 自动生成容器名称。您可以替换此值以最好地反映您的需求。 |
|
使用从早期步骤中拉取的 如果您修改此值,请确保使用 |
4) 验证容器状态
运行以下命令从容器中检索日志。将容器名称替换为上一步中指定给 --name 的值。
podman logs minio
该命令应返回类似于以下内容的输出
运行以下命令从容器中检索日志。将容器名称替换为上一步中指定给 --name 的值。
docker logs minio
该命令应返回类似于以下内容的输出
Status: 1 Online, 0 Offline.
API: http://10.0.2.100:9000 http://127.0.0.1:9000
RootUser: myminioadmin
RootPass: minio-secret-key-change-me
Console: http://10.0.2.100:9001 http://127.0.0.1:9001
RootUser: myminioadmin
RootPass: minio-secret-key-change-me
Command-line: https://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: https://min-io.cn/docs/minio/container/index.html
容器网络可能无法在主机之外访问
“API” 和 “CONSOLE” 模块可能包含容器的网络接口。容器网络外部的客户端无法使用这些地址访问 MinIO API 或控制台。
外部访问需要使用容器主机机器的网络地址,并假设主机防火墙允许访问相关端口(示例中的 9000 和 9090)。
5) 连接到 MinIO 服务
您可以通过在您喜欢的浏览器中输入 https://:9001 来访问 MinIO Web 控制台。所有到本地主机上 MinIO 控制台端口的流量都会重定向到容器。
使用在指定给容器的环境文件中配置的 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 登录。
您可以使用 MinIO 控制台执行一般管理任务,例如身份和访问管理、指标和日志监控或服务器配置。每个 MinIO 服务器都包含其自己的嵌入式 MinIO 控制台。
如果您的本地主机防火墙允许外部访问控制台端口,则同一网络上的其他主机可以使用本地主机的 IP 或主机名访问控制台。
您可以使用 MinIO 客户端 (mc) 通过终端或 Shell 访问 MinIO 部署。有关安装 mc 的说明,请参阅 MinIO 客户端安装快速入门。
创建一个对应于 MinIO 部署的新 alias。使用本地机器的主机名或 IP 地址以及 S3 API 端口 9000 来访问 MinIO 部署。所有到本地主机上该端口的流量都会重定向到容器。
mc alias set minio-alias https://:9000 myminioadmin minio-secret-key-change-me
将
minio-alias替换为要为此部署创建的别名。将
myminioadmin和minio-secret-key-change-me替换为在指定给容器的环境文件中配置的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD值。
如果容器正在运行并且可以在指定的端口访问,则该命令应返回成功。
然后,您可以使用任何 mc 命令与容器交互。如果您的本地主机防火墙允许外部访问 MinIO S3 API 端口,则同一网络上的其他主机可以使用本地主机的 IP 或主机名访问 MinIO 部署。