部署 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 -dt docker 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: 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/container/index.html
容器网络可能无法在主机之外访问
“API
” 和 “CONSOLE
” 模块可能包含容器的网络接口。容器网络外部的客户端无法使用这些地址访问 MinIO API 或控制台。
外部访问需要使用容器主机机器的网络地址,并假设主机防火墙允许访问相关端口(示例中的 9000
和 9090
)。
5) 连接到 MinIO 服务
您可以通过在您喜欢的浏览器中输入 http://127.0.0.1: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 http://127.0.0.1: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 部署。