MinIO(二)部署

548 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。​

语法

minio server [FLAGS] HOSTNAME/DIRECTORIES [HOSTNAME/DIRECTORIES..]

  • DIRECTORIES 在第一次启动时必须为空。
  • 必须在服务器池中的每台主机上使用 HOSTNAME 或 DIRECTORIES 一样的组合运行 minio server 命令。 如下面这种将将HOSTNAME和DIRECTORIES 混用语法是不合理的: minio.exe server http://minio.expmple.com:9000/D:/minio/data D:/minio/data1 --address :9000 --console-address :8000
  • HOSTNAME 支持 MinIO 扩展符号``{x…y}`` 来表示一系列连续的主机名。DIRECTORIES也同理。 每个 “HOSTNAME/DIRECTORIES” 都表示一个服务器池(Server Pool),额外添加服务器池可用于 MinIO 部署的水平扩展。
  • Minio 默认根用户名、密码、AccesseKey、SecretKey均是minioadmin,安全起见,建议修改以下环境变量: set MINIO_ROOT_USER = %MINIO_ROOT_USER% set MINIO_ROOT_PASSWORD = %MINIO_ROOT_PASSWORD% set MINIO_ACCESS_KEY = %MINIO_ACCESS_KEY% set MINIO_SECRET_KEY = %MINIO_SECRET_KEY%

其中, HOSTNAME/DIRECTORIES 可以用环境变量MINIO_VOLUMES集中管理 或者使用配置文件设置环境变量 set MINIO_CONFIG_ENV_FILE=D:/minio/minio.service

# Set the hosts and volumes MinIO uses at startup
MINIO_VOLUMES="https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio https://minio{5...12}.example.net:9000/mnt/disk{1...8}/minio"

# MinIO server options
MINIO_OPTS="--console-address :9001"

# 根用户账号名
MINIO_ROOT_USER=minioadmin

# 根用户密码
MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME

# 在没有负载均衡器的情况下选用一个节点作为临时解决方案
MINIO_SERVER_URL="https://minio.example.net:9000"

注意

minio server 进程需要至少 4 个驱动器或目录才能启用 erasure coding.

MinIO 推荐本地连接的驱动器,其中 DIRECTORIES 路径指向每个磁盘主机。 MinIO 反对使用网络附加 存储,因为网络存储与本地附加存储相比,网络延迟会降低这些驱动器的性能 。 MinIO 强烈建议使用具有 XFS 格式磁盘的直连 JBOD(just a bunch of disks,简单磁盘捆绑) 阵列,以获得最佳性能。

JBOD,通过把多个驱动器合并成一个大的逻辑磁盘

对于生产环境,MinIO 不推荐在单个物理磁盘上使用多个逻辑目录或分区。 虽然 MinIO 支持这些配置,但潜在的成本节约会带来可靠性降低的风险。

部署方式

  • 单机部署

    • minio.exe server D:/minio/data1 --address :9000 --console-address :8000
  • 分布式部署

    • 分布式Minio部署由 4 个或更多驱动器/卷组成(4-16的整数倍)。
    • 由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
    • 分布式部署隐式启用纠删码,这是 MinIO 的数据冗余和可用性功能,允许部署在群集中丢失多个驱动器或节点的情况下自动动态重建对象。纠删码提供了对象级修复,与相邻技术(如 RAID 或复制)相比,开销更少。
    • minio.exe server http://minio.expmple{1...4}.com:9000/D:/minio/data --address :9000 --console-address :8000 上面的例子描述了一个单一的服务器池 4 个minio server,每个节点1 个驱动器,总共 4 个驱动器。 MinIO 需要启动每个minio server在同一套 启动命令以启用所有设置对等点的感知。

image

MinIO集群采用去中心化无共享架构,各节点间为对等关系,连接至任一节点均可实现对集群的访问。所以==需要搭配nginx或故障转移群集实现负载均衡==。

MinIO分布式模式可以搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

