本文的出现是为了能够分享个人所学的相关知识,检验自身学习成果。内容会和其他技术存在部分关联,如有任何描述错误或者说明有误的地方,还望各位大佬指出。
1. 什么是MinIO
1.1 MinIO介绍
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
1.2 MinIO保护数据策略
Minio使用纠删码erasure code
和校验和checksum
来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
2. MinIO部署
2.1 单节点部署
2.1.1 下载minio
根据实际操作系统及位数下载相应minio server(注:不是minio client)
进入https://dl.min.io/server/minio/release/linux-amd64/minio下载
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
2.1.2 上传到linux下
在上一步下载的文件目录下添加shell脚本(例如:startMinIO.sh)并运行,命令如下:
MINIO_ACCESS_KEY配置minio登录账户
MINIO_SECRET_KEY配置minio登录密码
dataPath为数据存储路径
export MINIO_ACCESS_KEY="minio"
export MINIO_SECRET_KEY="123qwe!@#"
nohup ./minio server --address :9000 ${dataPath} >/dev/null 2>&1 &
2.1.3 进入页面验证
minio默认端口为9000,可以用–address 参数自定义。
2.2 集群部署
MINIO集群与常规集群不同的是,MINIO集群中存储的文件并不是在所有节点上各存一份,而是将讲文件拆分成多分,再使用纠删码技术保障多节点文件完整。同时请对比集群部署和单点部署启动命令。本文档以四个节点为例预留5个端口(8089、9001、9002、9003、9004)
2.2.1 非集群单节点部署
命令如下:
export MINIO_ACCESS_KEY="minio"
export MINIO_SECRET_KEY="123qwe!@#"
nohup ./minio server --address :9000 ${dataPath} >/dev/null 2>&1 &
2.2.2 集群下单节点部署
集群下部署minio单节点需要根据非集群单节点部署命令进行修改。将datapath部分指向集群中所有minio节点的datapath。
集群中其中一个节点部署命令如下:
export MINIO_ACCESS_KEY="minio"
export MINIO_SECRET_KEY="123qwe!@#"
nohup ./minio server --address ${Node1_IP}:${Node1_Port} http://${Node1_IP}/data/data1 http://${Node2_IP}/data/data2 http://${Node3_IP}/data/data3 http://${Node4_IP}/data/data4 > /dev/null 2>&1 &
2.2.3 MINIO集群注意点
minio的集群所有节点的登录账户及密码必须一致。
minio的集群节点数量推荐大于等于4。
2.2.4 MINIO负载均衡
官方文档支持nginx,可参考我的另一篇Post not found: nginx负载均衡配置 关于nginx负载均衡的Blog。
2.2.4.1 配置nginx分发端口
server {
listen 8089;
server_name www.dealthBook.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.2.4.2 添加upstream
upstream minio_server {
#1、轮询(默认选项,所有weight=1)
#2、weight,执行轮询几率,weight与访问几率成正比
#3、ip_hash,每个请求按照hash结果分配,这样其实是每个服务都有一个固定的值
#4、least_conn,最少连接数负载均衡
server ${IP1}:${PORT1};
server ${IP2}:${PORT2};
server ${IP3}:${PORT3};
server ${IP4}:${PORT4};
}
2.2.4.3 添加minio的upstream名称
location /minio {
proxy_set_header Host $http_host;
proxy_pass http://minio_server;
}
2.2.4.4 最终配置文件布局
http{
...
upstream minio_server{
...
}
server{
...
location /minio{
...
}
}
}
2.2.5 启动nginx及所有节点的minio
2.2.6 验证
2.2.6.1 验证各节点minio是否正常
2.2.6.2 通过nginx进入minio查看分发是否正常,本文配置nginx的minio端口为8089
通过nginx进入minio http://ip:8089/minio
3. MinIO页面
3.1 新建桶(Bucket)及上传文件
