ceph集群换盘

一引言

某地项目运行两年后磁盘批量报错,利用smartctl检测发现出现大量扇区错误,但并未达到彻底无法读写程度,统计下来发现数量接近40块,考虑批次换盘。坏盘期间为了保证不影响业务,需拟定一个较好的方案。

二 方案

在查阅一堆资料后,发现无论采用哪种方案换盘都会出现大量的数据迁移。

ceph集群换盘

上图引用至张鹏博客

由于线上项目数据量巨大,恢复周期长,采取这种方式换盘并不能完全达到我们的需求。因此我们采用了另外一种折中方案,按照以下过程进行换盘:

  1. 停掉对应osd,单副本运行
  2. 整盘拷贝(周期较长,取决于文件大小)
  3. 拷贝结束,更换硬盘上线
  4. 开始做backfill
  5. 恢复完成

按照上述过程更换硬盘,可以最小化迁移数据量并且避免集群调度recovery,按照我们历史经验,集群的内部recovery速度远比不上外部拷贝。但同时这样换盘引入的风险就是单副本运行期间数据的安全性问题,均衡考虑后还是采用此种方案。

三 展望

此次换盘事件让我思索:有没有可能添加热备osd,保证在换盘期间所下线的pg临时转移到热备osd上,在osd量较多的集群内,两块osd上拥有完整副本数据的pg量很少,这样即使整盘换盘也只会有少量数据存在丢失风险,如果能将这部分完整副本数据的pg重新映射到热备osd,那整个换盘过程风险将会降低很多。