概述
本文主要验证ceph对象存储使用纠删码的情况
本文中纠删码的配置K+M为 4+2,理论上可以容忍M个osd的故障ceph
配置
创建erasure-code-profile和crush rule
1 | [root@ceph04 ~]# ceph osd erasure-code-profile set rgw_ec_profile k=4 m=2 crush-root=root_rgw plugin=isa crush-failure-domain=host |
1 | [root@ceph04 ~]# ceph osd crush rule create-erasure rgw_ec_rule rgw_ec_profile |
由于实验环境只有3个节点,需要调整crush rule,先选择3个host,再在每个host选择两个osd
1 | ceph osd getcrushmap -o crushmap |
1 | rule rgw_ec_rule { |
1 | crushtool -c crushmap.txt -o crushmap |
由于环境中还没有任何数据,我们先停止rgw,然后把默认的default.rgw.buckets.data存储池删掉,再创建一个纠删码的default.rgw.buckets.data存储池
1 | [root@ceph04 ~]# ceph osd pool create default.rgw.buckets.data 64 64 erasure rgw_ec_profile rgw_ec_rule |
可以看到默认创建的存储池的size是k+m=6, min_size=k-m+1=5, 当存储池的当前size小于min_size的时候,pg会出现incomplete的情况,所以在还需要调整存储池的min_size为4,这样就可以容忍2个osd节点故障。
1 | [root@ceph04 ~]# ceph osd pool ls detail |
验证
创建对象存储用户,并用s3cmd进行验证
1 | [root@ceph04 ~]# radosgw-admin user create --uid=test --display-name=test |
1 | [root@ceph04 ~]# s3cmd ls s3:// |
停掉2个osd,pg也没有出现incomplete的状态, 通过s3cmd也可以正常上传下载
1 | [root@ceph04 ~]# systemctl stop ceph-osd@0 |