先决条件

网络和防火墙

每个节点都应具有对部署中每个其他节点的完全双向网络访问权限。对于容器化或编排的基础架构,这可能需要特定的网络配置和路由组件,例如入口或负载平衡器。某些操作系统可能还需要设置防火墙规则。例如,以下命令显式地为运行 firewalld 的服务器打开默认的 MinIO 服务器 API 端口9000

firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload

部署中的所有 MinIO 服务器必须使用相同的监听端口。

如果您设置静态 MinIO 控制台端口(例如:9001),您还必须授予对该端口的访问权限以确保来自外部客户端的连接。

MinIO强烈建议使用负载均衡器来管理与集群的连接。负载均衡器应该使用“最少连接”算法将请求路由到 MinIO 部署,因为部署中的任何 MinIO 节点都可以接收、路由或处理客户端请求。

已知以下负载均衡器可以很好地与 MinIO 配合使用:

  • NGINX
  • HAProxy

配置防火墙或负载平衡器以支持 MinIO 超出了此过程的范围。参考MinIO 集成 Nginx 代理 提供了使用 NGINX 作为配置了基本负载平衡的反向代理的基线配置。

顺序主机名

MinIO 需要在创建服务器池时使用扩展符号{x...y}来表示一系列连续的 MinIO 主机。因此,MinIO需要 使用按顺序编号的主机名来表示 部署中的每个进程。minio server

在开始此过程之前创建必要的 DNS 主机名映射。例如,以下主机名将支持 4 节点分布式部署:

  • minio1.example.com

  • minio2.example.com

  • minio3.example.com

  • minio4.example.com

您可以使用扩展符号指定整个主机名范围 minio{1...4}.example.com

配置 DNS 以支持 MinIO 超出了此过程的范围。

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

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

  • 与网络存储(NAS、SAN、NFS)相比,直连存储 (DAS) 具有显着的性能和一致性优势。

  • 使用非 XFS 文件系统(ext4、btrfs、zfs)的部署往往性能较低,同时会出现意外或不良行为。

  • RAID 或类似技术在与分布式 MinIO 部署一起使用时不会提供额外的弹性或可用性优势,并且通常会降低系统性能。

确保部署中的所有节点都使用具有相同容量(例如NTB)的相同类型(NVMe、SSD 或 HDD)的驱动器。MinIO 不区分驱动器类型,也不受益于混合存储类型。此外。MinIO 将每个驱动器使用的大小限制为部署中的最小驱动器。例如,如果部署有 15 个 10TB 驱动器和 1 个 1TB 驱动器,MinIO 将每个驱动器的容量限制为 1TB。

MinIO要求在创建新部署时使用扩展符号{x...y}来表示一系列连续的驱动器,其中部署中的所有节点都有一组相同的已安装驱动器。MinIO 还要求物理驱动器的顺序在重启后保持不变,这样给定的挂载点总是指向相同格式的驱动器。因此,MinIO强烈建议使用/etc/fstab或类似的基于文件的挂载配置,以确保驱动器顺序在重启后不会更改。例如:

$ mkfs.xfs /dev/sdb -L DISK1
$ mkfs.xfs /dev/sdc -L DISK2
$ mkfs.xfs /dev/sdd -L DISK3
$ mkfs.xfs /dev/sde -L DISK4

$ nano /etc/fstab

  # <file system>  <mount point>  <type>  <options>         <dump>  <pass>
  LABEL=DISK1      /mnt/disk1     xfs     defaults,noatime  0       2
  LABEL=DISK2      /mnt/disk2     xfs     defaults,noatime  0       2
  LABEL=DISK3      /mnt/disk3     xfs     defaults,noatime  0       2
  LABEL=DISK4      /mnt/disk4     xfs     defaults,noatime  0       2

然后您可以使用扩展符号指定整个驱动器范围 /mnt/disk{1...4}。如果要在每个驱动器上使用特定的子文件夹,请将其指定为/mnt/disk{1...4}/minio.

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

网络文件系统卷破坏一致性保证

  • MinIO 严格的先写后读和先写后列表一致性模型需要本地驱动器文件系统。
  • 如果底层存储卷是 NFS 或类似的网络附加存储卷,则 MinIO 无法提供一致性保证。
  • 对于需要使用网络附加存储的部署,请使用 NFSv4 以获得最佳效果。
时间同步

多节点系统必须保持同步的时间和日期,以保持稳定的节点间操作和交互。确保所有节点定期同步到同一时间服务器。操作系统因用于同步时间和日期的方法而异,例如使用ntptimedatectltimesyncd

查看操作系统的文档,了解如何跨节点设置和维护准确且相同的系统时钟时间。

注意事项

同类节点配置

MinIO 强烈建议为部署中的所有节点选择基本相似的硬件配置。确保硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)在所有节点上保持一致。

如果节点具有异构硬件或软件配置,部署可能会表现出不可预测的性能。受益于在低成本硬件上存储陈旧数据的工作负载应该改为部署专用的“热”或“冷”MinIO 部署并将数据传输 到该层。

纠删码奇偶校验

MinIO擦除编码是一种数据冗余和可用性功能,它允许 MinIO 部署在集群中丢失多个驱动器或节点的情况下自动即时重建对象。与 RAID 或复制等相邻技术相比,纠删码提供对象级修复,开销更少。分布式部署隐式启用并依赖擦除编码来实现核心功能。

擦除编码将对象拆分为数据和奇偶校验块,其中奇偶校验块支持重建丢失或损坏的数据块。部署中奇偶校验块的数量控制部署的相对数据冗余。更高级别的奇偶校验以总可用存储为代价允许更高的驱动器丢失容忍度。

MinIO 默认为EC:4,或每个 擦除集4 个奇偶校验块。您可以通过设置适当的MinIO 存储类环境变量来设置自定义奇偶校验级别 。考虑使用 MinIO 纠删码计算器作为指导,为您的集群选择合适的纠删码奇偶校验级别。

基于能力的规划

MinIO 通常建议规划容量,以便 仅在部署正常运行 2 年以上后才需要扩展服务器池。

例如,考虑估计每年产生 10TB 数据的应用程序套件。MinIO 部署应至少提供:

10TB + 10TB + 10TB  = 30TB

MinIO 建议添加缓冲存储以应对存储数据的潜在增长(例如 40TB 的总可用存储)。作为经验法则,最初更多的容量比频繁的即时扩展更能满足容量需求。

由于 MinIO擦除编码需要一些存储用于奇偶校验,因此总原始存储必须超过计划的可用 容量。考虑使用 MinIO纠删码计算器作为围绕特定纠删码设置规划容量的指导。

推荐的操作系统

本教程假设所有运行 MinIO 的主机都使用 推荐的 Linux 操作系统 ,例如 RHEL8+Ubuntu 18.04+

预先存在的数据

在分布式环境中启动新的 MinIO 服务器时,存储设备不能有现有数据。

启动 MinIO 服务器后,所有与数据的交互都必须通过 S3 API 完成。使用MinIO Client、MinIO Console或 MinIO Software Development Kits之一来处理桶和对象。

警告
修改后端驱动器上的文件可能会导致数据损坏或数据丢失。

作者:Jeebiz  创建时间:2023-02-17 13:26
最后编辑:Jeebiz  更新时间:2024-08-02 11:04