1.为集群创建纠删码erasure-code-profile 其中k4 m2
2.由于客户集群只有三节点,而ec4+2需要至少6节点,因此要求配置ec4+2:1,以满足每个节点上分布两个纠删码块
[root@node01 ceph-deploy]# ceph osd erasure-code-profile set erasure-code-profile k=4 m=2
[root@node01 ceph-deploy]# ceph osd erasure-code-profile get erasure-code-profile
crush-device-class=
crush-failure-domain=host
crush-root=default
jerasure-per-chunk-alignment=false
k=4
m=2
plugin=jerasure
technique=reed_sol_van
w=8
#通过纠纠偏码创建pool
[root@node01 ceph-deploy]# ceph osd pool create ecpool 64 64 erasure erasure-code-profile
pool 'ecpool' created
#查看当前crushmap的id
ceph osd getcrushmap -o crushmap
#导出
crushtool -d crushmap -o crushmap.txt
#编辑自己的一部分
vim crushmap.txt
#先查看默认配置
rule ecpool {
id 1
type erasure #类型是纠偏码
min_size 3 #最少需要3个OSD
max_size 6 #最多多少osd可被用作纠偏码
step set_chooseleaf_tries 5 #在一个节点上可以选择最多尝试多少次osd
step set_choose_tries 100 #在所有节点上做多尝试多少次选择合适的OSD
step take default #从default的bucket开始选择
step chooseleaf indep 0 type host #indep 0,独立选择
step emit #规则完成后开始分配数据
}
#修改配置为2:1.精简的EC结构
rule ecpool {
id 1
type erasure
min_size 3
max_size 6
step set_chooseleaf_tries 5 #在一个节点上可以选择最多尝试多少次osd
step set_choose_tries 100 #在所有节点上做多尝试多少次选择合适的OSD
step take default
step choose indep 3 type host # 注意这里的类型是host 独立选择3个host类型的bucket,也就是选三个不同的节点节点作
step chooseleaf indep 2 type osd #注意这里的类型是OSD chooseleaf(选择分片) 在每个主机上(这里一共是3个主机),每个主机上选择2个OSD来存储数据碎片,也就是说通过3个主机,每个主机两个碎片的方式
}
#通过上面修改后的crushmap.txt来生成新的crushmap规则
crushtool -c crushmap.txt -o newcrushmap2
ls
#修改好后,重新应用到集群
[root@node01 ~]# ceph osd setcrushmap -i newcrushmap2
28
#查看已经应用的规则,是否被修改
[root@node01 ~]# ceph osd crush rule dump ecpool
[root@node01 ~]# ceph osd crush rule dump ecpool
{
"rule_id": 1,
"rule_name": "ecpool",
"ruleset": 1,
"type": 3,
"min_size": 3,
"max_size": 6,
"steps": [
{
"op": "set_chooseleaf_tries",
"num": 5
},
{
"op": "set_choose_tries",
"num": 100
},
{
"op": "take",
"item": -1,
"item_name": "default"
},
{
"op": "choose_indep",
"num": 3, #看到已经修改了
"type": "host"
},
{
"op": "chooseleaf_indep",
"num": 2, 看到已经被修改了
"type": "osd"
},
{
"op": "emit"
}
]
}
#测试
停掉两块不同节点上的OSD,集群应该正常工作
停掉三块不同节点上的OSD,集群工作异常
模拟一整节点宕机,集群工作异常
正在测试中