简介
Minio是一个go编写基于Apache License v2.0开源协议的对象存储系统,是为海量数据存储、人工智能、大数据分析而设计,它完全兼容Amazon S3接口,十分符合存储大容量的非结构化数据从几十kb到最大5T不等。是一个小而美的开源分布式存储软件。
特点
简约而不简单:Minio采用简单可靠的集群方案,摒弃复杂的大规模的集群调度管理,减少风险与性能瓶颈,聚焦产品的核心功能,打造高可用的集群、灵活的扩展能力以及超过的性能。建立众多的中小规模、易管理的集群,支持跨数据中心将多个集群聚合成超大资源池,而非直接采用大规模、统一管理的分布式集群。
你要的我都有:Minio支持云原生,能与Kubernetes、Docker、Swarm编排系统良好对接,实现灵活部署。且部署简单,只有一个可执行文件,参数极少,一条命令即可启动一个Minio系统。Minio为了高性能采取无元数据数据库设计,避免元数据库成为整个系统的性能瓶颈,并将故障限制在单个集群之内,从而不会涉及其他集群。Minio同时完全兼容S3接口,因此也可以作为网关使用,对外提供S3访问。
搭建
1.使用docker容器
docker run -p 9000:9000 \
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
minio/minio server /data
2.macOs
brew install minio/stable/minio
minio server /data
3.Linux
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data
启动运行后Minio的默认端口是9000所以需要在防火墙设置端口。如果在浏览器访问http://127.0.0.1:9000成功,表示安装成功
分布式
分布式搭建与单机模式流程基本一致,Minio服务基于命令行传入的参数自动切换成单机还是分布式。
1.前提条件:需要安装Minio
2.启动一个分布式Minio实例,你只要把硬盘位置作为参数传给Minio server命令即可,然后,需要在所有其他节点运行相同的命令。
注意:
- 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。
- MinIO 可创建每组4到16个磁盘组成的纠删码集合。所以你提供的磁盘总数必须是其中一个数字的倍数
- MinIO会根据给定的磁盘总数或者节点总数选择最大的纠删码集合大小,确保统一分布,即每个节点参与每个集合的磁盘数量相等。
- 每个对象被写入一个EC集合中,因此该对象分布在不超过16个磁盘上。
- 建议运行分布式MinIO设置的所有节点都是同构的,即相同的操作系统,相同数量的磁盘和相同的网络互连。
- 分布式Minio使用干净的目录,里面没有数据。你也可以与其他程序共享磁盘,这时候只需要把一个子目录单独给MinIO使用即可。例如,你可以把磁盘挂在到/export下, 然后把/export/data作为参数传给MinIO server即可。
- 分布式Minio里的节点时间差不能超过15分钟,你可以使用NTP 来保证时间一致。
linux和mac
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...n}/export{1...m}
注意: 在以上示例中n和m代表正整数, 不要直接复制粘贴它们,你应该在部署的时候改成你期望的值.
注意: {1...n} 是有3个点的! 用2个点{1..n}的话会被shell解析导致不能传给MinIO server, 影响纠删码的顺序, 进而影响性能和高可用性. 所以要始终使用省略号 {1...n} (3个点!) 以获得最佳的纠删码分布
扩展现有的分布式集群
Minio支持通过命令,指定新的集群来扩展现有集群(纠删码模式)
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...n}/export{1...m} http://host{o...z}/export{1...m}