osd-journal-更新为-partuuid-方案

发布时间 2023-04-24 17:23:09作者: XU-NING

问题背景

某些 ceph 集群中,部分 osd 的 journal 指向的磁盘分区为设备名 + 分区编号的形式(例:/var/lib/ceph/osd/ceph-415/journal -> /dev/sdb1),部分服务器由于在运行过程中更换过磁盘,盘符发生变化,重启后,盘符可能再次变化, osd 无法正确找到对应的 journal 分区,导致 osd 启动失败。
由于分区的 partuuid 不会因为服务器重启发生变化,为了避免上述情况发生,此方案修改 osd 的 journal 分区指向到 partuuid(例:/var/lib/ceph/osd/ceph-14/journal -> /dev/disk/by-partuuid/0184594f-07eb-4c01-b06f-87c0a3873222)

适用版本

TStack 通用

操作影响

在停止和启动 osd 的过程中,可能出现短暂的慢请求。

解决方案

  1. 设置集群维护标记,避免在操作过程中,osd 被踢出集群
ceph osd set noout
  1. 查询当前 osd 的 journal 执行的设备分区,此处以 osd.423 为例
ls -la /var/lib/ceph/osd/ceph-423/journal
# 输出如下,即该 journal 指向的设备分区为 /dev/sdb1
# lrwxrwxrwx 1 ceph ceph 9 Oct 15  2019 /var/lib/ceph/osd/ceph-423/journal -> /dev/sdb1
  1. 查询该 journal 设备分区的 partuuid
ls -la /dev/disk/by-partuuid/ | grep sdb1
# 输出如下,即该设备分区的 uuid 为 78d7e10d-52b4-4519-9e2a-aa5a08c7ceb3
lrwxrwxrwx 1 root root  10 Oct 15  2019 78d7e10d-52b4-4519-9e2a-aa5a08c7ceb3 -> ../../sdb1
  1. 停止该 osd
# 在该 osd 所在节点执行
systemctl stop ceph-osd@423
  1. 删除旧的 journal 软链接
rm /var/lib/ceph/osd/ceph-423/journal
  1. 重新链接 journal 到 partuuid
ln -s /dev/disk/by-partuuid/78d7e10d-52b4-4519-9e2a-aa5a08c7ceb3 \ 
/var/lib/ceph/osd/ceph-423/journal
  1. 重新启动该 osd
systemctl start ceph-osd@423
  1. 如果有多个 osd 需要执行变更,在确保上一个 osd 操作完成,且 ceph 集群恢复健康之后,再重复执行步骤 2-7.
# 通过 ceph -s 观察集群状态,保证所有 pg 恢复为 active + clean
ceph -s
  1. 取消维护标志位
# 确保所有 osd 已恢复且集群状态健康的情况下执行
ceph osd unset noout