1.1数据保护
- 分布式 Minio 采用纠删码来防范多个节点宕机和位衰减。
- 分布式 Minio 至少需要 4 个节点(4台服务器),使用分布式 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 基于哈希的校验和来防范位衰减。
1.2.高可用
- 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。
- 例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过你需要 5 个节点才能写数据。
windows下Minio集群部署:
- 下载minio服务,以下是下载链接
https://dl.minio.io/server/minio/release/windows-amd64/minio.exe - 准备两台windows服务器,分别创建data1-4文件夹
- cmd进入minio的安装目录,依此在两台机器上执行命令:
minio server --console-address :9091 :address 9001 http://192.168.10.11/D:/minio/data1
http://192.168.10.11/D:/minio/data2
http://192.168.10.11/D:/minio/data3
http://192.168.10.11/D:/minio/data4 http://192.168.10.12/D:/minio/data1
http://192.168.10.12/D:/minio/data2
http://192.168.10.12/D:/minio/data3
http://192.168.10.12/D:/minio/data4
注意:
如果只有一台机器启动了,另一台还没有启动,此时控制台会报错,无 需处理,两台机器命令都执行完就不报错了
解决初始账号密码问题
setx MINIO_ROOT_USER ‘用户名’
setx MINIO_ROOT_PASSWORD ‘密码’
set minio_access_key=用户名
set minio_secret_key=password
集群环境下每台机器都需要设置一下用户名密码
通过nginx配置负载均衡
upstream minio {
server 192.168.10.11:9001;
server192.168.10.12:9002;
}
server {
listen 9000;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}