MinIO 分布式集群搭建

MinIO 分布式集群搭建

分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。

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

(1)数据保护

分布式 Minio 采用纠删码(erasure code)来防范多个节点宕机和位衰减(bit rot)。

分布式 Minio 至少需要 3 个节点,使用分布式 Minio 就自动引入了纠删码功能。

纠删码是一种恢复丢失和损坏数据的数学算法, Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

纠删码的工作原理和 RAID 或者复制不同,像 RAID6 可以在损失两块盘的情况下不丢数据,而 Minio 纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且 Minio 纠删码是作用在对象级别,可以一次恢复一个对象,而RAID 是作用在卷级别,数据恢复时间很长。 Minio 对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio 纠删码的设计目标是为了性能和尽可能的使用硬件加速。

位衰减又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。

(2)高可用

单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。

例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过你需要 5 个节点才能写数据。

(3)限制

分布式 Minio 单租户存在最少 4 个盘最多 16 个盘的限制(受限于纠删码)。这种限制确保了 Minio 的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。

注意,只要遵守分布式 Minio 的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用 2 个节点,每个节点 4 块盘,也可以使用 4 个节点,每个节点两块盘,诸如此类。

(4)一致性

Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

搭建分布式集群
启动一个分布式 Minio 实例,你只需要把硬盘位置做为参数传给 minio server 命令即可,然后,你需要在所有其它节点运行同样的命令。

注意

分布式 Minio 里所有的节点需要有同样的 access 秘钥和 secret 秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行 minio server 命令之前,先将 access 秘钥和 secret 秘钥 export 成环境变量。
分布式 Minio 使用的磁盘里必须是干净的,里面没有数据。
下面示例里的 IP 仅供示例参考,你需要改成你真实用到的 IP 和文件夹路径。
分布式 Minio 里的节点时间差不能超过 3 秒,你可以使用 NTP 来保证时间一致。
在 Windows 下运行分布式 Minio 处于实验阶段,不建议用于生产环境。

准备工作

1、集群规划

序号集群节点IP地址数据目录(存储空间)
1Node01172.16.8.123/{data1,data2}
2Node02172.16.8.124/{data1,data2}
3Node03172.16.8.125/{data1,data2}
4Nginx-proxy172.16.8.126Nginx集群代理

2、所有节点配置主机名解析(所有节点操作)

cat >> /etc/hosts << EOF
172.16.8.123 minio-1
172.16.8.124 minio-2
172.16.8.125 minio-3
EOF

3、修改主机名:(所有节点操作)

hostnamectl set-hostname minio-1
hostnamectl set-hostname minio-2
hostnamectl set-hostname minio-3

4、配置同步时间(所有节点操作)

yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

5、系统最大文件数修改(所有节点操作)

echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

6、关闭防火墙和selinux(所有节点操作)

[root@server ~]# systemctl stop firewalld.service
[root@server ~]# systemctl disable firewalld.service
[root@server ~]# setenforce 0
[root@server ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config

7、安装docker(所有节点操作)

[root@server ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@server ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@server ~]# yum -y install docker-ce
[root@server ~]# systemctl enable --now docker

8、部署minio集群,3个节点每个节点挂载2个目录

minio-1节点执行:

docker rm -f minio-1
docker run -d --name minio-1 \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v /minio-data1:/data1 \
-v /minio-data2:/data2 \
-v /minio/minio-ssl/certs/CAs:/root/.minio/certs/CAs \
minio/minio server \
--address 172.16.8.123:9000 \
--console-address ":9090"  \
http://minio-{1...3}/data{1...2}

minio-2节点执行:

docker rm -f minio-2
docker run -d --name minio-2 \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v /minio-data1:/data1 \
-v /minio-data2:/data2 \
-v /minio/minio-ssl/certs/CAs:/root/.minio/certs/CAs \
minio/minio server \
--address 172.16.8.124:9000 \
--console-address ":9090" \
http://minio-{1...3}/data{1...2}

minio-3节点执行:

docker rm -f minio-3
docker run -d --name minio-3 \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v /minio-data1:/data1 \
-v /minio-data2:/data2 \
-v /minio/minio-ssl/certs/CAs:/root/.minio/certs/CAs \
minio/minio server \
--address 172.16.8.125:9000 \
--console-address ":9090" \
http://minio-{1...3}/data{1...2}

说明:docker部署集群模式时必须指定–net=host参数,使用主机网络,使用端口映射无法创建集群。

9、NGINX代理集群

upstream minio{
server  172.16.8.123:9000;
server  172.16.8.124:9000;
server  172.16.8.125:9000;
}
server {
listen 9000;
server_name minio;
location / {
proxy_pass http://minio;
proxy_set_header Host $http_host;
client_max_body_size 1000m;
}
}
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你关于minio分布式搭建的问题。 Minio是一个开源的分布式对象存储服务器,它可以在多个服务器上构建一个高可用的存储集群。以下是搭建Minio分布式存储集群的步骤: 1. 下载Minio二进制文件 首先,你需要下载Minio二进制文件。你可以从Minio官方网站下载适用于你的操作系统的最新版本。 2. 创建配置文件 在每个Minio服务器上,你需要创建一个配置文件。这个配置文件包含了Minio的access key和secret key,以及其他一些配置参数,例如监听地址和存储路径。 3. 启动Minio服务器 在每个Minio服务器上,使用以下命令启动Minio服务器: ``` ./minio server <path-to-data-directory> --config-dir <path-to-config-directory> ``` 其中,`<path-to-data-directory>` 是Minio用于存储数据的目录,`<path-to-config-directory>` 是配置文件所在的目录。 4. 配置分布式模式 在一个Minio服务器上,使用以下命令将其配置为分布式模式: ``` ./minio server http://<server1>:9000 http://<server2>:9000 http://<server3>:9000 ``` 其中,`<server1>`、`<server2>` 和 `<server3>` 是其他Minio服务器的地址。 5. 启动分布式集群 在每个Minio服务器上,使用第3步中的命令启动Minio服务器。在第一个Minio服务器上,使用第4步中的命令将其配置为分布式模式。在其他Minio服务器上,只需要使用第3步中的命令即可。 6. 测试分布式集群 现在,你可以使用Minio客户端或S3工具来测试分布式集群了。你可以上传文件到一个Minio服务器上,然后从另一个Minio服务器上下载它。 以上就是关于minio分布式搭建的步骤。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值