linux下的分布式Minio部署实践

Linux下的分布式Minio部署实践

分布式Minio部署可以将多块硬盘(位于相同机器或者不同机器)组成一个对象存储服务,避免单机环境下硬盘容量不足、单点故障等问题。

1. 简介

在当前的云计算和大数据时代,IT系统通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助搭建一个高可靠、高可用、弹性扩展的对象存储服务。

分布式部署,minio拓扑为Multi-Node Multi-Drive (MNMD), 即多个节点,每个节点有多个磁盘。可用于如下场景:

  • 企业级的高性能对象存储。

  • 多节点/多硬盘级别的可靠性,可配置容忍最多 1/2 节点或硬盘的损失。

  • 用于AI/ML、分布式查询、分析以及其他数据湖组件的主要存储。

  • 可扩展到 PB 级别的工作负载,具备存储容量和性能的双重扩展能力。

2. minio的数据保护机制

2.1 Erasure Code(纠删码)

Minio 使用 Erasure Code 提供数据的冗余:

  • 分布式 Minio 采用Erasure Code来防范多个节点宕机和位衰减。
  • 分布式 Minio 至少需要 4 个节点(4台服务器),使用分布式 Minio 就会自动启用纠删码功能。
  • Erasure Code 是一种恢复丢失和损坏数据的数学算法, Minio 采用 Reed-Solomon Code 将对象拆分成 N/2 数据 和 N/2 奇偶校验块。MinIO 在 N / 2 个数据盘 和 N / 2 个奇偶校验盘上分片对象。这就意味着如果是12块盘, 一个对象会被分成6个数据块、6个奇偶校验块, 可以丢失任意6块盘的情况下(不管其是存放的数据块还是奇偶校验块), 仍可以从剩下的盘中的数据进行读取和恢复。
  • Minio 纠删码是作用在对象级别,可以一次恢复一个对象,而RAID 是作用在卷级别,数据恢复时间很长。Minio 对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。

erasure-code

  • DataDrives : 纠删码中的数据盘,用来存储 Object 原始数据。
  • ParityDrives: 纠删码中的校验盘,用来存储 Object 计算出来的校验数据。
  • Minio 纠删码的默认配置为 1 : 1, 即数据盘 ( DataDrives )和 校验盘 ( ParityDrives ) 个数相同, 使用minio分布式部署最终真正可用的存储空间,只有所有磁盘总空间的一半大小。
  • 一个 ErasureCode 组/ Sets 中有多个 Drive(DataDrives + ParityDrives), Minio 会先将一块 Block 按照 Drives 数量, 划分为多个小块, 这些小块在 Minio 中叫做 Shards。比如一个 Block 是 10MB, 而 Set 里有 16 个 Drive(8 DataDrives + 8 ParityDrives), 此时 Minio 会将 Block 按照 10 MB / 8 DataDrives 的方式,将数据划分到 8 个 Data Shards,并额外再创建 8 个 空 Shards,用来存储编码后的冗余数据。
  • 接着 Minio 就会对 Data Shards 进行纠删码编码, 并将编码后的冗余数据存储到前面创建的 8 个空 Shards 中, 也就是 parity shards 中。

Architecture-minio-distributed

2.2 数据保护

分布式 MinIO 使用 Erasure Code 提供针对 多个节点/驱动器 故障 和 Bit Rot 保护。

  • 由于分布式 MinIO 所需的 最小磁盘为 4(与擦除编码所需的最小磁盘相同), 因此在您启动分布式 MinIO 时,擦除代码会自动启动。
  • 因此 只要 m / 2 个服务器 或 m * n / 2 个或更多磁盘在线, 具有 m个服务器 和 n个磁盘 的分布式 MinIO 设置将使您的数据安全。 ( M 表示 服务器总数, N 表示 数据库盘 总数 )
  • Erasure Code 是用来保证 Object 的每个 Block 的数据正确和可恢复的, 而 Bitrot 技术是用来检验磁盘数据的正确性的。
  • Erasure Code 技术比较复杂, 但是 Bitrot 技术就比较简单了。本质就是在写数据之前, 先计算好数据的 hash, 然后将 hash 先写入磁盘, 再写入需要存储的数据。这样读取数据时,就可以通过重新计算 hash,和原始写入的 hash进行一致性比较,来判断数据是否有损坏。
  • 上传文件时,Minio 不是直接上传到 object 在磁盘的最终存储目录的,而是先写到一个临时目录,等所有数据都写到临时目录后,Minio 才会进行 rename 操作,将 object 数据存储到最终存储目录。

