【MinIO】MinIO分布式部署
MinIO分布式部署MinIO简介MinIO是一款高性能的分布式对象存储服务器,专为大规模私有云基础框架而设计。MinIO是一个分布式对象存储服务器,Amazon S3兼容,用Go编写,在Apache License Version 2.0 下开源。MinIO为加密数据提供机密性,完整性和真实性保证,而性能开销可忽略不计。使用AES-256-GCM,ChaCha20-Poly1305和AES-CB
MinIO分布式部署
MinIO简介
MinIO是一款高性能的分布式对象存储服务器,专为大规模私有云基础框架而设计。
MinIO是一个分布式对象存储服务器,Amazon S3兼容,用Go编写,在Apache License Version 2.0 下开源。
MinIO为加密数据提供机密性,完整性和真实性保证,而性能开销可忽略不计。使用AES-256-GCM,ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。加密对象使用AEAD服务器端加密进行防篡改。
分布式MinIO特点
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
分布式Minio好处
在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
分布式注意事项
-
分布式MinIO使用的磁盘必须是干净的,里面没有数据。
-
分布式MinIO里所有节点需要同样的access密钥和secret密钥,这样这些节点才能建立连接,为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
-
分布式MinIO里的节点时间差不能超过3秒,可以使用NTP来保证时间一致。
-
在Windows下运行分布式Minio处于实验阶段,请悠着点使用。
数据保护
-
分布式Minio采用 erasure code 来防范多个节点宕机和位衰减 bit rot。
-
分布式Minio至少需要4个节点,使用分布式Minio自动引入了纠删码功能。
高可用
单机Minio服务存在单点故障,相反,如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你需要至少有N/2+1个节点 Quorum 来创建新的对象
例如,一个8节点的Minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据
限制
分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了Minio的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用2个节点,每个节点4块盘,也可以使用4个节点,每个节点两块盘,诸如此类
一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型
MinIO分布式部署
操作系统:CentOS7
机器资源:
192.168.0.100
192.168.0.101
192.168.0.102
192.168.0.103
基于服务器本地
拉取二进制Minio
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
创建相关目录(所有节点)
创建数据存储目录
mkdir -p /minio/{data1,data2}
创建启动脚本目录
mkdir -p /opt/minio
创建集群配置文件目录
mkdir -p /etc/minio
编写集群启动脚本(所有节点配置文件相同)
vim /opt/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=Minio
export MINIO_SECRET_KEY=Test123456
/opt/minio/minio server --config-dir /etc/minio \
http://192.168.0.100/minio/data1 http://192.168.0.100/minio/data2 \
http://192.168.0.101/minio/data1 http://192.168.0.101/minio/data2 \
http://192.168.0.102/minio/data1 http://192.168.0.102/minio/data2 \
http://192.168.0.103/minio/data1 http://192.168.0.103/minio/data2 \
其中,“MINIO_ACCESS_KEY”为用户名,“MINIO_SECRET_KEY”为密码,密码不能设置过于简单,不然minio会启动失败,“–config-dir”指定集群配置文件目录
编写服务启动脚本(所有节点)
vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/opt/minio/
ExecStart=/opt/minio/run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本
chmod +x /usr/lib/systemd/system/minio.service
启动测试
将minio上传到 /opt/minio
目录下并赋予权限
chmod +x minio
赋予启动文件权限
chmod +x /opt/minio/run.sh
启动
systemctl daemon-reload
systemctl start minio
systemctl enable minio
测试
浏览器输入集群任意节点地址+9000端口,即可访问minio,用户名密码为前面设置的“MINIO_ACCESS_KEY”和“MINIO_SECRET_KEY”,可创建“bucket”并上传文件测试
基于Docker Swarm(仍处在测试阶段)
在Manager节点(192.168.0.100)上创建一个swarm
docker swarm init --advertise-addr 192.168.0.100
通过Docker swarm返回的信息,使用其他服务器添加Worker节点
为MinIO创建Docker secret(或通过环境变量的方式进行配置)
echo "Minoi" | docker secret create access_key -
echo "Test123456" | docker secret create secret_key -
docker node update --label-add minio1=true kb1
docker node update --label-add minio2=true kb2
docker node update --label-add minio3=true kb3
docker node update --label-add minio4=true kb4
在Manager节点中新建Docker Swarm配置文件docekr-compose-secrets.yaml,内容如下
version: '3.7'
services:
minio1:
image: minio/minio:latest
hostname: minio1
volumes:
- minio1-data:/export
ports:
- "9001:9000"
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio1==true
command: server http://minio{1...4}/export
secrets:
- secret_key
- access_key
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio2:
image: minio/minio:latest
hostname: minio2
volumes:
- minio2-data:/export
ports:
- "9002:9000"
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio2==true
command: server http://minio{1...4}/export
secrets:
- secret_key
- access_key
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio3:
image: minio/minio:latest
hostname: minio3
volumes:
- minio3-data:/export
ports:
- "9003:9000"
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio3==true
command: server http://minio{1...4}/export
secrets:
- secret_key
- access_key
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio4:
image: minio/minio:latest
hostname: minio4
volumes:
- minio4-data:/export
ports:
- "9004:9000"
networks:
- minio_distributed
deploy:
restart_policy:
delay: 10s
max_attempts: 10
window: 60s
placement:
constraints:
- node.labels.minio4==true
command: server http://minio{1...4}/export
secrets:
- secret_key
- access_key
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
minio1-data:
minio2-data:
minio3-data:
minio4-data:
networks:
minio_distributed:
driver: overlay
secrets:
secret_key:
external: true
access_key:
external: true
Docker Swarm启动集群MinIO
docker stack deploy --compose-file=docker-compose-secrets.yaml minio_stack
更多推荐
所有评论(0)