存储09-glusterfs&ceph&minio
- 2020 年 3 月 31 日
- 筆記
glusterfs、ceph、minio在开源界,属于比较流行应用较广的三个分布式存储系统。现在重点介绍下,这三个分布式系统的架构以及和raid的类比,让大家把存储明明白白的搞透彻。
1.glusterfs

glusterfs架构介绍
1)abcd四台标准的X86 PCServer
2)每台PCServer提供2个brick(物理磁盘+文件系统+挂载点构成一个brick)
3)多个brick组成上层的volume,volume可以有多个(一个brick只能对应一个volume)
4)volume包含以下几种类型
基本类型1:distribute相当于传统的无条带raid0
基本类型2:strip相当于传统的有条带raid0
基本类型3:replica相当于传统的raid1
复合类型1:distribute stripe|distribute replica|stripe replica|distribute stripe replica
glusterfs和raid1.0对比
1)glusterfs-volume对应raid1.0里的raid-group
2)glusterfs-brick对应raid1.0里的磁盘
3)volume和brick是固定的对应关系,raid1.0里的raid-group和磁盘也是固定的对应关系
备注:以上只是简单的对应,并非严格意义上的对应
一个磁盘做一个brick时,磁盘故障后此brick也故障,上层glusterfs会感知且无自动恢复机制,此时必须人工介入处理。由于磁盘属于消耗品,集群规模大的时候,几乎每天都有磁盘故障,此时对运维人员压力太大;另外brick数量太多,管理也比较困难。为避免这个问题,故总结了glusterfs最佳实践:
1)做replica卷,管理简单数据安全
2)一般情况下2U的机器,除去系统盘后(服务器后面板2块做raid1),前面板可以插12块3.5寸或者24块2.5寸磁盘
3)6块3.5寸磁盘一组做raid5或者8块2.5寸磁盘一组做raid5;每台2U的机器可以包含2-3组raid;replica卷两副本,支持丢一个副本,故此处用大盘做传统raid5(在以前的文章中特别提到,超过1T的磁盘情况下最好不要做传统的raid5,但是数据可以丢失的情况下例外)
4)由于底层有raid保护,故坏盘后上层glusterfs无感知,机房直接更换故障盘即可
5)最好是双万兆网口做bond,mode=4
备注:本文重点描述底层架构的实施,其实操作系统内核参数也需要优化,尤其是TCP/IP参数。
2.ceph

ceph架构介绍
1)abc三台标准的X86 PCServer
2)每台PCServer提供2个osd(物理磁盘+文件系统+挂载点构成一个osd)+1个mon
3)pool里包含多个pg,每个pg里对应若干osd(假设为3副本pool,那么每个pg对应3个osd);pool可以有多个,一个pg只能属于一个pool,但是一个osd可以对应多个pool里的多个pg
4)pool的pg数量和副本数可以设置(生产环境中基本都是三副本);pool也可以是纠删码的方式
ceph和raid2.0的对比
1)ceph-pool对应raid2.0里的lun
2)ceph-pg对应raid2.0里的chunkgroup
3)ceph里默认的4M块对应raid2.0里的chunk
4)ceph-osd对应raid2.0里的磁盘
ceph-pool可以利用集群底层几乎所有的磁盘,raid2.0的lun也可以利用底层几乎所有的磁盘。
备注:以上只是简单的对应,并非严格意义上的对应
ceph坏盘后有自动恢复机制(ceph在pool和osd之间映入了一层逻辑pg),故ceph-osd对应的磁盘通常是单盘,而不像glusterfs那样需要优化做raid。
ceph最佳实践
1)服务器是3的倍数,采用三副本机制
2)前后端网络分离(前后端段均为双万兆网口bond,mode=4)
3)一般情况下2U的机器,除去系统盘后(服务器后面板2块做raid1),前面板可以插12块3.5寸或者24块2.5寸磁盘
4)最好采用12块3.5寸的机型,每块磁盘为直通模式
备注:本文重点描述底层架构的实施,其实操作系统内核参数也需要优化,尤其是TCP/IP参数。
3.minio

minio架构介绍
1)abcd四台台标准的X86 PCServer
2)每台PCServer提供2个存储目录(物理磁盘+文件系统+挂载点构成一个存储目录)
3)每台PCServer里运行一个minio进程
4)对象数据存储的时候,minio进程把对象数据存储在纠删码set中(纠删码有N块盘,数据就拆分为N/2份,剩下的是校验数据)
备注:纠删码最大的磁盘数量为16,默认配置情况下:数据和校验各8块磁盘,这种情况下数据最安全;校验数据的磁盘数可以配置为:2|4|6|8。
3.1minio功能验证环境
minio以纠删码的形式进行数据存储,纠删码的限制为16块盘。这种方式超过16块盘后,会报错,集群无法继续扩容,生产中这种情况肯定不行。

3.2minio生产环境
如果单单16块盘一个bucket容量太小,性能和并发也有拼劲。故大的bucket需要以下特殊方法进行。
假设:dell R740XD2(后面板2块系统盘raid1,前面板12个3.5寸盘位,机箱中部12个3.4寸盘位)
1)初期采购了4台dell R740XD2(后面板2块系统盘raid1,前面板12个3.5寸10T磁盘,机箱中部0磁盘)
/etc/hosts
192.168.1.25 minio01 192.168.1.26 minio02 192.168.1.27 minio03 192.168.1.28 minio04
启动脚本
export MINIO_ACCESS_KEY=Minio export MINIO_SECRET_KEY=Test123456 /root/minio server http://minio0{1…4}/minio/data{1…12}

2)存储容量耗尽,又采购了4台dell R740XD2(后面板2块系统盘raid1,前面板12个3.5寸10T磁盘,机箱中部0磁盘)
/etc/hosts
192.168.1.25 minio01 192.168.1.26 minio02 192.168.1.27 minio03 192.168.1.28 minio04 192.168.1.29 minio05 192.168.1.30 minio06 192.168.1.31 minio07 192.168.1.32 minio08
启动脚本
export MINIO_ACCESS_KEY=Minio export MINIO_SECRET_KEY=Test123456 /root/minio server
http://minio0{1…4}/minio/data{1…12}
http://minio0{5…8}/minio/data{1…12} 3)存储空间又耗尽了,公司没钱买新机器通过扩盘解决
/etc/hosts
192.168.1.25 minio01 192.168.1.26 minio02 192.168.1.27 minio03 192.168.1.28 minio04 192.168.1.29 minio05 192.168.1.30 minio06 192.168.1.31 minio07 192.168.1.32 minio08
启动脚本 export MINIO_ACCESS_KEY=Minio export MINIO_SECRET_KEY=Test123456 /root/minio server
http://minio0{1…4}/minio/data{1…12}
http://minio0{5…8}/minio/data{1…12}
http://minio0{1…4}/minio/data{13…24}
http://minio0{5…8}/minio/data{13…24}

4.glusterfs&ceph&minios对比
