MinIO是一款开源的兼容AMASON的S3分布式对象存储项目,主要用来存储海量图片、视频和文档等,支持Java,Python,Javacript, Golang语言。配置简单,简单的单行命令就可以运行了,适用于制作分布式的流媒体和数据分析。
软件特点
1、数据保护
分布式Minio采用 纠删码来防范多个节点宕机和位衰减bit rot。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
2、高可用
单机Minio服务存在单点故障,相反,如果是一个有 m 台服务器, n 块硬盘的分布式Minio,只要有 m/2 台服务器或者 m*n/2 及更多硬盘在线,你的数据就是安全的。
例如,一个16节点的Minio集群,每个节点200块硬盘,就算8台服務器宕机,即大概有1600块硬盘,这个集群仍然是可读的,不过你需要9台服務器在线才能写数据。
你还可以使用存储类型自定义每个对象的奇偶分布。
3、一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write和list-after-write一致性模型。
运行分布式Minio教程
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
注意
分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,建议 在执行minio server命令之前,在所有节点上先将access秘钥和secret秘钥export成环境变量MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD。
MinIO 可创建每组4到16个磁盘组成的纠删码集合。所以你提供的磁盘总数必须是其中一个数字的倍数。
MinIO会根据给定的磁盘总数或者节点总数选择最大的纠删码集合大小,确保统一分布,即每个节点参与每个集合的磁盘数量相等。
每个对象被写入一个EC集合中,因此该对象分布在不超过16个磁盘上。
建议运行分布式MinIO设置的所有节点都是同构的,即相同的操作系统,相同数量的磁盘和相同的网络互连。
分布式Minio使用干净的目录,里面没有数据。你也可以与其他程序共享磁盘,这时候只需要把一个子目录单独给MinIO使用即可。例如,你可以把磁盘挂在到/export下, 然后把/export/data作为参数传给MinIO server即可。
下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
分布式Minio里的节点时间差不能超过15分钟,你可以使用NTP 来保证时间一致。
MINIO_DOMAIN环境变量应该定义并且导出,以支持bucket DNS style。
在Windows下运行分布式Minio处于实验阶段,请悠着点使用。
示例1: 启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令。
示例1: 在n个节点上启动分布式MinIO实例,每个节点有m个磁盘,分别挂载在/export1 到 /exportm (如下图所示), 在所有n个节点上运行此命令:
GNU/Linux 和 macOS
export MINIO_ROOT_USER=<access_key>
export MINIO_ROOT_PASSWORD=<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_ROOT_USER=<access_key>
export MINIO_ROOT_PASSWORD=<secret_key>
minio server http://host{1...n}/export{1...m} http://host{o...z}/export{1...m}
例如:
minio server http://host{1...4}/export{1...16} http://host{5...12}/export{1...16}
现在整个集群就扩展了 (newly_added_servers*m) 个磁盘,总磁盘变为 (existing_servers*m)+(newly_added_servers*m) 个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,您就可以按需扩展您的集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。如上命令中,我们可以把原来的集群看做一个区,新增集群看做另一个区,新对象按每个区域中的可用空间比例放置在区域中。在每个区域内,基于确定性哈希算法确定位置。
说明: 您添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。
例如,第一个区有8个磁盘,您可以将集群扩展为16个、32个或1024个磁盘的区域,您只需确保部署的SLA是原始区域的倍数即可。
使用说明
ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。
∨ 展开