本文研究重点归纳:

  • 前言minio 概念:
  • 安装部署指南(单机+docker)
  • 分布式集群测试
  • 异地(多中心)同步与备份
  • EC码的存储方式|数据损坏与恢复
  • SDK与API(官方提供)
  • FUSE+S3

1、前言minio 概念:

用 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个磁盘中。

2、 安装部署指南(单机+docker)

单机部署

1.创建minio目录

 # mkdir /usr/local/minio

 # mkdir /usr/local/minio/bin

 # mkdir /usr/local/minio/conf

 # mkdir /usr/local/minio/data
  1. 运行用户: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 &

  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 部署

参考链接:https://www.cnblogs.com/xiaweicn/p/15602664.html

3、分布式集群测试

(三台单机)参考链接:https://blog.csdn.net/W1124824402/article/details/121857949
(使用nginx 做负载均衡的配置):https://www.cnblogs.com/masonlee/p/12811784.html

4、异地(多中心)同步与备份

联盟模式:联盟模式即通过引入etcd和coreDNS,将多个MinIO分布式集群在逻辑上组成一个联盟,对外以一个整体提供服务,并提供统一的命名空间。

2021-12-23T03:19:38.png

参考:用MinIO对象存储构建企业数据集中备份系统

5、 EC码的存储方式|数据损坏与恢复

minio分布式集群搭建完全教程(纠删码,数据恢复)

6、 SDK与API(官方提供)

2021-12-23T03:16:28.png

7、 FUSE+S3

k3s + smb+ minio测试记录 : https://my.oschina.net/yjwu/blog/4990470

2021-12-23T03:22:45.png

标签: minio, 分布式文件系统, 网盘分布式文件系统, 基础架构研究

文章版权所属一粒云科技@转载请声明出处。

添加新评论