11.3. 生成可读的核心转储文件
当 Ceph 守护进程意外终止分段错误时,请收集关于其故障的信息,并将其提供给红帽支持工程师。
此类信息可加快初步调查的速度。此外,支持工程师还可以将核心转储文件中的信息与红帽 Ceph 存储集群已知问题进行比较。
11.3.1. 先决条件 复制链接链接已复制到粘贴板!
安装
ceph-debuginfo软件包(如果尚未安装)。启用包含
ceph-debuginfo软件包的存储库:Red Hat Enterprise Linux 7:
subscription-manager repos --enable=rhel-7-server-rhceph-4-DAEMON-debug-rpms
subscription-manager repos --enable=rhel-7-server-rhceph-4-DAEMON-debug-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据 Ceph 节点的类型,将
DAEMON替换为osd或mon。Red Hat Enterprise Linux 8:
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpms
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
ceph-debuginfo软件包:yum install ceph-debuginfo
[root@mon ~]# yum install ceph-debuginfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
确定安装了
gdb软件包,如果未安装,请安装它:yum install gdb
[root@mon ~]# yum install gdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow
根据部署类型继续执行此步骤:
11.3.2. 在裸机部署中生成可读的核心转储文件 复制链接链接已复制到粘贴板!
如果您在裸机上使用 Red Hat Ceph Storage,请按照以下步骤生成核心转储文件。
流程
为 Ceph 生成核心转储文件。
通过在
/etc/systemd/system.conf文件中添加以下参数,为内核转储文件设置正确的 ulimit:DefaultLimitCORE=infinity
DefaultLimitCORE=infinityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注释掉 Ceph 守护进程服务文件中的
PrivateTmp=true参数,默认位于/lib/systemd/system/CLUSTER_NAME-DAEMON@.service:PrivateTmp=true
[root@mon ~]# PrivateTmp=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
suid_dumpable标志设置为2,以允许 Ceph 守护进程生成转储核心文件:sysctl fs.suid_dumpable=2
[root@mon ~]# sysctl fs.suid_dumpable=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整内核转储文件位置:
sysctl kernel.core_pattern=/tmp/core
[root@mon ~]# sysctl kernel.core_pattern=/tmp/coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
[Coredump]部分中添加以下行修改/etc/systemd/coredump.conf文件:ProcessSizeMax=8G ExternalSizeMax=8G JournalSizeMax=8G
ProcessSizeMax=8G ExternalSizeMax=8G JournalSizeMax=8GCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入
systemd服务以使更改生效:systemctl daemon-reload
[root@mon ~]# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Ceph 守护进程使更改生效:
systemctl restart ceph-DAEMON@ID
[root@mon ~]# systemctl restart ceph-DAEMON@IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定守护进程类型(
osd或mon)及其 ID(OSD 的数字,或 monitor 的短主机名),例如:systemctl restart ceph-osd@1
[root@mon ~]# systemctl restart ceph-osd@1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 重现失败,例如尝试再次启动 守护进程。
使用 GNU Debugger(GDB)从应用程序核心转储文件中生成可读回追踪:
gdb /usr/bin/ceph-DAEMON /tmp/core.PID
gdb /usr/bin/ceph-DAEMON /tmp/core.PIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定失败进程的守护进程类型和 PID,例如:
gdb /usr/bin/ceph-osd /tmp/core.123456
$ gdb /usr/bin/ceph-osd /tmp/core.123456Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 GDB 命令提示中,输入设置 pag
并设置日志的命令来禁用分页并启用文件日志:(gdb) set pag off (gdb) set log on
(gdb) set pag off (gdb) set log onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过输入
bt full,将backtrace命令应用到进程的所有线程:(gdb) thr a a bt full
(gdb) thr a a bt fullCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在生成回溯追踪后,输入
设置的 log off 来关闭日志记录:(gdb) set log off
(gdb) set log offCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将日志文件
gdb.txt传输到您访问红帽客户门户的系统,并将其附加到支持票据。
11.3.3. 在容器化部署中生成可读的核心转储文件 复制链接链接已复制到粘贴板!
如果您在容器中使用 Red Hat Ceph Storage,请按照以下步骤生成核心转储文件。该流程涉及捕获内核转储文件的两个场景:
- 当 Ceph 进程因为 SIGILL、SIGTRAP、SIGABRT 或 SIGSEGV 错误而意外终止时。
或
- 例如,用于调试 Ceph 进程等问题的手动消耗 CPU 周期较高,或者没有响应。
先决条件
- 对运行 Ceph 容器的容器节点的根级别访问权限。
- 安装适当的调试软件包。
-
安装 GNU Project Debugger(
gdb)软件包。
流程
如果 Ceph 进程因为 SIGILL、SIGTRAP、SIGABRT 或 SIGSEGV 错误意外终止:
在运行失败 Ceph 进程的容器的节点上,将内核模式设置为
systemd-coredump服务,例如:echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_pattern
[root@mon]# echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_patternCopy to Clipboard Copied! Toggle word wrap Toggle overflow 监视由于 Ceph 进程导致的下一个容器失败,并在
/var/lib/systemd/coredump/目录中搜索内核转储文件,例如:ls -ltr /var/lib/systemd/coredump
[root@mon]# ls -ltr /var/lib/systemd/coredump total 8232 -rw-r-----. 1 root root 8427548 Jan 22 19:24 core.ceph-osd.167.5ede29340b6c4fe4845147f847514c12.15622.1584573794000000.xzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 Ceph 监控器和 Ceph Manager 手动捕获核心转储文件 :
从容器中获取 Ceph 守护进程的
ceph-mon软件包详情:Red Hat Enterprise Linux 7:
docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@mon]# docker exec -it NAME /bin/bash [root@mon]# rpm -qa | grep cephCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8:
podman exec -it NAME /bin/bash rpm -qa | grep ceph
[root@mon]# podman exec -it NAME /bin/bash [root@mon]# rpm -qa | grep cephCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 NAME 替换为 Ceph 容器的名称。
创建备份副本并打开 以编辑
ceph-mon@.service文件:cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.orig
[root@mon]# cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.origCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ceph-mon@.service文件中,将这三个选项添加到[Service]部分,每个选项位于单独的行上:--pid=host \ --ipc=host \ --cap-add=SYS_PTRACE \
--pid=host \ --ipc=host \ --cap-add=SYS_PTRACE \Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Ceph 监控守护进程:
语法
systemctl restart ceph-mon@MONITOR_ID
systemctl restart ceph-mon@MONITOR_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号。
示例
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ceph 监控容器中安装
gdb软件包:Red Hat Enterprise Linux 7:
docker exec -it ceph-mon-MONITOR_ID /bin/bash
[root@mon]# docker exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8:
podman exec -it ceph-mon-MONITOR_ID /bin/bash
[root@mon]# podman exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号。
查找进程 ID:
语法
ps -aef | grep PROCESS | grep -v run
ps -aef | grep PROCESS | grep -v runCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 PROCESS 替换为失败进程的名称,如
ceph-mon。示例
ps -aef | grep ceph-mon | grep -v run
[root@mon]# ps -aef | grep ceph-mon | grep -v run ceph 15390 15266 0 18:54 ? 00:00:29 /usr/bin/ceph-mon --cluster ceph --setroot ceph --setgroup ceph -d -i 5 ceph 18110 17985 1 19:40 ? 00:00:08 /usr/bin/ceph-mon --cluster ceph --setroot ceph --setgroup ceph -d -i 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成内核转储文件:
语法
gcore ID
gcore IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 ID 替换为您在上一步中获取的失败进程的 ID,例如
18110:示例
gcore 18110
[root@mon]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证核心转储文件是否已正确生成。
示例
ls -ltr
[root@mon]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ceph 监控容器外部复制内核转储文件:
Red Hat Enterprise Linux 7:
docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
[root@mon]# docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmpCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8:
podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
[root@mon]# podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号,并将 MONITOR_PID 替换为进程 ID 号。
恢复
ceph-mon@.service文件的备份副本:cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.service
[root@mon]# cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Ceph 监控守护进程:
语法
systemctl restart ceph-mon@MONITOR_ID
systemctl restart ceph-mon@MONITOR_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号。
示例
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传内核转储文件以获取红帽支持分析,请参阅第 4 步。
为 Ceph OSD 手动捕获核心转储文件:
从容器中获取 Ceph 守护进程的
ceph-osd软件包详情:Red Hat Enterprise Linux 7:
docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@osd]# docker exec -it NAME /bin/bash [root@osd]# rpm -qa | grep cephCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8:
podman exec -it NAME /bin/bash rpm -qa | grep ceph
[root@osd]# podman exec -it NAME /bin/bash [root@osd]# rpm -qa | grep cephCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 NAME 替换为 Ceph 容器的名称。
在运行 Ceph 容器的节点中,为同一版本的
ceph-osd软件包安装 Ceph 软件包:Red Hat Enterprise Linux 7:
yum install ceph-osd
[root@osd]# yum install ceph-osdCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8:
dnf install ceph-osd
[root@osd]# dnf install ceph-osdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,请先启用适当的存储库。详情请参阅《安装指南 》中的启用红帽 Ceph 存储存储库 一节。
查找失败的进程的 ID:
ps -aef | grep PROCESS | grep -v run
ps -aef | grep PROCESS | grep -v runCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 PROCESS 替换为失败进程的名称,如
ceph-osd。ps -aef | grep ceph-osd | grep -v run
[root@osd]# ps -aef | grep ceph-osd | grep -v run ceph 15390 15266 0 18:54 ? 00:00:29 /usr/bin/ceph-osd --cluster ceph --setroot ceph --setgroup ceph -d -i 5 ceph 18110 17985 1 19:40 ? 00:00:08 /usr/bin/ceph-osd --cluster ceph --setroot ceph --setgroup ceph -d -i 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成内核转储文件:
gcore ID
gcore IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 ID 替换为您在上一步中获取的失败进程的 ID,例如
18110:gcore 18110
[root@osd]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证核心转储文件是否已正确生成。
ls -ltr
[root@osd]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传内核转储文件供红帽支持分析,请参见下一步。
- 将核心转储文件上传至红帽支持问题单中。详情请参阅向红帽支持工程师提供信息。