MinIO 介绍使用
MinIO 介绍
MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。
MinIO 英文官网 MinIO 中文官网 注意:中文官方更新不及时,会有很多坑,请以英文官网为准。
基础概念
1、Object:存储到minio的基本对象,如文件,字节流,Anything。。。。
2、Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。
3、Drlve:存储数据的磁盘,在MinIO启动时,以参数的方式传入。MinIO中所有的对象数据都会存在Drive里。
4、Set:即一组 Drive的集合,分布式部署根据集群规模自动划分一个或者多个Set,每个Set中的Drive 分布在不同位置。一个对象存储在一个Set上。
4.1、一个对象存储在一个Set上。
4.2、一个集群划分为多个Set。
4.3、一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。
4.4、一个Set中的drive 尽可能分布在不同的节点上。
5、纠删码:Minio 使用纠删码机制来保证高可靠性。
5.1、使用highwayhash来处理数据损坏(Bit Rot Protectio)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原。
5.2、纠删码是恢复丢失和算怀数据的数学算法,minio采用reed-solomincode将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据快、6个奇偶校验块,你可以丢失任意6块盘(不管其存放的是数据块还是奇偶校验块),你任可以从剩下的盘中的数据进行恢复。
5.2、纠删码模式,把数据分成 DATA BLOCk:数据块、 PARITY BLOCK:校验块。一个BLOCK 10M左右,如果一个文件小于10M,就以文件大小进行分块。如果一个文件大于10m,就以10M为一个文件单位进行分块。
应用场景
1、互联网非结构化数据的存储需求
1.1 、电商网站:海量商品图片
2.1、视频网站:海量视频文件
3.1、网盘:海量文件
MinIO优势
1、数据保护
1.1、分布式MInio采用纠删码来放反多个节点待机和位衰减 bit rot
1.2、分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
2、高可用
2.1、单机Minio服务存在单点故障,相反,如果是有一个N快硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
2.2、例如,一个16节点的Minio集群,每个节点16块块硬盘,计算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写入数据。
3、一致性
3.1、Minio在分布式和单机模式下,所有读写炒作都严格遵守read-after-write 一致性模型
MinIO 使用
使用【服务端】
单机模式 (linux部署)
ps:初始用户名密码:minioadmin
1、下载linux minio, wget https://dl.min.io/server/minio/release/linux-amd64/minio
2、linux部署
修改用户名密码: export MINIO_ROOT_USER=username export MINIO_ROOT_PASSWORD=password 启动: ./minio server --console-address ":9090" /mnt/data 后台启动,指定日志路径: nohup ./minio server --console-address :"9090" ./miniodata/data >./miniodata/minio.log 2>&1 & ps:接口默认地址:9000 指定console端口:9090
3、docker部署
docker run \ -p 9000:9000 \ -p 9001:9001 \ -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \ -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \ quay.io/minio/minio server /data --console-address ":9001"
4、docker部署纠删码模式
docker run -d -p 9000:9000 -p 9090:9090 --name minio \ -v /mnt/data1:/data1 \ -v /mnt/data2:/data2 \ -v /mnt/data3:/data3 \ -v /mnt/data4:/data4 \ -v /mnt/data5:/data5 \ -v /mnt/data6:/data6 \ -v /mnt/data7:/data7 \ -v /mnt/data8:/data8 \ minio/minio server /data{1...8} --console-address ":9090"
5、缺点:单点故障,直接宕机
分布式部署
注意事项:
1、linux部署:启动一个分布式Minio实例,你只需要把硬盘位置作为参数传给minio server命令即可,然后,你需要在所有其他节点运行同样的命令。
2、分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立连接。为了实现这个,你需要在执行minioserver命令前,先将access秘钥和secret秘钥expoert成环境变量。新版本使用MINIO_ROOT_USER&MINIO_ROOTPASSWORD。
3、【举例1】8个节点,每个节点1块盘。启动分布式Minio实例,8个节点,每节点1块盘,需要再8个节点上都运行下面的命令:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=123456
【举例1.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。
minio server http://192.168.1.11/export1 \ http://192.168.1.12/export2 \ http://192.168.1.13/export3 \ http://192.168.1.14/export4 \ http://192.168.1.15/export5 \ http://192.168.1.16/export6 \ http://192.168.1.17/export7 \ http://192.168.1.18/export8 \
【举例2】4个节点,每个节点2块盘。启动分布式Minio实例,4个节点,每节点2块盘,需要再4个节点上都运行下面的命令:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=123456
【举例2.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。
http://192.168.1.11/export1 \ http://192.168.1.11/export2 \ http://192.168.1.12/export1 \ http://192.168.1.12/export2 \ http://192.168.1.13/export1 \ http://192.168.1.13/export2 \ http://192.168.1.14/export1 \ http://192.168.1.14/export2 \
5、统一入口:使用Nginx 统一入口,可以做ip hash策略分散服务器压力。
【例如 :】
upstream minio { server 192.168.1.11:9001; server 192.168.1.12:9001; server 192.168.1.13:9001; server 192.168.1.14:9001; } upstream console { ip_hash; server 192.168.1.11:5001; server 192.168.1.12:5002; server 192.168.1.13:5003; server 192.168.1.14:5004; } server { listen 9000; listen [::] 9000; server_name localhost; localhost / { proxy_pass http://minio; } } server { listen 5000; listen [::] 5000; server_name localhost; localhost / { proxy_pass http://console; } }
6、docker-compose部署,能力有限,留个入口。。
使用【客户端】
介绍:MinIO Clinet(mc) 为ls,cat,cp,mirror,diff,find 等UNIX命令提供一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
Windows 部署
ps:注意9001 是接口端口,不是console端口。
1、下载
wget https://dl.min.io/client/mc/release/linux-amd64/mc
2、赋予权限
chmod +x mc
./mc --help
3、查询mc host配置
mc config host ls
4、 添加minio服务
mc config host add minio-server http://81.70.144.153:9001/ minioadmin minioadmin
5、 mc命令【管理文件】
# 加入配置文件: mc config host add minio01 http://81.70.144.153:9000 minioadmin minioadmin # 连接查看minio文件内容: mc ls tuling minio01 # 下载文件 mc cp minio01/yeb/数据结构算法面试题.txt D:\ # 上传文件 mc cp D:\测试.txt minio01/yeb # 删除文件 mc rm minio01/yeb/测试.txt
6、mc命令【管理桶(Bucket)】
# 创建bucket mc mb minio01/yeb1 # 删除bucket(有数据删除失败) mc rb minio01/yeb1 # bucket不为空,强制删除,慎用 mc rb --force minio01/yeb1 # 查看bucket磁盘使用情况 mc du minio01/yeb
7、mc命令【admin使用】
Minio Client 提供了‘admin’子命令来对minio部署执行管理任务
service 服务器停止并且重启所有Minio服务器
udpate 更新所有MInio服务器
info 显示minio服务器信息
user 管理用户
group 管理小组
policy minio服务器中定义策略管理
cofnig 配置管理minio服务器
heal 修复minio服务器上的磁盘、桶、对象
profile 生成概要文件数据进行调试
top 顶部提供minio统计信息
trace 跟踪显示minio服务器的http跟踪
console 控制台显示minio服务器的控制台日志
prometheus prometheys配置
kms kms管理操作
官方 Java demo使用