文档

部署 MinIO:单节点多驱动器

本页面的步骤涵盖在单节点多驱动器 (SNMD) 配置中部署 MinIO。SNMD 部署提供驱动器级可靠性和故障转移/恢复,但单个节点会限制性能和扩展能力。

对于生产环境,MinIO 强烈建议使用 MinIO Kubernetes 运算符来部署多节点多驱动器 (MNMD) 或“分布式”租户。

先决条件

存储要求

以下要求总结了 MinIO 硬件建议中的存储部分。

使用本地存储

直接连接存储 (DAS) 与网络存储 (NASSANNFS) 相比,具有显著的性能和一致性优势。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 的最新稳定映像

选择 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 变量

  • :

当启动时满足这些条件时,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 以分离 (-d) 后台进程的形式创建并启动容器,并带有一个伪 TTY (-t)。这允许容器在后台运行,并有一个开放的 TTY 用于类似 bash 的访问。

-p 9000:9000 -p 9001:9001

将本地机器上的端口 90009090 绑定到容器上的相同端口。这允许通过本地机器访问容器。

-v PATHx:/mnt/data-x

将本地机器上的存储卷 PATH 绑定到容器上的 /mnt/data-x 路径。将此值替换为本地机器上每个顺序存储卷或文件夹的完整路径。例如

Linux 或 MacOS

/mnt/data-1/

Windows

D:\data\

包括其他 -v 参数,以便为指定给环境文件中的 MINIO_VOLUMES 值的每个驱动器都存在一个挂载。

-v /etc/default/minio:/etc/config.env

将上一步中创建的环境文件挂载到容器上的 /etc/config.env 路径。对于 Windows 主机,请指定 Windows 风格路径 -v C:\minio\config:/etc/config.env

MinIO 服务器使用此环境文件进行配置。

-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"

设置一个指向环境文件的容器挂载路径的 MinIO 环境变量。

--name "minio_local"

为容器设置一个自定义名称。省略此值以允许 Podman/Docker 自动生成容器名称。您可以替换此值以最好地反映您的需求。

minio server --console-address ":9001"

使用从早期步骤中拉取的 minio:minio 映像启动 MinIO 服务器。 minio server --console-address ":9001" 选项指示服务器为 MinIO 控制台 Web 界面设置一个静态端口。此选项对于容器化环境是*必需的*。

如果您修改此值,请确保使用 -p 标志为 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 或控制台。

外部访问需要使用容器主机机器的网络地址,并假设主机防火墙允许访问相关端口(示例中的 90009090)。

5) 连接到 MinIO 服务

您可以通过在您喜欢的浏览器中输入 http://127.0.0.1:9001 来访问 MinIO Web 控制台。所有到本地主机上 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 部署的新 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 替换为要为此部署创建的别名。

  • myminioadminminio-secret-key-change-me 替换为在指定给容器的环境文件中配置的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 值。

如果容器正在运行并且可以在指定的端口访问,则该命令应返回成功。

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