我们有一套由 6 台服务器组成的设置,这些服务器托管 CentOS 8 最小安装和 CEPH Quincy 版本 18.2.2,由 20Gbps 光纤 NIC 和双 Xeon Intel 处理器支持,在第一个节点上引导安装,然后使用 cephadm 方法扩展到其他节点,在其中 5 个节点和 3 个管理器节点上部署监视服务。每台服务器都有一个 NVMe 启动盘以及一个 1TB SATA SSD,OSD 部署在其上。创建了一个 EC 配置文件,其中 k=3 和 m=3,在顶部提供 CephFS 文件系统,并通过 NFS 导出为其他服务器提供服务。到目前为止,设置非常稳定,因为在紧急重启或网络连接故障时,OSD 不会出现故障,并且在重启后保持正常运行/启动。
在我们项目的某个阶段,我们需要激活 multipathd 服务,将启动驱动器分区和 CEPH SSD 添加到其黑名单中,以免被 mpath 分区初始化使用,黑名单如下:
启动黑名单:
blacklist {
wwid "eui.<drive_id>"
}
SATA SSD黑名单:
blacklist {
wwid "naa.<drive_id>"
}
上面的黑名单配置保证了启动盘以及CEPH的OSD都能正常工作,以下是lsblk的输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 894.3G 0 disk
└─ceph--<id>-osd--block--<block_id> 252:3 0 894.3G 0 lvm
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─centos-root 252:0 0 170G 0 lvm /
├─centos-swap 252:1 0 23.4G 0 lvm [SWAP]
├─centos-var_log_audit 252:2 0 7.5G 0 lvm /var/log/audit
├─centos-home 252:4 0 26G 0 lvm /home
└─centos-var_log 252:5 0 10G 0 lvm /var/log
除了上述 multipathd 配置之外,我们在 /etc/lvm/lvm.conf 中还有 use_devicesfile=1,/etc/lvm/devices/system.devices 文件如下所示,PVID 来自 pvdisplay 命令的输出,IDNAME 值来自“ls -lha /dev/disk/by-id”的输出:
VERSION=1.1.1
IDTYPE=sys_wwid IDNAME=eui.<drive_id> DEVNAME=/dev/nvme0n1p3 PVID=<pvid> PART=3
IDTYPE=sys_wwid IDNAME=naa.<drive_id> DEVNAME=/dev/sda PVID=<pvid>
在执行有关系统完整性的某些测试时开始出现问题,其中最重要的是紧急关闭并重新启动所有节点,随之而来的行为是 OSD 不会自动启动,并且它们各自的 LVM 卷未正确显示(除了由于某种原因在单个节点上),因此 lsblk 输出会像下面的代码片段一样发生变化,需要我们逐个重新启动节点,直到所有 OSD 恢复在线:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 894.3G 0 disk
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─centos-root 252:0 0 170G 0 lvm /
├─centos-swap 252:1 0 23.4G 0 lvm [SWAP]
├─centos-var_log_audit 252:2 0 7.5G 0 lvm /var/log/audit
├─centos-home 252:4 0 26G 0 lvm /home
└─centos-var_log 252:5 0 10G 0 lvm /var/log
如果没有启用 LVM 配置和 multipathd 服务,一切都会正常工作,但更改后这种情况开始发生。尝试使用 ceph orch daemon restart osd.n 从管理器节点手动重新启动 OSD 会导致错误状态,即使通过 bash /var/lib/ceph//osd.0/unit.run 在每个节点上手动启动 OSD,我们也会收到以下错误:
--> Failed to activate via raw: did not find any matching OSD to activate
Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-0
Running command: /usr/bin/ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev /dev/ceph-<id>/osd-block-<block_id> --path /var/lib/ceph/osd/ceph-0 --no-mon-config
stderr: failed to read label for /dev/ceph-<id>/osd-block-<block_id>: (2) No such file or directory
2024-03-30T12:42:54.014+0000 7f845296a980 -1 bluestore(/dev/ceph-<id>/osd-block-<block_id>) _read_bdev_label failed to open /dev/ceph-<id>/osd-block-<block_id>: (2) No such file or directory
--> Failed to activate via LVM: command returned non-zero exit status: 1
--> Failed to activate via simple: 'Namespace' object has no attribute 'json_config'
--> Failed to activate any OSD(s)
成功运行相同的命令但成功的结果如下:
/bin/bash /var/lib/ceph/<fsid>/osd.0/unit.run
Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-0
Running command: /usr/bin/ceph-bluestore-tool prime-osd-dir --path /var/lib/ceph/osd/ceph-0 --no-mon-config --dev /dev/mapper/ceph--<id>-osd--block--<block_id>
Running command: /usr/bin/chown -h ceph:ceph /dev/mapper/ceph--<id>-osd--block--<block_id>
Running command: /usr/bin/chown -R ceph:ceph /dev/dm-5
Running command: /usr/bin/ln -s /dev/mapper/ceph--<id>-osd--block--<block_id> /var/lib/ceph/osd/ceph-0/block
Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-0
--> ceph-volume raw activate successful for osd ID: 0
ceph-<fsid>-osd-0
4361e2f166bcdeee6e9020dcbb153d3d7eec04e71d5b0b250440d4a3a0833f2c
在我们看来,在发生故障的情况下,设备映射器甚至在启动时都无法检测到逻辑卷,这很奇怪,在发生故障的情况下,它也不会显示在 dmsetup ls 命令的输出中。我们可能在这里遗漏了什么?CEPH OSD 和多路径服务甚至 LVM 配置之间似乎存在什么冲突?system.devices 条目是否应该与我们设置的不同?多路径黑名单配置是否缺少某些内容?我们已经进行了一个多星期的反复试验,查看了 lvm2 和多路径日志(我们可以根据要求提供它们),但无济于事,因为没有任何内容表明任何错误,只有正常的日志,不同之处在于缺少 CEPH OSD LVM 卷。
感谢你并致以真诚的问候