3. 部署分布式Minio

3.1 环境准备

机器准备
hostname os 配置 ip disk
minioserver1 centos7.9 8C32G 192.168.1.10 vdb,vdc,vdd,vde
minioserver2 centos7.9 8C32G 192.168.1.11 vdb,vdc,vdd,vde
minioserver3 centos7.9 8C32G 192.168.1.12 vdb,vdc,vdd,vde
minioserver4 centos7.9 8C32G 192.168.1.13 vdb,vdc,vdd,vde
  1. 各节点按照上表信息完成基础配置。
  2. 各节点配置ntp服务,确保时间同步。
  3. 各节点关闭防火墙或者放行9000和9001端口:
firewall-cmd --permanent --zone=public --add-port=9000-9001/tcp
firewall-cmd --reload
磁盘和挂载点准备

本文以4节点的分布式Minio为例,每个节点4块盘为例。将4块盘分别挂载到4个节点上,并在每个节点上创建目录。

  1. 格式化磁盘并配置挂载点
]# cat disk-mount.sh
#!/bin/bash
mkfs.xfs /dev/vdb -L DISK1
mkfs.xfs /dev/vdc -L DISK2
mkfs.xfs /dev/vdd -L DISK3
mkfs.xfs /dev/vde -L DISK4


mkdir -p /data/minio/data0{
   1..4}

cat >> /etc/fstab <<-EOF
LABEL=DISK1      /data/minio/data01         xfs     defaults,noatime  0       2
LABEL=DISK2      /data/minio/data02         xfs     defaults,noatime  0       2
LABEL=DISK3      /data/minio/data03         xfs     defaults,noatime  0       2
LABEL=DISK4      /data/minio/data04         xfs     defaults,noatime  0       2
EOF

mount -a

在4个节点依次执行上述脚本sh disk-mount.sh,确保硬盘挂载到相应目录:

]# lsblk -f
NAME   FSTYPE  LABEL    UUID                                 MOUNTPOINT
### 分布式 MinIO 集群部署指南 #### 准备工作 为了成功部署分布式 MinIO 集群,需准备多个服务器节点并确保这些节点之间可以相互通信。通常建议至少四个节点来构建高可用性的存储解决方案。 #### 安装 MinIO Server 在每个计划作为 MinIO 节点的机器上安装 MinIO server 是必要的。可以通过官方提供的二进制文件快速完成此操作: ```bash wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/ ``` 上述命令下载最新版本的 MinIO 并将其移动到系统的 PATH 中以便全局访问[^1]。 #### 初始化分布式集群 一旦所有节点都已准备好并且能够互相通信,则可以在其中一个节点执行如下初始化命令启动分布式模式下的 MinIO 实例: ```bash export MINIO_ROOT_USER=<access-key> export MINIO_ROOT_PASSWORD=<secret-key> minio server http://<node1-ip>/data http://<node2-ip>/data http://<node3-ip>/data http://<node4-ip>/data ``` 这里 `<access-key>` 和 `<secret-key>` 表示用于身份验证的密钥;`http://<nodeX-ip>/data` 则指定了各个参与分布式的节点地址及其挂载路径。 #### 自动化运维工具 Helm 的使用 对于 Kubernetes 用户来说,Helm 提供了一种简便的方法来管理和部署复杂的应用程序和服务。创建自定义 chart 或者利用现有的稳定仓库中的模板可以帮助简化这一过程。例如,通过 `helm create deis-workflow` 命令即可生成一个新的 Chart 结构框架[^3]。 然而值得注意的是,在实际生产环境中配置和优化分布式系统可能涉及更多细节和技术考量,因此强烈推荐深入研究官方文档以及社区资源获取最佳实践指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值