跳到主要内容

多节点安装使用

多种安装方式

https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

多节点多驱动部署

  • 多节点: 多节点意味着MinIO在多个物理或虚拟服务器上运行。每个节点都可以处理数据存储和请求处理。通过将工作负载分散到多个节点上,可以提高系统的性能和可用性。如果其中一个节点出现故障,其他节点仍然可以继续提供服务,从而实现容错性。
  • 多驱动: 多驱动表示每个MinIO节点上都有多个驱动器(硬盘或其他存储介质),用于存储数据。这使得每个节点都能够提供更大的存储容量,并且分布数据以实现更好的性能和负载均衡。

安装前提

网络防火墙

  • 为了方便最好关闭防火墙,要么执行下面的命令放开对应的端口。

关闭防火墙

sudo systemctl stop firewalld

或者打开对应的通信端口,例如,以下命令显式打开运行firewalld的服务器的默认MinIO服务器API端口9000

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

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

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

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

已知以下负载均衡器与 MinIO 配合良好:

  • NGINX

  • HA代理

配置防火墙或负载平衡器以支持 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 存储

选做,可以弄一个/data数据盘进行存储,避免使用/直接存储,因为/不太好扩展,加数据存储盘好扩展些。

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

  • 与网络存储(NAS、SAN、NFS)相比,直连存储 (DAS) 具有显着的性能和一致性优势。
  • 使用非 XFS 文件系统(ext4、btrfs、zfs)的部署往往性能较低,同时会出现意外或不需要的行为。
  • 当与分布式 MinIO 部署一起使用时,RAID 或类似技术不会提供额外的弹性或可用性优势,并且通常会降低系统性能。

确保部署中的所有节点使用具有相同容量(例如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

时间同步

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

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

注意事项

同节点配置

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 服务器时,存储设备不得有现有数据

一旦启动 MinIO 服务器,所有与数据的交互都必须通过 S3 API 完成。使用MinIO Client、MinIO Console或 MinIO软件开发套件之一来处理存储桶和对象

安装

MinIO是一个轻量级的开源对象存储系统,其架构相对简单,使用操作系统的文件系统作为存储介质。在分布式部署中,MinIO可以通过构建多节点集群来实现高可用性和数据保护。

  1. Erasure Code 纠删码 机制: MinIO使用Erasure Code来保障集群的数据可用性和稳定性。在数据写入时,MinIO会自动同步数据到其他节点,以确保数据的冗余存储。这使得即使部分节点宕机,数据仍然可以恢复和访问。

  2. 最小节点数要求: 在一个N节点的分布式MinIO中,只要有N/2节点在线,数据就被认为是安全的,即数据的冗余备份足够。但为了确保集群可写入新数据,至少需要N/2+1个节点在线。例如,一个4节点的集群需要至少3个节点在线才能写入数据。

  3. 节点数与数据安全性关系: 建议至少使用4个节点来构建MinIO集群,因为这样即使2个节点宕机,数据仍然是可读的。为了保证集群写入数据,至少需要3个节点在线。这种设置提供了更高的数据冗余和容错性。

  4. 纠删码限制: 在早期版本中,每个租户最少需要4个盘,最多16个盘,这是Erasure Code的限制。但在新版本中,这个限制被移除。

  5. 多租户支持: 要实现多租户,可以借助Kubernetes构建多个MinIO实例,或者在不同节点上启动多个MinIO实例。一个进程对应一个实例,一个实例对应一个租户,从而实现不同租户之间的隔离和管理。

总之,MinIO以其轻量级的特点和灵活的架构为用户提供了强大的对象存储解决方案。通过分布式部署和Erasure Code机制,MinIO保障了数据的高可用性、冗余备份和稳定性,适用于各种规模的存储需求。

我们这次实验由下面这四台机器构成:

机器资源挂载磁盘路径
192.168.159.137/data/minio_data
192.168.159.138/data/minio_data
192.168.159.139/data/minio_data
192.168.159.140/data/minio_data
mkdir /data/minio_data

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

修改主机名

每台机器分别执行修改hostname

hostnamectl set-hostname minio1;

然后修改dns

cat >> /etc/hosts << EOF
192.168.159.137 minio1
192.168.159.138 minio2
192.168.159.139 minio3
192.168.159.140 minio4
EOF

修改系统限制

// 设置用户可以同时运行的进程数的最大限制和文件打开限制(系统级别的配置)
sudo vim /etc/security/limits.conf

root soft nofile 65536
root hard nofile 65536
root soft nproc 131072
root hard nproc 131072
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072


// 设置用户可以同时运行的进程数的最大限制和文件打开限制(个性化的配置)
sudo vim /etc/security/limits.d/20-nproc.conf

root soft nofile 65536
root hard nofile 65536
root soft nproc 131072
root hard nproc 131072
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

ulimit -n #查看最大连接数
ulimit -a

创建minio启动脚本和配置文件目录

mkdir -p /data/minio/run && mkdir -p /etc/minio

下载minio到/data/minio/run目录下

cd /data/minio/run && wget https://dl.min.io/server/minio/release/linux-amd64/minio

参考

https://blog.51cto.com/u_10950710/4843738

https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html