MinIO集群节点只会复制客户端的删除操作,并不会复制由于生命周期管理过期规则而删除的对象。

4. 扩展分布式MinIO部署

image

添加的每个集群池必须具有与原始集群池相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA(Service-Level Agreement)。 例如,第一个集群池有8个磁盘,就可以将集群扩展为16个、32个或1024个磁盘的集群池,只需确保部署的SLA是原始集群池的倍数即可。

先决条件

顺序主机名

在创建新服务器池时,MinIO需要使用扩展表示法来表示一系列连续的磁盘,其中服务器池中的所有节点都具有一组相同的已装入驱动器。MinIO 还要求物理磁盘的顺序在重新启动后保持不变,以便给定的装入点始终指向同一格式化的磁盘。因此,MinIO 强烈建议使用或类似的基于文件的装载配置,以确保驱动器顺序在重新启动后不会更改。例如:{x...y}/etc/fstab

具有顺序装载的本地 JBOD 存储

MinIO 强烈建议使用具有 XFS 格式磁盘的直连 JBOD 阵列,以获得最佳性能。

  • 与网络存储(NAS、SAN、NFS)相比,直连存储 (DAS) 具有显著的性能和一致性优势。
  • 使用非 XFS 文件系统(ext4、btrfs、zfs)的部署往往性能较低,同时表现出意外或不希望的行为。
  • RAID 或类似技术在与分布式 MinIO 部署一起使用时不会提供额外的弹性或可用性优势,并且通常会降低系统性能。
  • 确保服务器池中的所有节点都使用具有相同容量(例如 TB)的相同类型(NVMe、SSD 或 HDD)的驱动器 。MinIO 不区分驱动器类型,也不会从混合存储类型中受益。此外。MinIO 将每个磁盘使用的大小限制为部署中最小的驱动器。

在创建新服务器池时,MinIO 需要使用扩展表示法来表示一系列连续的磁盘,其中服务器池中的所有节点都具有一组相同的已装入驱动器。MinIO 还要求物理磁盘的顺序在重新启动后保持不变,以便给定的装入点始终指向同一格式化的磁盘。因此,MinIO 强烈建议使用或类似的基于文件的装载配置,以确保驱动器顺序在重新启动后不会更改。

MinIO 不支持将具有现有 MinIO 数据的驱动器任意迁移到新的挂载位置,无论是有意还是操作系统级行为的结果。

网络文件系统卷中断一致性保证

MinIO 严格的 read-after-write和list-after-write一致性模型需要本地磁盘文件系统(xfs、ext4等) 如果底层存储卷是 NFS 或类似的网络连接存储卷,MinIO 无法提供一致性保证。 对于需要使用网络连接存储的部署,请使用 NFSv4 以获得最佳结果。

用纠删码奇偶校验的最少驱动器数

MinIO 要求每个池都满足部署纠删码设置。具体而言,新的池拓扑必须支持Standard存储类所定义的每个纠删集的最小驱动器数

扩展是无中断的

添加新的服务器池需要同时重新启动部署中的所有MinIO 节点。 MinIO 强烈建议同时重新启动所有节点。MinIO 操作是原子的,并且严格一致。因此,重新启动过程不会中断应用程序和正在进行的操作。 不要执行“滚动”(例如,一次一个节点)重启。

考虑

写入文件

对特定池执行写入操作的概率的公式为 FreeSpaceOnPoolA / FreeSpaceOnAllPools

考虑这样一种情况,一组三个个池总共有 10 TiB 的可用空间,写入几率如下:

Server Pool可用空间写入几率
A3TiB30% (3TiB/10TiB)
B2TiB20% (2TiB/10TiB)
C5TiB50% (5TiB/10TiB)

除了可用空间计算之外,如果写入选项(具有奇偶校验)将使磁盘使用率高于 99% 或已知可用 inode 计数低于 1000,则 MinIO 不会写入池。 同样,MinIO 不会在停用过程中写入池。