使用minIO搭建分布式文件服务,最简单的docker命令,非docker compose和docker swarm

文档

官方文档:https://docs.min.io/cn/

 

Minio 和 FastDFS

目前可用于文件存储的网络服务选择有很多,比如阿里云OSS、七牛云、腾讯云等等,但是收费都有点小贵。使用minion的原因:

  • fastDFS安装部署维护复杂。

  • fastdfs文档不够全面

  • fastdfs是阿里余庆做的一个个人项目,在一些互联网创业公司中有应用,没有官网,不活跃,6个contributors。目前已经很少做更新。 MinIO目前是由2014年在硅谷创立的公司MinIO.Inc运营的开源项目,社区论坛的活跃度目前也非常的不错。

  • fastdfs没有UI界面

  • 性能。MinIO号称是世界上速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以达到183 GB/s和171 GB/s。关于fastDFS我曾经单线程测试写了20万个文件,总共200G,大约用时10个小时。总体上是很难达到MinIO“号称的”以G为单位的每秒读写速度。

  • MinIO提供了与k8s、etcd、docker等容器化技术深度集成方案,可以说就是为了云环境而生的。这点是FastDFS不具备的。

  • fastDFS目前提供了 C 和 Java SDK ,以及 PHP 扩展 SDK。下图是MinIO提供的SDK支持,MinIO几乎提供了所有主流开发语言的SDK以及文档。

  • Amazon的S3 API是对象存储领域的事实标准。MinIO是S3兼容性的事实上的标准,是第一个采用API和第一个添加对S3 Select支持的标准之一。

纠删码

Minio使用纠删码erasure codechecksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。

纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用里德-所罗门码将对象分片为数据和奇偶校验块。 这就意味着如果是12块盘,一个对象可被分片的范围是:6个数据块和6个奇偶校验块 到 10个数据块和2个奇偶校验块之间。默认情况下, MinIO 将对象拆分成N/2数据和N/2 奇偶校验盘. 虽然你可以通过 存储类型 自定义配置, 但是我们还是推荐N/2个数据和奇偶校验块, 因为它可以确保对硬盘故障提供最佳保护。比如上面12个盘的例子,通过默认配置运行MinIO服务的话,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。

示例:

 # 使用Minio,在12个盘中启动Minio服务
 minio server /data{1...12}
 
 # 使用Minio Docker镜像,在8块盘中启动Minio服务。
 docker run -p 9000:9000 --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}

适用环境:单机多硬盘、多主机多硬盘的情况下也可以使用。单机单硬盘就没啥太大用处了。

位衰减

位衰减又被称为数据腐化Data Rot、无声数据损坏Silent Data Corruption,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接咔咔宕了还危险。

 

开始部署------------------正文开始

公司打算部署分布式文件系统,调研了许久,决定使用MinIO来搭建,简单快捷,省事。单机的时候没问题,分布式的时候走了很多的坑,特此记录下来。官网上是使用docker compose 之类的弄的,我对那个不太熟悉,而且,我这个集群也不算大,没必要,就直接最简单的docker命令来弄了。

我打算使用双机四节点的方案,注意,一定至少要4个节点,否则项目起不来,使用docker搭建。并且注意,两台机器的时间应该是不相差太大的,否则也会有问题。开始搭建。

集群部署,一共两台机器,一台  192.168.1.162,一台  192.168.1.136

 集群,双机四节点 
 
 -- 162
 docker run -d  \
 --net=host --name minio-node1 \
 --privileged=true \
 --restart=on-failure:5 \
 -e "MINIO_ACCESS_KEY=你的账号"  \
 -e "MINIO_SECRET_KEY=相当于你的密码" \
 -v /data/node-1:/data \
 -v /data/node-2:/data1   \
 -v /minio/config:/root/.minio \
 -v /etc/localtime:/etc/localtime \
 minio/minio server \
 http://192.168.1.162:9000/data/ \
 http://192.168.1.162:9000/data1/ \
 http://192.168.1.136:9000/data/ \
 http://192.168.1.136:9000/data1/
 
 -- 136
 docker run -d  \
 --net=host --name minio-node2 \
 --privileged=true \
 --restart=on-failure:5 \
 -e "MINIO_ACCESS_KEY=你的账号" \  
 -e "MINIO_SECRET_KEY=相当于你的密码" \ 
 -v /data/node-3:/data \
 -v data/node-4:/data1   \
 -v minio/config:/root/.minio \
 -v /etc/localtime:/etc/localtime \
 minio/minio server \
 http://192.168.1.162:9000/data/ \
 http://192.168.1.162:9000/data1/ \
 http://192.168.1.136:9000/data/ \
 http://192.168.1.136:9000/data1/

上面的参数说明一下, --net 其实就是使用宿主机的网络环境  --restart 这个是重启的参数,如果意外挂掉自动重启5次,不行就不再次重启了

/etc/localtime 这个是挂载时间,和宿主机的时间一致。

说下碰到的坑,一定要注意,这个端口映射,我之前不是使用默认的端口,一直报连接不上,后面才想明白,虽然我传进去的IP是对的,但是容器不知道,还是按照他的逻辑去跑的,导致端口对不上,也连接不到其他的机器,从而一直报错,端口建议就使用宿主机的网络,不要去指定,另外记得官方文档还要开启几个其他的端口通信的,这里很容易翻车。第二个就是挂载的目录,注意后面的IP就是容器内的挂载目录!

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章