集群搭建:
准备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不一样,其他的都是一样的。可以先配置号一台,然后复制多台虚拟机。这样就可以方便的进行集群的创建和扩容