网络知识 娱乐 minio 集群、扩容

minio 集群、扩容

集群搭建:

准备2台centos8虚拟机(节点)、每个虚拟机4块硬盘(这里是4个目录,要在新挂载的硬盘上)

如下:

如何修改ip、设置防火墙、挂载硬盘、设置hostname请参考这里

ip:192.168.1.70

hostname:minio-1

/miniodata/disk1

/miniodata/disk2

/miniodata/disk3

/miniodata/disk4

ip:192.168.1.71        

hostname:minio-2

/miniodata/disk1

/miniodata/disk2

/miniodata/disk3

/miniodata/disk4

官方介绍:

分布式Minio采用 纠删码来防范多个节点宕机和位衰减

分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能

如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的

像我们上面的环境是2个节点,8个硬盘,对象将被拆分成N/2数据和N/2 奇偶校验块。意味着一个对象,将被分成4个数据块+4个奇偶校验块。分别存储在这8块硬盘上,只要保证4块以上的硬盘可用,数据就是安全的。

配置集群和单机是一样的。区别是启动命令不一样,后面要进行扩容。所以用了“区”的方式进行启动

minio server http://host{1...32}/export{1...32}

对应到我们的环境:主机名+存储目录就是:

minio server http://minio-{1...2}/miniodata/disk{1...4}

 注意:每个节点hostname已经设置,并且/etc/hosts已经配置好。否则启动的时候会提示找不到对应hostname的主机

安装minio(每台虚拟机),如下:

wget http://dl.minio.org.cn/server/minio/release/darwin-amd64/minio
chmod +x minio

就是下载二进制。可以先创建目录。进入目录后执行上面的命令。下载到指定位置。我们这里下载到/minio目录下。并在目录下创建run.sh。内容如下:

#!/bin/bash
  
export MINIO_ROOT_USER=minio@admin
export MINIO_ROOT_PASSWORD=minio@admin

/minio/minio server --address :9000 --console-address :8000  
        http://minio-{1...2}/miniodata/disk{1...4}

 到此我们已经完成了启动集群的准备工作。实际在启动过程发现。集群的存储目录必须要挂载一块新硬盘,否则提示:

Disk `/miniodata/disk1` the same as the system root disk.
Disk will not be used. Please supply a separate disk and restart the server.

于是挂载一块新硬盘,挂载到/miniodata。发现后面的disk1不用创建,启动服务后会自动创建。如何挂载硬盘。参考开头的连接。

我们先启动第1个节点(minio-1),运行上面创建的run.sh。发现有错误。其实是在等待第二个节点上线。再接着启动第2个节点(minio-2)。最终各节点出现如下,说明启动成功:

浏览器中输入上面的地址,用户名密码登录系统。可以看到我们这个集群有2个Server,每个Server包含4个Drives

我们创建1个Buckets,并上传一个40KB的文件。看一下文件的存储情况

会发现70和71两个节点8个硬盘上都会创建一个以文件名称命名的文件夹。并且会存一个8KB大小的xl.meta文件 

我们把这个目录删掉。验证数据是否还可以读取。 

 经验证还可以读取。。按照设计坏掉4块硬盘都可以读 。

疑问:如果其中一个硬盘坏掉了。我们换了一个新的。会自动重建数据吗?

会 ,刚才我们删除的硬盘,一段时间后给恢复了

也就是说:我们创建好集群后。只要1/2硬盘不坏。数据就是安全的。坏掉的硬盘我们再换上新的。数据也会进行重建。

扩容:

扩容的要求: 您添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。 

那我们再创建一组虚拟机如下,配置和原来的一样:

ip:192.168.1.72

hostname:minio-3

/miniodata/disk1

/miniodata/disk2

/miniodata/disk3

/miniodata/disk4

ip:192.168.1.73        

hostname:minio-4

/miniodata/disk1

/miniodata/disk2

/miniodata/disk3

/miniodata/disk4

设置好hostname、hosts等。修改run.sh如下:

#!/bin/bash
  
export MINIO_ROOT_USER=minio@admin
export MINIO_ROOT_PASSWORD=minio@admin

/minio/minio server --address :9000 --console-address :8000  
        http://minio-{1...2}/miniodata/disk{1...4}  
        http://minio-{3...4}/miniodata/disk{1...4}

4个节点分别运行启动脚本。等都启动后,可以看到现在成了4个节点16个硬盘

 现在上传几个文件,我们看看是怎么存储的

会发现有的存到了http://minio-{1...2}/miniodata/disk{1...4},

有的存到了http://minio-{3...4}/miniodata/disk{1...4}

实际,上传一个对象,还是和扩容前一样,分成4个数据块+4个奇偶校验块。但是会根据“区”的容量自动保存到不同区域

生产环境每个区可以4节点,每个节点挂4个硬盘。这样有16个硬盘(纠删码集)。保证坏2个节点、或者坏8块硬盘。数据是安全的。最小要求是4块硬盘

很多情况,分布式文件存储系统作为一个基础设施来使用。需要集成到自己的系统。上传文件后如何直接访问呢?

只要把Buckets设置为Public就可以通过如下格式URL进行访问
http://IP:端口/BucketName/文件夹/文件名称

minio有两个端口。API的和Console的。这里使用API的端口
如果是集群可以通过任意IP访问。
通常可以在前端用Nginx做负载均衡

实际操作下来会发现,集群中的每个节点,除了ip,hostname不一样,其他的都是一样的。可以先配置号一台,然后复制多台虚拟机。这样就可以方便的进行集群的创建和扩容