Filecoin存储有的用的是昂贵的商业存储,有的用的是简单的nfs,我们公司用的是ceph文件系统。
各项技术的优劣在此不做评价,根据自己的实际情况来选择,不差钱又有技术能力那当然最好了。
本人在实践当中,发现ceph问题多多,算力低于1PiB的时候,问题一般暴露不出来,算力达到1.8PiB以后,时不时各种坑,执行ceph -s 出现各种头疼的HEALTH_WARN提示,让人防不胜防,不厌其烦,MDS也是各种问题,经常1 filesystem is degraded,然后就fil就掉算力,浏览器出现恐怖的红色的xxx faults。
出现问题要解决,可是错误提示都是冗长的英文,百度是搜不到的,google也很难匹配,偶尔有几个结果,还可能因为ceph版本不同,别人的解决方案不适合你,很让人纠结。filecoin生产环境下,ceph又不能让你随意测试,这就一个头两个大了。
见得多了,后来就慢慢摸出一点门道,ceph出现问题的根本原因是磁盘IO负载太重,而磁盘IO负载太重是因为ceph经常不定时执行deep_scrub,不停扫描磁盘。磁盘负载重,导致lotus 的window post不能及时完成,{"batch": 0, "elapsed": 187.471899623, "skip": 0, "err": null} ,就是这个elapsed这个参数太大,然后就掉算力了。
问题的原因,现象都知道了,现在就是要解决问题了,直接上代码。
措施1、在ceph的mon上执行
ceph tell osd.* injectargs "--osd-scrub-begin-hour 18"
ceph tell osd.* injectargs "--osd-scrub-end-hour 6"
让deep_scrub时间控制在18点-凌晨6点,这个时间点因为算力小,不执行window post。
措施2、修改mon上的ceph.conf文件
[mds.ceph4]
mds_standby_for_name = ceph6
mds_standby_replay = true
[mds.ceph5]
#mds_standby_for_fscid = mycephfs
mds_standby_for_name = ceph7
mds_standby_replay = true
ceph-deploy --overwrite-conf config push ceph4
ceph-deploy --overwrite-conf config push ceph5
ceph-deploy --overwrite-conf config push ceph6
ceph-deploy --overwrite-conf config push ceph7
注:4567为4个MDS,67为分别为45的热备,45任何一个出现问题,自动启用6或7.
当然还有一些更细化的调整,不再赘述。
主要是上面的两步,这样世界一下就清净了,不掉算力了,再也不用担心天天被老板怼了。