单节点多硬盘部署MinIO
本页面的步骤介绍了如何以单节点多驱动器(SNMD)配置部署MinIO。 SNMD 部署提供了驱动器级别的可靠性以及故障转移/恢复功能,但由于单个节点的限制,会对性能和扩展性产生限制。
对于生产环境,MinIO强烈推荐使用MinIO Kubernetes Operator来部署多节点多硬盘(MNMD)或“Distributed”租户。
先决条件
存储需求
以下要求概述了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
挂载您的驱动器,其中n
从1
开始,每增加一个驱动器就递增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最新稳定镜像
选择 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主机,请指定一个类似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
variableMINIO_ROOT_PASSWORD
variable
Have:
使用 支持的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
所需的 options。
将命令复制到文本文件中,以便进一步修改。
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
指定任何其他 options。
对于以无根模式运行Docker,您可能需要设置以下附加的Docker CLI选项:
- Linux
--user $(id -u):$(id -g)
- 指示容器以当前登录的用户身份运行。- Windows
--security-opt credentialspec=file://path/to/file.json
- 指示容器使用Windows 组管理服务帐户 运行。
以下表格描述了命令的每一行,并提供了额外的配置说明:
Line |
描述 |
---|---|
podman run -dt docker run -dt |
指示 Podman/Docker 使用伪 TTY ( |
|
将本地计算机上的端口 |
|
将本地计算机上的存储卷
在命令中包含额外的 |
|
将上一步创建的环境变量配置文件挂载到容器上的 MinIO服务器使用此环境变量配置文件进行配置。 |
|
设置一个MinIO环境变量,指向容器挂载的环变变量配置文件的路径。 |
|
为容器设置一个自定义名称。 省略此值,让Podman/Docker自动生成容器名称。 您可以替换这个值,以最好地反映您的需求。 |
|
使用之前步骤中拉取的 如果您修改了这个值,请确保使用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://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/container/index.html
Container Networks May Not Be Accessible Outside of the Host
API
和 CONSOLE
块可能包含容器的网络接口。
外部客户端无法使用这些地址访问MinIO API或控制台。
外部访问需要使用容器宿主机的网络地址,并假设宿主防火墙允许访问相关端口(在本例中是 9000
和 9001
)。
5) 连接到MinIO服务
您可以通过在首选浏览器中输入 http://localhost:9001 来访问MinIO Web控制台。 任何对本地主机上的MinIO控制台端口的流量都将重定向到容器。
使用配置为容器的环变量配置文件中的
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
登录。![]()
您可以使用MinIO控制台进行一般管理任务,如身份和访问管理、指标和日志监控或服务器配置。每个MinIO服务器都包含其自己的嵌入式MinIO控制台。
如果您的本地主机防火墙允许外部访问控制台端口,则同一网络上的其他主机可以使用您的本地主机的IP地址或主机名访问控制台。
你可以使用终端或Shell访问MinIO部署,请参考以下文档 MinIO客户端 (mc
).
See MinIO客户端安装快速入门 for instructions on installing mc
.
使用下面的命令 alias
可创建一个新的mc连接,连接对应于的MinIO部署的S3服务器。
使用本地计算机的主机名或IP地址以及S3 API端口 9000
来访问MinIO部署。
任何对本地主机上该端口的流量都将重定向到容器。
mc alias set minio-alias http://localhost:9000 myminioadmin minio-secret-key-change-me
将
minio-alias
替换为为此部署创建的别名。用为容器指定的环境文件中的
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
值替换myminioadmin
和minio-secret-key-change-me
。
如果容器正在指定的端口运行且可访问,则该命令应返回成功。
您可以使用任何 mc
命令与容器进行交互。
如果您的本地主机防火墙允许外部访问MinIO S3 API端口,同一网络上的其他主机可以使用您本地主机的IP或主机名访问MinIO部署。