想测试下纠删码,所以照着官网上的步骤执行了下.
ceph osd pool create ecpool 12 12 erasure
pool ‘ecpool’ created
echo ABCDEFGHI | rados –pool ecpool put NYAN -
$ rados –pool ecpool get NYAN -
ABCDEFGH
但是到第二步就写不进去了。自己设定一个erasure-code-profile也不行。用ceph -s 之后发现,新建的12个pg一直处于creating+incomplete的状态。
因为默认的纠删码参数是k=2,m=1。设定的ruleset-failure-domain=osd。而我们实验的集群正好是3个osd。猜测可能是osd不够,又加了一个osd还是不行。如图。
后来在网上搜了一大圈也没找到解决办法,就在官网找。找到了一篇PG出问题的文章,里面有提到建纠删码池时可能会出现的几个问题。
ERASURE CODED PGS ARE NOT ACTIVE+CLEAN
找到了问题出在crush map中,我们这个集群都是在一台服务器中,所以crushmap中纠删码的ruleset就不能设成host,而应该改成osd。