本文研究重点归纳:
- 前言minio 概念:
- 安装部署指南(单机+docker)
- 分布式集群测试
- 异地(多中心)同步与备份
- EC码的存储方式|数据损坏与恢复
- SDK与API(官方提供)
- FUSE+S3
用 MinIO 搭建一个优雅、简单、功能完备的静态资源服务, *** 作 *** 作简单,功能完备的分布式文件系统。MinIO 已经提供了分布式部署的解决方案,实现高可靠、高可用的资源存储,同样的 *** 作简单,功能完备。
本文将对 MinIO 的分布式部署进行描述,主要分以下几个方面:
- 分布式存储的可靠性
- MinIO 的分布式的存储机制
- 分布式部署实践
2 分布式存储可靠性常用方法(冗余+校验(EC))
分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。
2.1 冗余
冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如 Hadoop 的文件系统(3个副本),Redis 的集群,MySQL 的主备模式等。
2.2 校验
校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID 技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。
3 MinIO存储机制 理解一些概念
3.1 概念理解
在部署分布式 MinIO 前,需要对下面的概念进行了解:
- 硬盘(Drive):即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。
- 组( Set ):即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。
- 桶(Bucket):文件对象存储的逻辑位置,对于客户端而言,就相当于一个存放文件的顶层文件夹。
3.2 纠删码EC(Erasure Code)
MinIO 使用纠删码机制来保证高可靠性,使用 highwayhash 来处理数据损坏( Bit Rot Protection )。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。举个最简单例子就是有两个数据(d1, d2),用一个校验和y(d1 + d2 = y)即可保证即使丢失其中一个,依然可以还原数据。如丢失 d1 ,则使用 y - d2 = d1 还原,同理,d2 丢失或者y丢失,均可通过计算得出。
EC 的具体应用实现中, RS(Reed-Solomen)是 EC 的一种更简单快捷的实现,可以通过矩阵运算,还原数据。MinIO 将对象拆分成N/2数据和N/2 校验块 。具体的数学矩阵运算及证明,可以参考文章《Erasure-Code-擦除码-1-原理篇》及《EC纠删码原理》。
3.3 存储形式
文件对象上传到 MinIO ,会在对应的数据存储磁盘中,以 Bucket 名称为目录,文件名称为下一级目录,文件名称下是 part.1 和 xl.json,前者是编码数据块及检验块,后者是元数据文件。如有4个磁盘,当文件上传后,会有2个编码数据块,2个检验块,分别存储在4个磁盘中。
单机部署
1.创建minio目录
# mkdir /usr/local/minio # mkdir /usr/local/minio/bin # mkdir /usr/local/minio/conf # mkdir /usr/local/minio/data
- 运行用户:root
3.下载minio的二进制文件,安装存放
# curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio nohup /usr/local/minio/minio server /usr/local/minio/data --console-address ":9001" > /usr/local/minio/minio.log 2>&1 &
- 创建minio配文件
# vim /usr/local/minio/conf/minio.conf MINIO_ROOT_USER="minioadmin" MINIO_ROOT_PASSWORD="minioadmin" MINIO_VOLUMES="/usr/local/minio/data" MINIO_OPTS="--console-address :9001" /etc/systemd/system/minio.service [Unit] Description=Minio Wants=network.target After=network.target AssertFileIsExecutable=/usr/local/minio/bin/minio [Service] #这个地方不能使用forking,否则启动不了 Type=simple EnvironmentFile=/usr/local/minio/conf/minio.conf # User and group User=root Group=root ExecStart=/usr/local/minio/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=always LimitNOFILE=65536 # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target 启动服务 # systemctl daemon-reload # systemctl enable minio.service # systemctl start minio.service # systemctl status minio.service 7.设置防火墙,开发minio访问端口 # firewall-cmd --zone=public --add-port=9001/tcp --permanent # firewall-cmd --reload
2 docker 部署
参考链接:Minio的Docker部署docker-compose启动流程 - 茶尚温·听风吟 - 博客园
3、分布式集群测试(三台单机)参考链接:基于docker部署minio分布式集群_W1124824402的博客-CSDN博客_docker部署minio集群
(使用nginx 做负载均衡的配置):MinIO 的分布式部署 - Mason技术记录 - 博客园
联盟模式:联盟模式即通过引入etcd和coreDNS,将多个MinIO分布式集群在逻辑上组成一个联盟,对外以一个整体提供服务,并提供统一的命名空间。
参考:用MinIO对象存储构建企业数据集中备份系统
5、 EC码的存储方式|数据损坏与恢复minio分布式集群搭建完全教程(纠删码,数据恢复)
6、 SDK与API(官方提供) 7、 FUSE+S3k3s + smb+ minio测试记录 : k3s + smb+ minio测试记录 - WuYjJun的个人空间 - OSCHINA - 中文开源技术交流社区
文章版权所属一粒云科技@转载请声明出处。
标签: minio, 分布式文件系统, 网盘分布式文件系统, 基础架构研究
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)