10.2. 容器化环境中的 Ceph 对象故障排除
OSD 容器可以在救援/维护模式下启动,以修复 Red Hat Ceph Storage 4 中的 OSD,而无需在 OSD 节点上安装 Ceph 软件包。
您可以使用 ceph-bluestore-tool
使用 fsck
命令运行一致性检查,或者运行一致性检查并修复所有有 repair
命令的错误。
此流程只适用于容器化部署。对于裸机部署跳过此部分
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph OSD 节点的根级别访问权限.
-
停止
ceph-osd
守护进程.
流程
在集群中设置
noout
标志。示例
[root@mon ~]# ceph osd set noout
- 登录托管 OSD 容器的节点。
将
/etc/systemd/system/ceph-osd@.service
单元文件备份到/root
目录。示例
[root@osd ~]# cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.backup
将
/run/ceph-osd@OSD_ID.service-cid
文件移到/root
。示例
[root@osd ~]# mv /run/ceph-osd@0.service-cid /root
编辑
/etc/systemd/system/ceph-osd@.service
单元文件,并在 podman 命令中添加-it --entrypoint /bin/bash
选项。示例
# Please do not change this file directly since it is managed by Ansible and will be overwritten [Unit] Description=Ceph OSD After=network.target [Service] EnvironmentFile=-/etc/environment ExecStartPre=-/usr/bin/rm -f /%t/%n-pid /%t/%n-cid ExecStartPre=-/usr/bin/podman rm -f ceph-osd-%i ExecStart=/usr/bin/podman run -it --entrypoint /bin/bash \ -d --conmon-pidfile /%t/%n-pid --cidfile /%t/%n-cid \ --rm \ --net=host \ --privileged=true \ --pid=host \ --ipc=host \ --cpus=2 \ -v /dev:/dev \ -v /etc/localtime:/etc/localtime:ro \ -v /var/lib/ceph:/var/lib/ceph:z \ -v /etc/ceph:/etc/ceph:z \ -v /var/run/ceph:/var/run/ceph:z \ -v /var/run/udev/:/var/run/udev/ \ -v /var/log/ceph:/var/log/ceph:z \ -e OSD_BLUESTORE=1 -e OSD_FILESTORE=0 -e OSD_DMCRYPT=0 \ -e CLUSTER=ceph \ -v /run/lvm/:/run/lvm/ \ -e CEPH_DAEMON=OSD_CEPH_VOLUME_ACTIVATE \ -e CONTAINER_IMAGE=registry.redhat.io/rhceph/rhceph-4-rhel8:latest \ -e OSD_ID=%i \ -e DEBUG=stayalive \ --name=ceph-osd-%i \ \ registry.redhat.io/rhceph/rhceph-4-rhel8:latest ExecStop=-/usr/bin/sh -c "/usr/bin/podman rm -f `cat /%t/%n-cid`" KillMode=none Restart=always RestartSec=10s TimeoutStartSec=120 TimeoutStopSec=15 Type=forking PIDFile=/%t/%n-pid [Install] WantedBy=multi-user.target
重新加载
systemd
管理器配置。示例
[root@osd ~]# systemctl daemon-reload
重新启动与
OSD_ID
关联的 OSD 服务。语法
systemctl restart ceph-osd@OSD_ID.service
将
OSD_ID
替换为 OSD 的 ID。示例
[root@osd ~]# systemctl restart ceph-osd@0.service
登录与
OSD_ID
关联的容器。语法
podman exec -it ceph-osd-OSD_ID /bin/bash
示例
[root@osd ~]# podman exec -it ceph-osd-0 /bin/bash
获取
osd fsid
并激活 OSD 以挂载 OSD 的逻辑卷(LV)。语法
ceph-volume lvm list |grep -A15 "osd\.OSD_ID"|grep "osd fsid" ceph-volume lvm activate --bluestore OSD_ID OSD_FSID
示例
[root@osd ~]# ceph-volume lvm list |grep -A15 "osd\.0"|grep "osd fsid" osd fsid 087eee15-6561-40a3-8fe4-9583ba64a4ff [root@osd ~]# ceph-volume lvm activate --bluestore 0 087eee15-6561-40a3-8fe4-9583ba64a4ff Running command: /usr/bin/mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-0 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-41c69f8f-30e2-4685-9c5c-c605898c5537/osd-data-d073e8b3-0b89-4271-af5b-83045fd000dc --path /var/lib/ceph/osd/ceph-0 --no-mon-config Running command: /usr/bin/ln -snf /dev/ceph-41c69f8f-30e2-4685-9c5c-c605898c5537/osd-data-d073e8b3-0b89-4271-af5b-83045fd000dc /var/lib/ceph/osd/ceph-0/block Running command: /usr/bin/chown -h ceph:ceph /var/lib/ceph/osd/ceph-0/block Running command: /usr/bin/chown -R ceph:ceph /dev/mapper/ceph--41c69f8f--30e2--4685--9c5c--c605898c5537-osd--data--d073e8b3--0b89--4271--af5b--83045fd000dc Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-0 Running command: /usr/bin/systemctl enable ceph-volume@lvm-0-087eee15-6561-40a3-8fe4-9583ba64a4ff stderr: Created symlink /etc/systemd/system/multi-user.target.wants/ceph-volume@lvm-0-087eee15-6561-40a3-8fe4-9583ba64a4ff.service
/usr/lib/systemd/system/ceph-volume@.service. Running command: /usr/bin/systemctl enable --runtime ceph-osd@0 stderr: Created symlink /run/systemd/system/ceph-osd.target.wants/ceph osd@0.service /usr/lib/systemd/system/ceph-osd@.service. Running command: /usr/bin/systemctl start ceph-osd@0 stderr: Running in chroot, ignoring request: start --> ceph-volume lvm activate successful for osd ID: 0 运行
fsck
和repair
命令。语法
ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-OSD_ID ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-OSD_ID
示例
[root@osd ~]# ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-0 fsck success
[root@osd ~]# ceph-bluestore-tool repair --path /var/lib/ceph/osd/ceph-0 repair success
退出容器后,从
/root
目录中复制/etc/systemd/system/ceph-osd@.service
单元文件。示例
[root@osd ~]# cp /etc/systemd/system/ceph-osd@.service /root/ceph-osd@.service.modified [root@osd ~]# cp /root/ceph-osd@.service.backup /etc/systemd/system/ceph-osd@.service
重新加载
systemd
管理器配置。示例
[root@osd ~]# systemctl daemon-reload
将
/run/ceph-osd@OSD_ID.service-cid
文件移到/tmp
。示例
[root@osd ~]# mv /run/ceph-osd@0.service-cid /tmp
重新启动与
OSD_ID
关联的 OSD 服务。语法
[root@osd ~]# systemctl restart ceph-osd@OSD_ID.service
示例
[root@osd ~]# systemctl restart ceph-osd@0.service
其它资源
- 有关停止 OSD 的更多信息,请参阅《 红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph守护进程"一节 。