更换/重建 OSD journal 分区

1.1 场景描述

ceph journal 分区损坏会导致 OSD 进程故障或者,无法启动

1.2 影响

修复操作,OSD 启动成功时会伴随数据的 recovery,占用部分磁盘 IO,小规模操作业务无 感知

1.3 实施过程

${OSDID} 使用实际 osdid 替换

1.3.1 设置运维标识

发现集群故障即设置,有运维操作即设置

# 设置 noout 标识

ceph osd set noout

1.3.2 记录原来的 OSD DATA 与 Journal 对应关系

ls -l /var/lib/ceph/osd/ceph-${OSDID}/journal

# 输出如下,journal 为后面分区的软连接

/var/lib/ceph/osd/ceph-2/journal -> /dev/disk/by-partuuid/5062e503-dcef-4061-b35d- 96be1 816b8aa

# 找到软链接的分区对应的盘符

ls -l /dev/disk/by-partuuid/5062e503-dcef-4061-b35d-96be1816b8aa

# 输出如下 则表示 sdf2 为 OSD2 的 journal 磁盘

/dev/disk/by-partuuid/5062e503-dcef-4061-b35d-96be1816b8aa -> ../../sdf2

替换后 journal 也建议使用分区 uuid 格式,盘符在操作系统重启后可能会改变

1.3.3 停止 OSD 进程,将原来的 journal 刷入 Data 磁盘

如果 OSD 本来是异常挂掉的则无须进行该步操作

systemctl stop ceph-osd@${OSDID}

ceph-osd -i ${OSDID} –flush-journal

1.3.4 更换 Jouranl

如果 jouranl 磁盘需要更换,则需要重新替换该 OSD 上所有的 Journal 如果只是某一 OSD 的 jouranl 文件系统损坏,则仅对该 OSD 的 jouranl 进行重新部署即可

删除原来的 journal

rm -f /var/lib/ceph/osd/ceph-${OSDID}/journal

重建 journal 分区

journal 磁盘需要替换需要重新分区,每个 journal 分区以 25G 为宜

# 为新的 journal 磁盘创建分区表,例如盘符为 sdf

parted -s /dev/sdf mklabel gpt

# 为 journal 进行分区,每个分区 25G

# parted -s <磁盘设备> mkpart <文件系统格式> <分区起点> <分区终点>

parted -s /dev/sdf mkpart xfs 0 25G

parted -s /dev/sdf mkpart xfs 25G 50G

parted -s /dev/sdf mkpart xfs 50G 75G

parted -s /dev/sdf mkpart xfs 75G 100G

重新创建

# 找到 journal 分区的 uuid 例如该 journal 分区为 sdf2

ls -l /dev/disk/by-partuuid/|grep sdf2

# 使用 uuid 链接到 journal 文件

ln -s /dev/disk/by-partuuid/${UUID} /var/lib/ceph/osd/ceph-${OSDID}/journal

# 修改属主数组为 ceph

chown ceph:ceph /dev/sdf2

# 创建 journal

ceph-osd -i ${OSDID} –mkjournal

1.4 验证

# 查看 journal 是否链接到了刚刚创建分区的 uuid

ll /var/lib/ceph/osd/ceph-${OSDID}/journal

# 输出如下

/var/lib/ceph/osd/ceph-0/journal -> /dev/disk/by-partuuid/1622955b-8b73-42ff-8275- 6d87f 3f2786d

ll /dev/disk/by-partuuid/1622955b-8b73-42ff-8275-6d87f3f2786d

# 输出如下 与刚刚创建扥 journal 分区盘符对应一致即可

/dev/disk/by-partuuid/1622955b-8b73-42ff-8275-6d87f3f2786d -> ../../sdf2

启动 OSD 等待数据均衡完毕取消 noout 标识

# 启动 OSD

systemctl start ceph-osd@${OSDID}

# 等待一段时间 ceph -s 中 pg 状态都为 active+clean 去除标识

ceph osd unset noout

发表评论

电子邮件地址不会被公开。 必填项已用*标注