osd filestore转换成bluestore

前言

  • filestore最主要的问题: 因为引入了journal的缘故,数据会先写在journal设备上,然后再由journal向本地磁盘写入,这就造成了双写,如果是采用多副本的方案,双写带来的性能问题那就是灾难性的了。 filestore需要本地文件系统间接管理磁盘,所以需要把对象操作先转换为符合POSIX语义的文件操作,这样比较繁琐,相对的执行效率上就大打折扣。

  • bluestore的优势: bluestore直接对裸磁盘进行io操作,抛弃了文件系统,缩短了io路径,不在需要journal了,默认采用RocksDB作为元数据 K/V 引擎,直接解决了双写的问题,对纯机械硬盘的顺序写来说,性能有近2倍的提升。

我所知道的转换方案有4种,可以分成两类,第一类是官方文档上的,第二类是参考磨铁大佬在博客中记录的,下面我将测试一下第一种方案。

方案一:官方方案

官方的方法比较暴力,大致是直接把osd踢出集群让pg 重新remap,然后zap磁盘以bluestore作为后端创建osd重新上线

  • 把一个osd标记成out状态

    ceph osd out <OSD-ID>
  • 迁走osd里的数据

    while ! ceph osd safe-to-destroy <OSD-ID> ; do sleep 60 ; done

执行之后可以看到命令在等待pg remap

  • 关闭osd进程

    systemctl stop ceph-osd@<OSD-ID>
  • 卸载osd所挂载的分区

    umount /var/lib/ceph/osd/ceph-<OSD-ID>
  • zap磁盘

    ceph-volume lvm zap /dev/sdx
  • 从集群中删除这个osd

    ceph osd destroy <OSD-ID> --yes-i-really-mean-it
  • 重新添加osd并保持osd-id不变

    ceph-volume lvm prepare --bluestore --data /dev/sdx --osd-id <OSD-ID>

这里和官方有点区别,官方使用ceph-volume lvm create,这个命令在我测试下来是无法执行的create这个参数的解释是Create a new OSD from an LVM device,因为这个磁盘刚刚zap过,所以里面没有文件系统也不是lvm device,命令自然就执行失败,改用prepare可以把磁盘添加为lvm 设备并完成初始化osd。

  • 激活osd

    ceph-volume lvm activate <OSD-ID> <OSD-FSID>
  • 完工
    可以看到集群开始remap backfill操作,等一段时间就回填数据完成了,这样一个osd的转换好了,可以接着操作其他osd了。

参考

BlueStore Migration: http://docs.ceph.com/docs/master/rados/operations/bluestore-migration/
Ceph OSD从filestore 转换到 bluestore的方法: http://www.zphj1987.com/2017/05/03/Ceph-filestore-to-bluestore/

文章作者: j0ck1e
文章链接: https://blog.j0ck1e.com/2018/09/14/filestore-to-bluestore/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 j0ck1e's blog