故障排除指南
Red Hat Ceph Storage 故障排除
摘要
第 1 章 初始故障排除 复制链接链接已复制到粘贴板!
本章包含以下内容的信息:
- 如何启动 Ceph 错误故障排除(第 1.1 节 “识别问题”)
-
大多数常见的
ceph health
错误消息(第 1.2 节 “了解ceph health
命令的输出”) - 大多数常见的 Ceph 日志错误消息(第 1.3 节 “了解 Ceph 日志”)
1.1. 识别问题 复制链接链接已复制到粘贴板!
要确定遇到的 Red Hat Ceph Storage 出错的原因,请回答以下问题:
- 使用不受支持的配置时可能会产生某些问题。确保您的配置被支持。详情请参阅 Red Hat Ceph Storage: 支持的配置 文章。
您知道哪个 Ceph 组件导致了此问题吗?
- 否。后跟 第 1.1.1 节 “诊断 Ceph 存储集群的健康状况”。
- 监视器.请参阅 第 4 章 监控器故障排除。
- OSD.请参阅 第 5 章 OSD 故障排除。
- 放置组.请参阅 第 7 章 PG 故障排除。
1.1.1. 诊断 Ceph 存储集群的健康状况 复制链接链接已复制到粘贴板!
此流程列出了诊断 Ceph 存储集群健康状况的基本步骤。
检查集群的整体状态:
ceph health detail
# ceph health detail
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令返回
HEALTH_WARN
或HEALTH_ERR
,详情请参阅 第 1.2 节 “了解ceph health
命令的输出”。-
检查 Ceph 日志中是否列出 第 1.3 节 “了解 Ceph 日志” 中列出的任何错误消息。日志默认位于
/var/log/ceph/
目录中。 - 如果日志没有包含足够数量的信息,提高调试级别并尝试重现失败的操作。详情请查看 第 2 章 配置日志记录。
-
使用
ceph-medic
实用程序诊断存储集群。如需了解更多详细信息 ,请参阅《红帽 Ceph 存储 3 管理指南》的使用ceph-medic
诊断 Ceph 存储集群 部分。
1.2. 了解 ceph health 命令的输出 复制链接链接已复制到粘贴板!
ceph health
命令返回有关 Ceph 存储集群状态的信息:
-
HEALTH_OK
表示集群处于健康状态。 -
HEALTH_WARN
表示警告。在某些情况下,Ceph 状态会自动返回到HEALTH_OK
,例如当 Ceph 完成重新平衡过程时。但是,如果集群处于HEALTH_WARN
状态较长,请考虑进一步排除故障。 -
HEALTH_ERR
表示需要您立即关注的更严重问题。
使用 ceph health detail
和 ceph -s
命令获取更详细的输出。
下表列出了与 monitor、OSD 和 PG 相关的最常见 HEALTH_ERR
和 HEALTH_WARN
错误消息。这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复问题的特定程序。
错误消息 | 请查看 |
---|---|
| |
| |
| |
|
错误消息 | 请查看 |
---|---|
| |
|
错误消息 | 请查看 |
---|---|
| |
| |
| |
| |
| |
| |
|
错误消息 | 请查看 |
---|---|
| |
| |
| |
| |
| |
| |
|
1.3. 了解 Ceph 日志 复制链接链接已复制到粘贴板!
默认情况下,Ceph 将其日志存储在 /var/log/ceph/
目录中。
<cluster-name>.log
是包含全局集群事件的主要集群日志文件。默认情况下,这个日志名为 ceph.log
。只有 monitor 主机包含主要的集群日志。
每一 OSD 和 monitor 具有自己的日志文件,名为 <cluster-name>-osd.<number>.log
和 <cluster-name>-mon.<hostname>.log
。
当您提高 Ceph 子系统的调试级别时,Ceph 也为这些子系统生成新的日志文件。有关日志的详情请参考 第 2 章 配置日志记录。
下表列出了与 monitor 和 OSD 相关的最常见 Ceph 日志消息:这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复它们的特定程序。
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 监控日志 | |
| 监控日志 | |
| 监控日志 |
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 主集群日志 | |
| OSD 日志 | |
| OSD 日志 |
第 2 章 配置日志记录 复制链接链接已复制到粘贴板!
本章介绍如何为各种 Ceph 子系统配置日志记录。
日志记录非常耗费资源。另外,详细日志记录可以在相对较短的时间内生成大量数据。您在集群的特定子系统中遇到问题,仅启用该子系统的日志记录。如需更多信息,请参阅 第 2.1 节 “Ceph 子系统”。
此外,还要考虑设置日志文件轮转。详情请查看 第 2.4 节 “加快日志轮转”。
修复遇到的任何问题后,将子系统日志和内存级别更改为默认值。有关所有 Ceph 子系统及其默认值的列表,请参见 附录 A, 子系统默认日志记录级别值。
您可以通过以下方法配置 Ceph 日志:
-
在运行时使用
ceph
命令。这是最常见的方法。详情请查看 第 2.2 节 “在运行时配置日志记录”。 - 更新 Ceph 配置文件.如果您在启动集群时遇到问题,请使用这种方法。详情请查看 第 2.3 节 “在 Ceph 配置文件中配置日志记录”。
2.1. Ceph 子系统 复制链接链接已复制到粘贴板!
本节包含 Ceph 子系统及其日志记录级别的信息。
了解 Ceph 子系统及其日志记录级别
Ceph 由多个子系统组成:每个子系统都有其日志记录级别:
-
输出默认存储在
/var/log/ceph/
目录中的日志(日志级别) - 存储在内存缓存中的日志(内存级别)
通常,Ceph 不会将内存中存储的日志发送到输出日志,除非:
- 引发致命信号
- 源代码中触发了 assert
- 您请求它
您可以为每个子系统设置不同的值。Ceph 日志记录级别按 1
到 20
的规模运行,其中 1
是 terse,20
详细。
对日志级别和内存级别使用单个值,以将它们都设置为相同的值。例如: debug_osd = 5
将 ceph-osd
守护进程的 debug 级别设置为 5
。
要将不同的值用于输出日志级别和内存级别,请使用正斜杠(/
)来分隔值。例如,debug_mon = 1/5
将 ceph-mon
守护进程的 debug 日志级别设置为 1
,并将其内存日志级别设置为 5
。
最常用的 Ceph 子系统及其默认值
子系统 | 日志级别 | 内存级别 | 描述 |
---|---|---|---|
| 1 | 5 | 管理套接字 |
| 1 | 5 | Authentication |
| 0 | 5 |
任何使用 |
| 1 | 5 | FileStore OSD 后端 |
| 1 | 5 | OSD 日志 |
| 1 | 5 | 元数据服务器 |
| 0 | 5 | monitor 客户端处理大部分 Ceph 守护进程和 monitor 之间的通信 |
| 1 | 5 | monitor |
| 0 | 5 | Ceph 组件之间的消息传递系统 |
| 0 | 5 | OSD 守护进程 |
| 0 | 5 | 监控用于建立共识的算法 |
| 0 | 5 | 可靠的自主分布式对象存储,Ceph 的核心组件 |
| 0 | 5 | Ceph 块设备 |
| 1 | 5 | Ceph 对象网关 |
日志输出示例
下例演示了当您提高 monitor 和 OSD 的详细程度时,日志中的消息类型。
监控调试设置
debug_ms = 5 debug_mon = 20 debug_paxos = 20 debug_auth = 20
debug_ms = 5
debug_mon = 20
debug_paxos = 20
debug_auth = 20
monitor 调试设置的日志输出示例
OSD 调试设置
debug_ms = 5 debug_osd = 20 debug_filestore = 20 debug_journal = 20
debug_ms = 5
debug_osd = 20
debug_filestore = 20
debug_journal = 20
OSD 调试设置的日志输出示例
另请参阅
2.2. 在运行时配置日志记录 复制链接链接已复制到粘贴板!
在运行时激活 Ceph 调试输出 dout()
:
ceph tell <type>.<id> injectargs --debug-<subsystem> <value> [--<name> <value>]
ceph tell <type>.<id> injectargs --debug-<subsystem> <value> [--<name> <value>]
替换:
-
<type>
使用 Ceph 守护进程的类型(osd
、mon
或mds
) -
<id>
使用特定的 Ceph 守护进程 ID。另外,使用*
将运行时设置应用到特定类型的所有守护进程。 -
<subsystem>
使用特定的子系统.详情请查看 第 2.1 节 “Ceph 子系统”。 -
<value>
使用从1
到20
的数字,其中1
是 terse,20
详细
例如,将名为 osd.0
的 OSD 子系统的日志级别设置为 0,将内存级别设置为 5:
ceph tell osd.0 injectargs --debug-osd 0/5
# ceph tell osd.0 injectargs --debug-osd 0/5
要在运行时查看配置设置:
-
使用正在运行的 Ceph 守护进程登录主机,例如
ceph-osd
或ceph-mon
。 显示配置:
ceph daemon <name> config show | less
ceph daemon <name> config show | less
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 Ceph 守护进程的名称,例如:
ceph daemon osd.0 config show | less
# ceph daemon osd.0 config show | less
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 第 2.3 节 “在 Ceph 配置文件中配置日志记录”
- Red Hat Ceph Storage 3 配置指南中 的日志配置 参考 一章
2.3. 在 Ceph 配置文件中配置日志记录 复制链接链接已复制到粘贴板!
要激活 Ceph 调试输出,在启动时 dout()
将调试设置添加到 Ceph 配置文件。
-
对于每个守护进程常见的子系统,请在
[global]
部分添加设置。 -
对于特定守护进程的子系统,请在守护进程部分中添加设置,如
[mon]
、[osd]
或[mds]
。
例如:
另请参阅
- 第 2.1 节 “Ceph 子系统”
- 第 2.2 节 “在运行时配置日志记录”
- Red Hat Ceph Storage 3 配置指南中 的日志配置 参考 一章
2.4. 加快日志轮转 复制链接链接已复制到粘贴板!
提高 Ceph 组件的调试级别可能会产生大量数据。如果您几乎有完整的磁盘,可以通过修改 Ceph 日志轮转文件 /etc/logrotate.d/ceph
来加快日志轮转。Cron 作业调度程序使用此文件来调度日志轮转。
步骤: 加速日志轮转
在轮转频率后向日志轮转文件中添加大小设置:
rotate 7 weekly size <size> compress sharedscripts
rotate 7 weekly size <size> compress sharedscripts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,在日志文件达到 500 MB 时轮转日志文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
crontab
编辑器:crontab -e
$ crontab -e
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个条目来检查
/etc/logrotate.d/ceph
文件。例如:要指示 Cron 每 30 分钟检查/etc/logrotate.d/ceph
:30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1
30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 红帽企业 Linux 7 的《系统管理员指南》中的计划使用 Cron 重复的作业 章节。
第 3 章 网络问题故障排除 复制链接链接已复制到粘贴板!
本章列出了与网络和网络时间协议(NTP)连接的基本故障排除步骤。
3.1. 基本网络故障排除 复制链接链接已复制到粘贴板!
红帽 Ceph 存储很大程度上依赖于可靠的网络连接。红帽 Ceph 存储节点使用网络相互通信。网络问题可能会导致 Ceph OSD 存在很多问题,如断路器,或者错误报告为 down
。网络问题也可能导致 Ceph monitor 的时钟偏移错误。此外,数据包丢失、高延迟或有限带宽可能会影响集群性能和稳定性。
步骤: 基本网络故障排除
在对 Ceph 存储集群中可能发生的网络问题进行故障排除时,安装
net-tools
软件包可能会有所帮助:示例
yum install net-tools yum install telnet
[root@mon ~]# yum install net-tools [root@mon ~]# yum install telnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Ceph 配置文件中的
cluster_network
和public_network
参数是否包含正确的值:示例
cat /etc/ceph/ceph.conf | grep net cluster_network = 192.168.1.0/24 public_network = 192.168.0.0/24
[root@mon ~]# cat /etc/ceph/ceph.conf | grep net cluster_network = 192.168.1.0/24 public_network = 192.168.0.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证网络接口是否已启动:
示例
ip link list
[root@mon ~]# ip link list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp22s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 40:f2:e9:b8:a0:48 brd ff:ff:ff:ff:ff:ff
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Ceph 节点能够使用它们的短主机名互相访问。在存储集群的每个节点上验证它:
语法
ping SHORT_HOST_NAME
ping SHORT_HOST_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ping osd01
[root@mon ~]# ping osd01
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用防火墙,请确保 Ceph 节点能够在其适当的端口上访问其他节点。
firewall-cmd
和telnet
工具可以验证端口状态,如果分别打开端口:语法
firewall-cmd --info-zone=ZONE telnet IP_ADDRESS PORT
firewall-cmd --info-zone=ZONE telnet IP_ADDRESS PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证接口计数器上没有错误。验证节点之间的网络连接具有预期的延迟,并且没有数据包丢失。
使用
ethtool
命令:语法
ethtool -S INTERFACE
ethtool -S INTERFACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ifconfig
命令:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
netstat
命令:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于性能问题,除了延迟检查并验证存储集群所有节点之间的网络带宽外,使用
iperf3
工具。iperf3
工具在服务器和客户端之间进行简单的点对点网络带宽测试。在您要检查带宽的 Red Hat Ceph Storage 节点上安装
iperf3
软件包:示例
yum install iperf3
[root@mon ~]# yum install iperf3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Red Hat Ceph Storage 节点上启动
iperf3
服务器:示例
iperf3 -s
[root@mon ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认端口为 5201,但可使用
-P
命令参数设置。在不同的 Red Hat Ceph Storage 节点上启动
iperf3
客户端:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此输出显示红帽 Ceph 存储节点之间的网络带宽 1.1 Gbits/秒,在测试过程中不会重新传输(
Retr
)。红帽建议您验证存储集群中所有节点之间的网络带宽。
确保所有节点具有相同的网络互连速度。连接较慢的节点可能会减慢连接速度更快的节点。另外,确保间隔交换机链接可以处理附加节点的聚合带宽:
语法
ethtool INTERFACE
ethtool INTERFACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 红帽企业 Linux 7 的网络指南.
- 请参阅《 红帽 Ceph 存储配置指南 》中的 验证和配置 MTU 值 部分。
- 与在客户门户上对网络问题进行故障排除 的知识库文章和解决方案.
3.2. 基本 NTP 故障排除 复制链接链接已复制到粘贴板!
本节介绍基本的 NTP 故障排除步骤。
步骤: 基本 NTP 故障排除
验证
ntpd
守护进程是否在 monitor 主机上运行:systemctl status ntpd
# systemctl status ntpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ntpd
没有运行,请启用并启动它:systemctl enable ntpd systemctl start ntpd
# systemctl enable ntpd # systemctl start ntpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保
ntpd
正确同步时钟:ntpq -p
$ ntpq -p
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 有关高级 NTP 故障排除步骤,请参阅红帽客户门户网站中如何对 NTP 问题 解决方案进行故障排除。
另请参阅
第 4 章 监控器故障排除 复制链接链接已复制到粘贴板!
本章包含关于如何修复与 Ceph 监控器相关的最常见错误的信息。
开始前
- 验证您的网络连接。详情请查看 第 3 章 网络问题故障排除。
4.1. 与 monitor 相关的大多数通用错误信息 复制链接链接已复制到粘贴板!
下表列出了 ceph health detail
命令返回或 Ceph 日志中最常包含的错误消息。这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复问题的特定程序。
错误消息 | 请查看 |
---|---|
| |
| |
| |
|
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 监控日志 | |
| 监控日志 | |
| 监控日志 |
4.1.1. Quorum 以外的 monitor 复制链接链接已复制到粘贴板!
一个或多个 monitor 标记为 down
,但其他 monitor 仍然能够形成仲裁。另外,ceph health detail
命令返回类似如下的错误消息:
HEALTH_WARN 1 mons down, quorum 1,2 mon.b,mon.c mon.a (rank 0) addr 127.0.0.1:6789/0 is down (out of quorum)
HEALTH_WARN 1 mons down, quorum 1,2 mon.b,mon.c
mon.a (rank 0) addr 127.0.0.1:6789/0 is down (out of quorum)
此 Means 是什么
Ceph 由于各种原因将 monitor 标记为 down
。
如果 ceph-mon
守护进程没有运行,它可能会有损坏的存储或者其它错误阻止守护进程启动。另外,/var/
分区可能已满。因此,ceph-mon
无法对默认位于 /var/lib/ceph/mon-<short-host-name>/store.db
的存储执行任何操作,并终止。
如果 ceph-mon
守护进程正在运行,但 monitor 没有仲裁并标记为 down
,问题的原因取决于 monitor 状态:
-
如果 monitor 处于 探测 状态超过预期,则无法找到其他 monitor。这个问题可能是由网络问题造成的,或者 monitor 可能会有一个过时的 monitor map(
monmap
),并尝试访问错误的 IP 地址上的其他 monitor。另外,如果monmap
是最新的,则 monitor 的时钟可能无法同步。 - 如果 monitor 处于 选择 状态超过预期,则 monitor 的时钟可能无法同步。
- 如果 monitor 将自己的状态从 同步 变为开 机和 返回,集群状态将会发展。这意味着,它生成的新 map 的速度要快于同步进程可以处理的速度。
- 如果 monitor 将自身标记为 领导或 工作 机,则它认为自己处于仲裁状态,而剩余的集群则确定它不会处于仲裁状态。此问题可能是时钟同步失败造成的。
要排除这个问题,请执行以下操作
验证
ceph-mon
守护进程是否正在运行。如果没有,请启动它:systemctl status ceph-mon@<host-name> systemctl start ceph-mon@<host-name>
systemctl status ceph-mon@<host-name> systemctl start ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用运行守护进程的主机的短名称替换
<host-name>
。不确定时使用hostname -s
命令。-
如果您无法启动
ceph-mon
,请按照ceph-mon
守护进程中的步骤启动。 -
如果您能够启动
ceph-mon
守护进程,但标记为down
,请按照ceph-mon
守护进程运行中的步骤进行操作,但 Still Marked 为down
。
ceph-mon
守护进程无法启动
-
检查对应的 monitor 日志,默认位于
/var/log/ceph/ceph-mon.<host-name>.log
。 如果日志包含类似于下列错误消息的错误消息,monitor 可能具有损坏的存储:
Corruption: error in middle of record Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Corruption: error in middle of record Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要解决这个问题,请替换 monitor。请参阅 第 4.4 节 “替换失败的 monitor”。
如果日志包含类似如下的错误消息,
/var/
分区可能已满。从/var/
删除任何不必要的数据。Caught signal (Bus error)
Caught signal (Bus error)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要不要手动从 monitor 目录中删除任何数据。反之,使用
ceph-monstore-tool
紧凑它。详情请查看 第 4.5 节 “压缩 monitor 存储”。- 如果您看到任何其他错误消息,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
ceph-mon
Daemon 运行,但 Still Marked 作为 down
在没有仲裁的 monitor 主机中,使用
mon_status
命令检查其状态:ceph daemon <id> mon_status
ceph daemon <id> mon_status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 monitor ID 替换
<id>
,例如:ceph daemon mon.a mon_status
# ceph daemon mon.a mon_status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果状态为 探测,请验证
mon_status
输出中其他 monitor 的位置。-
如果地址不正确,monitor 带有不正确的 monitor 映射(
monmap
)。要解决这个问题,请参阅 第 4.2 节 “注入 monitor map”。 - 如果地址正确,请验证 monitor 时钟是否已同步。详情请查看 第 4.1.2 节 “时钟偏移”。另外,对任何网络问题进行故障排除,请参阅 第 3 章 网络问题故障排除。
-
如果地址不正确,monitor 带有不正确的 monitor 映射(
- 如果状态为选中状态 , 请验证 monitor 时钟是否同步。请参阅 第 4.1.2 节 “时钟偏移”。
- 如果状态从 选择 同步变为 同步,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
- 如果 monitor 是 领导 机或工作 机, 请验证 monitor 时钟是否已同步。请参阅 第 4.1.2 节 “时钟偏移”。如果同步时钟无法解决问题,请打开支持问题单。详情请查看 第 9 章 联系红帽支持服务。
另请参阅
- 第 4.1.4 节 “了解 monitor 状态”
- 《红帽 Ceph 存储 3 管理指南 》 中的按实例启动、停止和重新启动后台程序 一节
- 《红帽 Ceph 存储 3 管理指南 》中的使用管理 套接字 一节
4.1.2. 时钟偏移 复制链接链接已复制到粘贴板!
Ceph 监控器没有仲裁,ceph health detail
命令输出包含类似如下的错误消息:
mon.a (rank 0) addr 127.0.0.1:6789/0 is down (out of quorum) mon.a addr 127.0.0.1:6789/0 clock skew 0.08235s > max 0.05s (latency 0.0045s)
mon.a (rank 0) addr 127.0.0.1:6789/0 is down (out of quorum)
mon.a addr 127.0.0.1:6789/0 clock skew 0.08235s > max 0.05s (latency 0.0045s)
此外,Ceph 日志包含类似如下的错误消息:
2015-06-04 07:28:32.035795 7f806062e700 0 log [WRN] : mon.a 127.0.0.1:6789/0 clock skew 0.14s > max 0.05s 2015-06-04 04:31:25.773235 7f4997663700 0 log [WRN] : message from mon.1 was stamped 0.186257s in the future, clocks not synchronized
2015-06-04 07:28:32.035795 7f806062e700 0 log [WRN] : mon.a 127.0.0.1:6789/0 clock skew 0.14s > max 0.05s
2015-06-04 04:31:25.773235 7f4997663700 0 log [WRN] : message from mon.1 was stamped 0.186257s in the future, clocks not synchronized
此 Means 是什么
clock skew
错误消息表示 monitor 的时钟没有同步。时钟同步很重要,因为 monitor 依赖于时间精度,如果时钟不同步,则行为不可预测。
mon_clock_drift_allowed
参数决定时钟之间的差别是容许的。默认情况下,此参数设置为 0.05 秒。
在未进行之前测试的情况下,不要更改 mon_clock_drift_allowed
的默认值。更改此值可能会影响 monitor 和 Ceph 存储群集的稳定性。
clock skew
错误的原因可能包括网络问题或者网络时间协议(NTP)同步问题(如果已配置)。此外,时间同步无法在虚拟机上部署的 monitor 上正常工作。
要排除这个问题,请执行以下操作
- 验证您的网络是否正常工作。详情请查看 第 3 章 网络问题故障排除。特别是,如果您使用 NTP,则对 NTP 客户端的任何问题进行故障排除。如需更多信息,请参阅 第 3.2 节 “基本 NTP 故障排除”。
- 如果您使用远程 NTP 服务器,请考虑在网络上部署您自己的 NTP 服务器。详情请查看 Red Hat Enterprise Linux 7 的《系统管理员指南》 中的使用 ntpd 配置 NTP 一章。
- 如果您不使用 NTP 客户端,请设置一个。详情请参阅 Red Hat Enterprise Linux 或 Ubuntu 的红帽 Ceph 存储 3 安装指南中的为 红帽 Ceph 存储配置网络时间协议 一节。
- 如果您使用虚拟机托管 monitor,请将其移至裸机主机。不支持使用虚拟机托管 monitor。详情请查看红帽客户门户网站中的 Red Hat Ceph Storage: 支持的配置 文章。
Ceph 仅评估每五分钟的时间同步,因此修复问题与清除 clock skew
信息之间会有一个延迟。
另请参阅
4.1.3. monitor 存储正在获取 Too Big 复制链接链接已复制到粘贴板!
ceph health
命令返回类似如下的错误消息:
mon.ceph1 store is getting too big! 48031 MB >= 15360 MB -- 62% avail
mon.ceph1 store is getting too big! 48031 MB >= 15360 MB -- 62% avail
此 Means 是什么
Ceph 监控存储实际上是一个 LevelDB 数据库,将条目存储为键值对。数据库包含一个集群映射,默认位于 /var/lib/ceph/mon/<cluster-name>-<short-host-name>/store.db
。
查询大型 monitor 存储可能需要时间。因此,在响应客户端查询时可能会延迟 monitor。
另外,如果 /var/
分区已满,monitor 无法对存储执行任何写入操作并终止。有关此问题故障排除的详情,请查看 第 4.1.1 节 “Quorum 以外的 monitor”。
要排除这个问题,请执行以下操作
检查数据库的大小:
du -sch /var/lib/ceph/mon/<cluster-name>-<short-host-name>/store.db
du -sch /var/lib/ceph/mon/<cluster-name>-<short-host-name>/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定集群的名称以及
ceph-mon
正在运行的主机的短主机名,例如:du -sch /var/lib/ceph/mon/ceph-host1/store.db
# du -sch /var/lib/ceph/mon/ceph-host1/store.db 47G /var/lib/ceph/mon/ceph-ceph1/store.db/ 47G total
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 紧凑 monitor 存储.详情请查看 第 4.5 节 “压缩 monitor 存储”。
另请参阅
4.1.4. 了解 monitor 状态 复制链接链接已复制到粘贴板!
mon_status
命令返回有关 monitor 的信息,例如:
- 状态
- 等级
- 选举时期
-
monitor map(
monmap
)
如果 monitor 能够形成仲裁,请在 ceph
命令行工具中使用 mon_status
。
如果 monitor 无法形成仲裁,但 ceph-mon
守护进程正在运行,请使用管理套接字来执行 mon_status
。详情请参阅《红帽 Ceph 存储 3 管理指南 》中的"使用管理套接字 "一节。
输出示例 mon_status
monitor 状态
- leader
-
在选择阶段,monitor 会选举领导。领导机是等级最高的 monitor,即最低值的排名。在上例中,领导机是
mon.1
。 - Ppeon
- Cpeons 是仲裁中的 monitor,而不是领导。如果领导失败,则排名最高的学员将成为新的领导。
- Probing
-
如果 monitor 正在寻找其他 monitor,则 monitor 处于探测状态。例如,在启动 monitor 后,它们会被 探测到 在 monitor map(
monmap
)中指定的足够 monitor 组成仲裁为止。 - 选择
- 如果 monitor 处于选择领导状态,则它处于选举状态。通常,此状态会快速变化。
- 同步
- 如果正在与其他 monitor 同步以加入仲裁,则 monitor 处于同步状态。监控器存储容量越小,同步过程越快。因此,如果您有大量的存储,同步需要更长的时间。
4.2. 注入 monitor map 复制链接链接已复制到粘贴板!
如果 monitor 有一个过时的或损坏的 monitor map(monmap
),它就无法加入仲裁,因为它试图访问不正确的 IP 地址上的其他 monitor。
解决这个问题的最安全方法是从其他 monitor 获取并注入实际的 monitor map。请注意,此操作将覆盖 monitor 保存的现有 monitor map。
此流程演示了如何在其他 monitor 组成仲裁或至少有一个 monitor 具有正确的 monitor map 时注入 monitor map。如果所有 monitor 都有损坏的存储,因此也包含 monitor 映射,请参阅 第 4.3 节 “恢复 monitor 存储”。
步骤:注入 monitor map
如果剩余的 monitor 可以形成仲裁,请使用
ceph mon getmap
命令获取 monitor map:ceph mon getmap -o /tmp/monmap
# ceph mon getmap -o /tmp/monmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果剩余的 monitor 无法形成仲裁,并且至少有一个带有正确的 monitor 映射的 monitor,请从该 monitor 中复制它:
停止您要复制 monitor map 的 monitor:
systemctl stop ceph-mon@<host-name>
systemctl stop ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,停止在带有
host1
短主机名的主机上运行的 monitor:systemctl stop ceph-mon@host1
# systemctl stop ceph-mon@host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制 monitor map:
ceph-mon -i <id> --extract-monmap /tmp/monmap
ceph-mon -i <id> --extract-monmap /tmp/monmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要从中复制 monitor 映射的 monitor ID 替换
<id>
,例如:ceph-mon -i mon.a --extract-monmap /tmp/monmap
# ceph-mon -i mon.a --extract-monmap /tmp/monmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用损坏或过时的 monitor map 停止 monitor:
systemctl stop ceph-mon@<host-name>
systemctl stop ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,停止在带有
host2
短主机名的主机上运行的 monitor:systemctl stop ceph-mon@host2
# systemctl stop ceph-mon@host2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注入 monitor map:
ceph-mon -i <id> --inject-monmap /tmp/monmap
ceph-mon -i <id> --inject-monmap /tmp/monmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用损坏的或过时的 monitor map 将
<id>
替换为 monitor 的 ID,例如:ceph-mon -i mon.c --inject-monmap /tmp/monmap
# ceph-mon -i mon.c --inject-monmap /tmp/monmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 monitor,例如:
systemctl start ceph-mon@host2
# systemctl start ceph-mon@host2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您从另一个 monitor 复制了 monitor map,请也启动该 monitor,例如:
systemctl start ceph-mon@host1
# systemctl start ceph-mon@host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
4.3. 恢复 monitor 存储 复制链接链接已复制到粘贴板!
Ceph 监控器将 cluster map 存储在 LevelDB 等键值存储中。如果存储在 monitor 上损坏,monitor 会意外终止,无法再次启动。Ceph 日志可能包括以下错误:
Corruption: error in middle of record Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Corruption: error in middle of record
Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
生产集群必须使用至少三个 monitor,以便在出现故障时可以替换为另一个 monitor。然而,在某些情况下,所有 monitor 都可损坏存储。例如,当 monitor 节点配置错误的磁盘或文件系统设置时,断电可能会破坏底层文件系统。
如果存储在所有 monitor 中损坏,您可以使用 OSD 节点上存储的信息恢复它,方法是使用名为 ceph-monstore-tool
和 ceph-objectstore-tool
的工具。
此流程无法恢复以下信息:
- 元数据守护进程服务器(MDS)密钥环和映射
放置组设置:
-
full ratio
使用ceph pg set_full_ratio
命令设置 -
nearfull ratio
使用ceph pg set_nearfull_ratio
命令设置
-
切勿从旧备份恢复 monitor 存储。使用以下步骤从当前集群状态重建 monitor 存储,并从中恢复。
开始前
-
确定您安装了
rsync
实用程序和ceph-test
软件包。
步骤:恢复 monitor 存储
从带有损坏存储的 monitor 节点使用以下命令:
从所有 OSD 节点收集 cluster map:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用临时目录替换
<directory>
来存储收集的集群映射,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置适当的功能:
ceph-authtool <keyring> -n mon. --cap mon 'allow *' ceph-authtool <keyring> -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
ceph-authtool <keyring> -n mon. --cap mon 'allow *' ceph-authtool <keyring> -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用客户端管理密钥环的路径替换
<keyring>
,例如:ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' ceph-authtool /etc/ceph/ceph.client.admin.keyring -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
$ ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' $ ceph-authtool /etc/ceph/ceph.client.admin.keyring -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从收集的 map 重建 monitor 存储:
ceph-monstore-tool <directory> rebuild -- --keyring <keyring>
ceph-monstore-tool <directory> rebuild -- --keyring <keyring>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用第一步中的临时目录替换
<directory>
,使用到客户端管理密钥环的路径替换<keyring>
,例如:ceph-monstore-tool /tmp/mon-store rebuild -- --keyring /etc/ceph/ceph.client.admin.keyring
$ ceph-monstore-tool /tmp/mon-store rebuild -- --keyring /etc/ceph/ceph.client.admin.keyring
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您不使用
cephfx
身份验证,省略--keyring
选项:ceph-monstore-tool /tmp/mon-store rebuild
$ ceph-monstore-tool /tmp/mon-store rebuild
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 备份损坏的存储:
mv /var/lib/ceph/mon/<mon-ID>/store.db \ /var/lib/ceph/mon/<mon-ID>/store.db.corrupted
mv /var/lib/ceph/mon/<mon-ID>/store.db \ /var/lib/ceph/mon/<mon-ID>/store.db.corrupted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 monitor ID 替换
<mon-ID>
,例如<mon.0>
:mv /var/lib/ceph/mon/mon.0/store.db \ /var/lib/ceph/mon/mon.0/store.db.corrupted
# mv /var/lib/ceph/mon/mon.0/store.db \ /var/lib/ceph/mon/mon.0/store.db.corrupted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换损坏的存储:
mv /tmp/mon-store/store.db /var/lib/ceph/mon/<mon-ID>/store.db
mv /tmp/mon-store/store.db /var/lib/ceph/mon/<mon-ID>/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 monitor ID 替换
<mon-ID>
,例如<mon.0>
:mv /tmp/mon-store/store.db /var/lib/ceph/mon/mon.0/store.db
# mv /tmp/mon-store/store.db /var/lib/ceph/mon/mon.0/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对所有存储损坏的 monitor 重复此步骤。
更改新存储的所有者:
chown -R ceph:ceph /var/lib/ceph/mon/<mon-ID>/store.db
chown -R ceph:ceph /var/lib/ceph/mon/<mon-ID>/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 monitor ID 替换
<mon-ID>
,例如<mon.0>
:chown -R ceph:ceph /var/lib/ceph/mon/mon.0/store.db
# chown -R ceph:ceph /var/lib/ceph/mon/mon.0/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对所有存储损坏的 monitor 重复此步骤。
另请参阅
4.4. 替换失败的 monitor 复制链接链接已复制到粘贴板!
当 monitor 具有损坏的存储时,建议通过利用 Ansible 自动化应用来替换 monitor。
开始前
- 在删除 monitor 之前,请确保其他 monitor 正在运行并且能够形成仲裁。
步骤: 替换失败的 monitor
在 monitor 主机上,默认删除位于
/var/lib/ceph/mon/<cluster-name>-<short-host-name>
的 monitor 存储:rm -rf /var/lib/ceph/mon/<cluster-name>-<short-host-name>
rm -rf /var/lib/ceph/mon/<cluster-name>-<short-host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 monitor 主机的简短主机名和集群名称。例如,要从名为
remote
的集群中删除host1
上运行的 monitor 存储:rm -rf /var/lib/ceph/mon/remote-host1
# rm -rf /var/lib/ceph/mon/remote-host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 monitor map(
monmap
)中删除 monitor:ceph mon remove <short-host-name> --cluster <cluster-name>
ceph mon remove <short-host-name> --cluster <cluster-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 monitor 主机的简短主机名和集群名称。例如,要从名为
remote
的集群中删除host1
上运行的 monitor:ceph mon remove host1 --cluster remote
# ceph mon remove host1 --cluster remote
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 排除故障并修复与 monitor 主机底层文件系统或硬件相关的问题。
在 Ansible 管理节点中,通过运行
ceph-ansible
playbook 来重新部署 monitor:/usr/share/ceph-ansible/ansible-playbook site.yml
$ /usr/share/ceph-ansible/ansible-playbook site.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 第 4.1.1 节 “Quorum 以外的 monitor”
- 《红帽 Ceph 存储 3 管理指南 》中的 管理集群大小 章节
- Red Hat Enterprise Linux Red Hat Ceph Storage 3 安装指南中的部署 Red Hat Ceph Storage 一章
4.5. 压缩 monitor 存储 复制链接链接已复制到粘贴板!
当 monitor 存储的大小增大时,您可以对其进行压缩:
-
使用
ceph tell
命令动态使用。详情请参阅 紧凑 monitor 存储动态 过程。 -
ceph-mon
守护进程启动后。详情请参阅 在启动时紧凑 monitor 存储。 -
在
ceph-mon
守护进程没有运行时使用ceph-monstore-tool
。当前面提到的方法无法压缩 monitor 存储或者 monitor 超过仲裁时,可使用此方法,其日志包含Caught signal (Bus error)
错误消息。详情请参阅 使用ceph-monstore-tool
简化 monitor 存储。
当集群不处于 active+clean
状态或重新平衡过程中,监控器存储大小更改。因此,在完成重新平衡时,压缩 monitor 存储。另外,确保 PG 处于 active+clean
状态。
步骤:动态压缩 monitor 存储
要在 ceph-mon
守护进程运行时压缩 monitor 存储:
ceph tell mon.<host-name> compact
ceph tell mon.<host-name> compact
使用运行 ceph-mon
的主机的短主机名替换 <host-name>
。不确定时使用 hostname -s
命令。
ceph tell mon.host1 compact
# ceph tell mon.host1 compact
步骤:在启动时压缩 monitor 存储
将以下参数添加到 Ceph 配置的
[mon]
部分下:[mon] mon_compact_on_start = true
[mon] mon_compact_on_start = true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ceph-mon
守护进程:systemctl restart ceph-mon@<host-name>
systemctl restart ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用运行守护进程的主机的短名称替换
<host-name>
。不确定时使用hostname -s
命令。systemctl restart ceph-mon@host1
# systemctl restart ceph-mon@host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保 monitor 创建了仲裁:
ceph mon stat
# ceph mon stat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果需要,在其他 monitor 上重复这些步骤。
步骤:使用压缩 monitor 存储 ceph-monstore-tool
在开始前,请确保已安装了 ceph-test
软件包。
验证带有大存储的
ceph-mon
守护进程没有运行。如果需要,请停止 后台程序。systemctl status ceph-mon@<host-name> systemctl stop ceph-mon@<host-name>
systemctl status ceph-mon@<host-name> systemctl stop ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用运行守护进程的主机的短名称替换
<host-name>
。不确定时使用hostname -s
命令。systemctl status ceph-mon@host1 systemctl stop ceph-mon@host1
# systemctl status ceph-mon@host1 # systemctl stop ceph-mon@host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 紧凑 monitor 存储:
ceph-monstore-tool /var/lib/ceph/mon/mon.<host-name> compact
ceph-monstore-tool /var/lib/ceph/mon/mon.<host-name> compact
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 monitor 主机的短主机名替换
<host-name>
。ceph-monstore-tool /var/lib/ceph/mon/mon.node1 compact
# ceph-monstore-tool /var/lib/ceph/mon/mon.node1 compact
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再次启动
ceph-mon
:systemctl start ceph-mon@<host-name>
systemctl start ceph-mon@<host-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
systemctl start ceph-mon@host1
# systemctl start ceph-mon@host1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
4.6. 为 Ceph Manager 打开端口 复制链接链接已复制到粘贴板!
ceph-mgr
守护进程从与 ceph-osd
守护进程相同的端口范围的 OSD 接收 PG 信息。如果没有打开这些端口,集群将从 HEALTH_OK
转移到 HEALTH_WARN
,并且指示 PG 为 unknown
,其百分比数为 unknown。
要解决这种情况,在每个运行 ceph-mgr
守护进程的主机中,打开端口 6800:7300
。例如:
[root@ceph-mgr] # firewall-cmd --add-port 6800:7300/tcp [root@ceph-mgr] # firewall-cmd --add-port 6800:7300/tcp --permanent
[root@ceph-mgr] # firewall-cmd --add-port 6800:7300/tcp
[root@ceph-mgr] # firewall-cmd --add-port 6800:7300/tcp --permanent
然后,重启 ceph-mgr
守护进程。
第 5 章 OSD 故障排除 复制链接链接已复制到粘贴板!
本章包含关于如何修复与 Ceph OSD 相关的最常见错误的信息。
开始前
- 验证您的网络连接。详情请查看 第 3 章 网络问题故障排除。
-
使用
ceph health
命令验证 monitor 是否具有仲裁。如果命令返回健康状态(HEALTH_OK
、HEALTH_WARN
或HEALTH_ERR
),monitors 可以组成仲裁。如果没有,请首先解决任何 monitor 问题。详情请查看 第 4 章 监控器故障排除。有关ceph health
的详情请查看 第 1.2 节 “了解ceph health
命令的输出”。 - (可选)停止重新平衡过程,以节省时间和资源。详情请查看 第 5.2 节 “停止并启动重新平衡”。
5.1. 与 OSD 相关的大多数通用错误消息 复制链接链接已复制到粘贴板!
下表列出了 ceph health detail
命令返回或 Ceph 日志中最常包含的错误消息。这些表中提供了相应的部分的链接,这些部分解释了错误并指向修复问题的特定程序。
错误消息 | 请查看 |
---|---|
| |
| |
| |
| |
| |
| |
|
错误消息 | 日志文件 | 请查看 |
---|---|---|
| 主集群日志 | |
| 主集群日志 | |
| 主集群日志 | |
| OSD 日志 | |
| OSD 日志 |
5.1.1. 完整 OSD 复制链接链接已复制到粘贴板!
ceph health detail
命令返回类似如下的错误消息:
HEALTH_ERR 1 full osds osd.3 is full at 95%
HEALTH_ERR 1 full osds
osd.3 is full at 95%
此 Means 是什么
Ceph 可以防止客户端在完整的 OSD 节点上执行 I/O 操作,以避免数据丢失。当集群达到由 mon_osd_full_ratio
参数设置的容量时,它会返回 HEALTH_ERR full osds
消息。默认情况下,这个参数被设置为 0.95
,即集群容量的 95%。
要排除这个问题,请执行以下操作
确定使用了原始存储(%RAW USED
)的百分比:
ceph df
# ceph df
如果 %RAW USED
超过 70-75%,您可以:
- 删除不必要的数据.这是避免生产停机时间的短期解决方案。详情请查看 第 5.6 节 “从完全集群中删除数据”。
- 通过添加新 OSD 节点来扩展集群。这是红帽推荐的长期解决方案。详情请参阅《红帽 Ceph 存储 3 管理指南 》中的添加和删除 OSD 节点 章节。
另请参阅
5.1.2. nearfull OSD 复制链接链接已复制到粘贴板!
ceph health detail
命令返回类似如下的错误消息:
HEALTH_WARN 1 nearfull osds osd.2 is near full at 85%
HEALTH_WARN 1 nearfull osds
osd.2 is near full at 85%
此 Means 是什么
当集群达到 mon osd nearfull ratio defaults
参数设定的容量时,Ceph 会返回 nearfull osds
消息。默认情况下,这个参数被设置为 0.85
,即集群容量的 85%。
Ceph 以尽可能最佳的方式分发基于 CRUSH 层次结构的数据,但它不能保证均匀分布。数据分布不畅和 nearfull osds
信息的主要原因是:
- OSD 在集群中的 OSD 节点之间没有平衡。也就是说,一些 OSD 节点托管的 OSD 比其他 OSD 高得多,或者 CRUSH map 中部分 OSD 的权重不足以满足其容量要求。
- PG 计数与 OSD 数量、用例、每个 OSD 目标 PG 和 OSD 利用率不同。
- 集群使用不当的 CRUSH 可调项。
- OSD 的后端存储几乎已满。
排除此问题,请执行以下操作:
- 验证 PG 计数是否足够,并在需要时增加。详情请查看 第 7.5 节 “增加 PG 数量”。
- 验证您是否使用最优于集群版本的 CRUSH 可调项,如果不是,请进行调整。详情请查看红帽 Ceph 存储 3 存储 3 存储策略 指南中的 CRUSH 可调项小节 ,以及如何测试对红帽客户门户上红帽 Ceph 存储中 OSD 的 PG 分布的影响 CRUSH map 可调项。
- 根据利用率更改 OSD 的权重。请参阅红帽 Ceph 存储 3 的存储策略指南中的设置 OSD Weight by Utilization 部分。
确定 OSD 使用的磁盘上保留多少空间。
查看 OSD 一般使用的空间量:
ceph osd df
# ceph osd df
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 OSD 在特定节点上使用的空间:从包含
nearful
OSD 的节点运行以下命令:df
$ df
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果需要,添加新 OSD 节点。请参阅《红帽 Ceph 存储 3 管理指南 》中的 添加和删除 OSD 节点 章节。
另请参阅
5.1.3. 个或更多 OSD 发生故障 复制链接链接已复制到粘贴板!
ceph health
命令返回类似如下的错误:
HEALTH_WARN 1/3 in osds are down
HEALTH_WARN 1/3 in osds are down
此 Means 是什么
其中一个 ceph-osd
进程因为可能的服务故障或与其他 OSD 通信时出现问题而不可用。因此,存活的 ceph-osd
守护进程会向 monitor 报告这个失败。
如果 ceph-osd
守护进程没有运行,底层 OSD 驱动器或文件系统会损坏,或者某些其他错误(如缺少密钥环)会阻止守护进程启动。
在大多数情况下,网络问题会导致 ceph-osd
守护进程正在运行,但仍标记为 down
。
要排除这个问题,请执行以下操作
确定哪个 OSD 为
down
:ceph health detail
# ceph health detail HEALTH_WARN 1/3 in osds are down osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试重启
ceph-osd
守护进程:systemctl restart ceph-osd@<OSD-number>
systemctl restart ceph-osd@<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
down
的 OSD 的 ID 替换<OSD-number>
,例如:systemctl restart ceph-osd@0
# systemctl restart ceph-osd@0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果您无法启动
ceph-osd
,请按照ceph-osd
守护进程中的步骤启动。 -
如果您能够启动
ceph-osd
守护进程,但标记为down
,请按照ceph-osd
守护进程正在运行但仍标记为down
的步骤操作。
-
如果您无法启动
ceph-osd
守护进程无法启动
- 如果您有一个包含多个 OSD 的节点(通常比 12 多个 OSD),请验证默认最多线程数(PID 数)是否足够。详情请查看 第 5.5 节 “增加 PID 数量”。
验证 OSD 数据和日志分区是否已正确挂载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ceph-disk
将分区标记为active
,则会挂载分区。如果分区是prepared
,挂载它。详情请查看 第 5.3 节 “挂载 OSD 数据分区”。如果分区是unprepared
,则必须在挂载前首先准备它。请参阅《红帽 Ceph 存储 3 管理指南 》中的准备 OSD 数据和日志驱动器一节。-
如果您收到
ERROR: missing keyring, cannot use cephx for authentication
错误消息,则 OSD 缺少密钥环。请参阅《红帽 Ceph 存储 3 管理指南》 中的 密钥环管理部分。 如果您收到
ERROR: unable to open OSD superblock on /var/lib/ceph/osd/ceph-1
错误消息,ceph-osd
守护进程将无法读取底层文件系统。有关如何排除故障并修复此错误的说明,请参阅以下步骤。注意如果在 OSD 主机引导期间返回此错误消息,请打开支持票据,因为这可能表示 在红帽 Bugzilla 1439210 中跟踪了一个已知问题。详情请查看 第 9 章 联系红帽支持服务。
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在
/var/log/ceph/
目录中。类似于以下内容的
EIO
错误消息表示底层磁盘失败:FAILED assert(!m_filestore_fail_eio || r != -5)
FAILED assert(!m_filestore_fail_eio || r != -5)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为修复此问题,请替换底层 OSD 磁盘。详情请查看 第 5.4 节 “替换 OSD 驱动器”。
如果日志包含任何其他
FAILED assert
错误,如以下错误,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。FAILED assert(0 == "hit suicide timeout")
FAILED assert(0 == "hit suicide timeout")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
检查
dmesg
输出是否有底层文件系统或磁盘的错误:dmesg
$ dmesg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow error -5
错误消息类似如下,表示底层 XFS 文件系统崩溃。有关如何解决这个问题的详情,请查看红帽客户门户网站中的 "xfs_log_force: error -5 返回"? 解决方案的含义。xfs_log_force: error -5 returned
xfs_log_force: error -5 returned
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果
dmesg
输出包含任何SCSI error
错误消息,请参阅红帽客户门户网站中的 SCSI Error Codes Solution Finder 解决方案,以确定解决问题的最佳方法。 - 或者,如果您无法修复底层文件系统,请替换 OSD 驱动器。详情请查看 第 5.4 节 “替换 OSD 驱动器”。
如果 OSD 因分段错误而出现故障,如以下 OSD,请收集必要的信息并打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
Caught signal (Segmentation fault)
Caught signal (Segmentation fault)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ceph-osd
正在运行,但仍标记为 down
检查对应的日志文件,以确定故障的原因。默认情况下,Ceph 将日志文件存储在
/var/log/ceph/
目录中。如果日志包含类似以下的错误消息,请参阅 第 5.1.4 节 “Flapping OSD”。
wrongly marked me down heartbeat_check: no reply from osd.2 since back
wrongly marked me down heartbeat_check: no reply from osd.2 since back
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您看到任何其他错误,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
另请参阅
- 第 5.1.4 节 “Flapping OSD”
- 第 7.1.1 节 “过时的 PG”
- 《红帽 Ceph 存储 3 管理指南 》 中的按实例启动、停止和重新启动后台程序 一节
5.1.4. Flapping OSD 复制链接链接已复制到粘贴板!
ceph -w | grep osds
命令会在短时间内重复显示 OSD 为 down
,然后再次显示 up
:
此外,Ceph 日志包含类似于以下的错误消息:
2016-07-25 03:44:06.510583 osd.50 127.0.0.1:6801/149046 18992 : cluster [WRN] map e600547 wrongly marked me down
2016-07-25 03:44:06.510583 osd.50 127.0.0.1:6801/149046 18992 : cluster [WRN] map e600547 wrongly marked me down
2016-07-25 19:00:08.906864 7fa2a0033700 -1 osd.254 609110 heartbeat_check: no reply from osd.2 since back 2016-07-25 19:00:07.444113 front 2016-07-25 18:59:48.311935 (cutoff 2016-07-25 18:59:48.906862)
2016-07-25 19:00:08.906864 7fa2a0033700 -1 osd.254 609110 heartbeat_check: no reply from osd.2 since back 2016-07-25 19:00:07.444113 front 2016-07-25 18:59:48.311935 (cutoff 2016-07-25 18:59:48.906862)
此 Means 是什么
引发 OSD 的主要原因是:
- 某些集群操作(如清理或恢复)通常需要花费大量时间。例如,如果您对具有大型索引或大型放置组的对象执行这些操作。通常,在完成这些操作后,flapping OSD 问题会得到解决。
-
与底层物理硬件相关的问题.在这种情况下,
ceph health detail
命令也会返回slow requests
错误消息。详情请查看 第 5.1.5 节 “请求速度较慢,请求被阻塞”。 - 网络相关问题.
当集群(后端)网络出现故障或开发显著延迟时,OSD 无法很好地处理这种情形,而公共(前端)网络运行最佳。
OSD 使用集群网络来互相发送 heartbeat 数据包,以注明它们是 up
和 in
。如果集群网络无法正常工作,OSD 无法发送和接收 heartbeat 数据包。因此,它们相互报告为 down
到 monitor,同时将自身标记为 up
。
Ceph 配置文件中的以下参数会影响此行为:
参数 | 描述 | 默认值 |
---|---|---|
|
OSD 在将 OSD 报告为 | 20 秒 |
|
监控将 OSD 标记为 | 2 |
此表显示,在默认配置中,如果只有一个 OSD 制作了三个不同报告,Ceph 监控器会将 OSD 标记为 down
。down
在某些情况下,如果单个主机遇到网络问题,整个群集可能会遇到 OSD 出现问题。这是因为主机上的 OSD 将报告群集中的其他 OSD 为 down
。
Flanping OSD 方案不包括 OSD 进程启动时,然后立即终止的情况。
要排除这个问题,请执行以下操作
再次检查
ceph health detail
命令的输出。如果包含slow requests
错误消息,请参阅 第 5.1.5 节 “请求速度较慢,请求被阻塞” 了解如何排除此问题的详情。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定哪些 OSD 标记为
down
以及它们所在的节点上:ceph osd tree | grep down
# ceph osd tree | grep down
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在包含 flapping OSD 的节点上,对任何网络问题进行故障排除并修复。详情请查看 第 3 章 网络问题故障排除。
或者,您可以通过设置
noup
和nodown
标志来临时强制监控器停止将 OSD 标记为down
和up
:ceph osd set noup ceph osd set nodown
# ceph osd set noup # ceph osd set nodown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用
noup
和nodown
标志不会修复造成问题的根本原因,而是只防止 OSD 崩溃。如果无法自行修复并对错误进行故障排除,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。-
此外,可以通过在 Ceph 配置文件中设置
osd heartbeat min size = 100
,然后重新启动 OSD,来修复 flapping OSD。这会导致因为 MTU 错误配置解决了网络问题。
其它资源
- 针对 Red Hat Enterprise Linux 的红帽 Ceph 存储 3 安装指南 或 Ubuntu安装指南中的 验证红帽 Ceph 存储网络配置 一节
- 红帽 Ceph 存储 3 架构指南 中的 Heartbeating 部分
5.1.5. 请求速度较慢,请求被阻塞 复制链接链接已复制到粘贴板!
ceph-osd
守护进程在响应请求时较慢,ceph health detail
命令返回类似如下的错误消息:
此外,Ceph 日志包含类似于以下的错误消息:
2015-08-24 13:18:10.024659 osd.1 127.0.0.1:6812/3032 9 : cluster [WRN] 6 slow requests, 6 included below; oldest blocked for > 61.758455 secs
2015-08-24 13:18:10.024659 osd.1 127.0.0.1:6812/3032 9 : cluster [WRN] 6 slow requests, 6 included below; oldest blocked for > 61.758455 secs
2016-07-25 03:44:06.510583 osd.50 [WRN] slow request 30.005692 seconds old, received at {date-time}: osd_op(client.4240.0:8 benchmark_data_ceph-1_39426_object7 [write 0~4194304] 0.69848840) v4 currently waiting for subops from [610]
2016-07-25 03:44:06.510583 osd.50 [WRN] slow request 30.005692 seconds old, received at {date-time}: osd_op(client.4240.0:8 benchmark_data_ceph-1_39426_object7 [write 0~4194304] 0.69848840) v4 currently waiting for subops from [610]
此 Means 是什么
请求速度较慢的 OSD 是每个 OSD,它们无法在 osd_op_complaint_time
参数定义的时间内为队列中的每秒 I/O 操作(IOPS)提供服务。默认情况下,此参数设置为 30 秒。
造成 OSD 缓慢请求的主要原因是:
- 与底层硬件相关的问题,如磁盘驱动器、主机、机架或网络交换机
- 网络相关问题.这些问题通常与闪烁的 OSD 连接。详情请查看 第 5.1.4 节 “Flapping OSD”。
- 系统负载
下表显示了慢速请求的类型。使用 dump_historic_ops
管理 socket 命令来确定慢速请求的类型。有关管理套接字的详细信息,请参阅《红帽 Ceph 存储 3 管理指南》 中的使用管理 套接字 小节。
请求类型慢 | 描述 |
---|---|
| OSD 正在等待在 PG 上获取操作的锁定。 |
| OSD 正在等待副本 OSD 将操作应用到日志。 |
| OSD 未达到任何主要操作里程碑。 |
| OSD 尚未复制指定次数的对象。 |
要排除这个问题,请执行以下操作
- 确定请求缓慢或块请求的 OSD 是否共享共同的硬件部分,如磁盘驱动器、主机、机架或网络交换机。
如果 OSD 共享磁盘:
使用
smartmontools
工具检查磁盘或日志的健康状况,以确定磁盘中的任何错误。注意smartmontools
工具包括在smartmontools
软件包中。使用
iostat
实用程序获取 OSD 磁盘上的 I/O 等待报告(%iowai
),以确定磁盘是否负载过重。注意iostat
工具包括在sysstat
软件包中。
如果 OSD 共享主机:
- 检查 RAM 和 CPU 使用率
-
使用
netstat
实用程序查看网络接口控制器(NIC)上的网络统计信息,并对任何网络问题进行故障排除。如需更多信息,请参阅 第 3 章 网络问题故障排除。
- 如果 OSD 共享机架,请检查机架的网络交换机。例如,如果您使用巨型帧,请验证路径中的 NIC 是否已设置了巨型帧。
- 如果您无法确定请求速度较慢的 OSD 共享的硬件部分,或者无法对硬件和网络问题进行故障排除和修复,请打开支持票据。详情请查看 第 9 章 联系红帽支持服务。
另请参阅
- 《红帽 Ceph 存储 3 管理指南 》中的使用管理 套接字 一节
5.2. 停止并启动重新平衡 复制链接链接已复制到粘贴板!
当 OSD 出现故障或您停止时,CRUSH 算法会自动启动重新平衡过程,以在剩余的 OSD 之间重新分发数据。
因此,重新平衡可能需要时间和资源,因此,应考虑在故障排除期间停止重新平衡或维护 OSD。要做到这一点,在停止 OSD 前设置 noout
标记:
ceph osd set noout
# ceph osd set noout
完成故障排除或维护后,取消设置 noout
标志以开始重新平衡:
ceph osd unset noout
# ceph osd unset noout
停止的 OSD 中的放置组在故障排除和维护期间变为 degraded
。
另请参阅
- Red Hat Ceph Storage 3 架构指南 中的 重新平衡和恢复 部分
5.3. 挂载 OSD 数据分区 复制链接链接已复制到粘贴板!
如果没有正确挂载 OSD 数据分区,ceph-osd
守护进程就无法启动。如果您发现分区没有按预期挂载,请按照本节中的步骤进行挂载。
步骤:挂载 OSD 数据分区
挂载分区:
mount -o noatime <partition> /var/lib/ceph/osd/<cluster-name>-<osd-number>
# mount -o noatime <partition> /var/lib/ceph/osd/<cluster-name>-<osd-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用专用于 OSD 数据的 OSD 驱动器中的分区路径替换
<partition>
。指定集群名称和 OSD 号,例如:mount -o noatime /dev/sdd1 /var/lib/ceph/osd/ceph-0
# mount -o noatime /dev/sdd1 /var/lib/ceph/osd/ceph-0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试启动失败的
ceph-osd
守护进程:systemctl start ceph-osd@<OSD-number>
# systemctl start ceph-osd@<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<OSD-number>
替换为 OSD 的 ID,例如:systemctl start ceph-osd@0
# systemctl start ceph-osd@0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
5.4. 替换 OSD 驱动器 复制链接链接已复制到粘贴板!
Ceph 专为容错设计,这意味着它可以在 degraded
状态下运行,而不丢失数据。因此,即使数据存储驱动器失败,Ceph 也能运行。在故障驱动器的上下文中,degraded
状态意味着存储在其他 OSD 上的数据的额外副本将自动回填到集群中的其他 OSD。不过,如果发生这种情况,请替换失败的 OSD 驱动器,并手动重新创建 OSD。
当驱动器失败时,Ceph 会将该 OSD 报告为 down
:
HEALTH_WARN 1/3 in osds are down osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
HEALTH_WARN 1/3 in osds are down
osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
Ceph 也可以因为网络或权限问题将 OSD 标记为 down
。详情请查看 第 5.1.3 节 “个或更多 OSD 发生故障”。
现代服务器通常使用热插拔驱动器进行部署,以便您可以将失败的驱动器替换为新的驱动器,而无需关闭节点。整个流程包括这些步骤:
- 从 Ceph 集群移除 OSD。详情请参阅 从 Ceph 集群删除 OSD 过程。
- 替换驱动器。详情请查看 替换 Physical Drive 部分。
- 将 OSD 添加到集群。详情请参阅 在 Ceph 集群中添加 OSD。
开始前
确定哪个 OSD 为
down
:ceph osd tree | grep -i down
# ceph osd tree | grep -i down ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY 0 0.00999 osd.0 down 1.00000 1.00000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保 OSD 进程已经停止。从 OSD 节点运行以下命令:
systemctl status ceph-osd@<OSD-number>
# systemctl status ceph-osd@<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标记为
down
的 OSD 的 ID 替换<OSD-number>
,例如:systemctl status ceph-osd@osd.0
# systemctl status ceph-osd@osd.0 ... Active: inactive (dead)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
ceph-osd
守护进程正在运行。如需有关对标记为down
的 OSD 进行故障排除(它们对应的ceph-osd
守护进程正在运行)的更多详细信息,请参阅 第 5.1.3 节 “个或更多 OSD 发生故障”。
步骤:从 Ceph 集群中删除 OSD
将 OSD 标记为
out
:ceph osd out osd.<OSD-number>
# ceph osd out osd.<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标记为
down
的 OSD 的 ID 替换<OSD-number>
,例如:ceph osd out osd.0
# ceph osd out osd.0 marked out osd.0.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果 OSD 是
down
,当它没有从 OSD 接收任何心跳数据包时,Ceph 会在 600 秒后自动将其标记为out
。发生这种情况时,具有故障 OSD 数据副本的其他 OSD 开始回填,以确保集群中存在所需的副本数。当集群回填时,集群将处于degraded
状态。确保故障 OSD 正在回填。输出将包含类似如下的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 CRUSH map 移除 OSD:
ceph osd crush remove osd.<OSD-number>
# ceph osd crush remove osd.<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标记为
down
的 OSD 的 ID 替换<OSD-number>
,例如:ceph osd crush remove osd.0
# ceph osd crush remove osd.0 removed item id 0 name 'osd.0' from crush map
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 移除与 OSD 相关的身份验证密钥:
ceph auth del osd.<OSD-number>
# ceph auth del osd.<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标记为
down
的 OSD 的 ID 替换<OSD-number>
,例如:ceph auth del osd.0
# ceph auth del osd.0 updated
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Ceph 存储集群中移除 OSD:
ceph osd rm osd.<OSD-number>
# ceph osd rm osd.<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标记为
down
的 OSD 的 ID 替换<OSD-number>
,例如:ceph osd rm osd.0
# ceph osd rm osd.0 removed osd.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您已成功删除了 OSD,以下命令的输出中不存在它:
ceph osd tree
# ceph osd tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 卸载失败的驱动器:
umount /var/lib/ceph/osd/<cluster-name>-<OSD-number>
# umount /var/lib/ceph/osd/<cluster-name>-<OSD-number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定集群的名称和 OSD 的 ID,例如:
umount /var/lib/ceph/osd/ceph-0/
# umount /var/lib/ceph/osd/ceph-0/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您成功卸载了驱动器,以下命令输出中不存在该驱动器:
df -h
# df -h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
步骤: 替换物理驱动器
有关替换物理驱动器的详情,请查看硬件节点的文档。
- 如果驱动器热插拔,请将失败的驱动器替换为新驱动器。
- 如果驱动器不可热插拔并且节点包含多个 OSD,您可能需要关闭整个节点并替换物理驱动器。考虑阻止集群回填。详情请查看 第 5.2 节 “停止并启动重新平衡”。
-
当驱动器显示在
/dev/
目录中时,记录驱动器路径。 - 如果要手动添加 OSD,找到 OSD 驱动器并格式化磁盘。
步骤:将 OSD 添加到 Ceph 集群
再次添加 OSD。
如果您使用 Ansible 部署集群,请从 Ceph 管理服务器再次运行
ceph-ansible
playbook:ansible-playbook /usr/share/ceph-ansible site.yml
# ansible-playbook /usr/share/ceph-ansible site.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您手动添加 OSD,请参阅 Red Hat Ceph Storage 3 的 _Administration Guide_e 中的使用命令行界面添加 OSD 部分。
确保 CRUSH 层次结构准确:
ceph osd tree
# ceph osd tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您对 CRUSH 层次结构中的 OSD 的位置不满意,请将 OSD 移到所需的位置:
ceph osd crush move <bucket-to-move> <bucket-type>=<parent-bucket>
ceph osd crush move <bucket-to-move> <bucket-type>=<parent-bucket>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,将位于
sdd:row1
的存储桶移动到根存储桶:ceph osd crush move ssd:row1 root=ssd:root
# ceph osd crush move ssd:row1 root=ssd:root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 第 5.1.3 节 “个或更多 OSD 发生故障”
- 《红帽 Ceph 存储 3 管理指南 》中的 管理集群大小 章节
- Red Hat Enterprise Linux 的 Red Hat Ceph Storage 3 安装指南或Ubuntu 的安装指南
5.5. 增加 PID 数量 复制链接链接已复制到粘贴板!
如果您的节点包含 12 个 Ceph OSD,默认的最大线程数(PID 数)可能不足,特别是在恢复期间。因此,一些 ceph-osd
守护进程可能会终止,无法再次启动。如果发生这种情况,增加允许的最大线程数。
临时增加这个数字:
sysctl -w kernel.pid.max=4194303
# sysctl -w kernel.pid.max=4194303
要永久增加这个数字,请按如下方式更新 /etc/sysctl.conf
文件:
kernel.pid.max = 4194303
kernel.pid.max = 4194303
5.6. 从完全集群中删除数据 复制链接链接已复制到粘贴板!
Ceph 自动防止 OSD 上达到 mon_osd_full_ratio
参数指定的容量的任何 I/O 操作,并返回 full osds
错误消息。
这个步骤演示了如何删除不必要的数据来修复这个错误。
mon_osd_full_ratio
参数设置创建集群时的 full_ratio
参数的值。之后您无法更改 mon_osd_full_ratio
的值。要临时增加 full_ratio
值,请改为增加 set-full-ratio
。
步骤: 从完全的集群中删除数据
确定
full_ratio
的当前值,默认设置为0.95
:ceph osd dump | grep -i full
# ceph osd dump | grep -i full full_ratio 0.95
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将
set-full-ratio
设置为0.97
来临时增加值:ceph osd set-full-ratio 0.97
# ceph osd set-full-ratio 0.97
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要红帽强烈建议不要将
set-full-ratio
设置为大于 0.97 的值。将此参数设置为更高的值会使恢复过程变得更加困难。因此,您可能根本无法恢复完整的 OSD。验证您是否成功将该参数设置为
0.97
:ceph osd dump | grep -i full
# ceph osd dump | grep -i full full_ratio 0.97
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 监控集群状态:
ceph -w
# ceph -w
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 旦集群将状态从
full
更改为nearfull
,请删除任何不必要的数据。将
full_ratio
的值重新设置为0.95
:ceph osd set-full-ratio 0.95
# ceph osd set-full-ratio 0.95
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您是否成功将该参数设置为
0.95
:ceph osd dump | grep -i full
# ceph osd dump | grep -i full full_ratio 0.95
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
第 6 章 多站点 Ceph 对象网关故障排除 复制链接链接已复制到粘贴板!
本章包含有关如何修复与多站点 Ceph 对象网关配置和运营条件相关的最常见错误的信息。
6.1. 先决条件 复制链接链接已复制到粘贴板!
- 正在运行的红帽 Ceph 存储 3 环境。
- 正在运行的 Ceph 对象网关.
6.2. Ceph 对象网关的代码定义错误 复制链接链接已复制到粘贴板!
Ceph 对象网关日志包含错误和警告消息,以协助对环境中条件进行故障排除。下面列出了一些常见的解决方案,并给出了建议的解决方案。如需其他帮助,请联系红帽支持团队。
常见错误消息
data_sync: ERROR: a sync operation returned error
- 这是提示较低级别 bucket 同步进程返回错误的高级别数据同步过程。此消息冗余;存储桶同步错误出现在日志中。
data sync: ERROR: failed to sync object: <bucket name>:<object name>
- 进程无法通过 HTTP 从远程网关获取所需的对象,或者进程无法将该对象写入 RADOS,还会重试。
data sync: ERROR: failure in sync, backing out (sync_status=2)
-
代表上述条件之一的低级别消息,特别是数据在同步前被删除,因此会显示
-2 ENOENT
状态。 data sync: ERROR: failure in sync, backing out (sync_status=-5)
-
反映上述条件之一的低级别消息,特别是我们未能将该对象写入 RADOS,因此显示
-5 EIO
。 ERROR: failed to fetch remote data log info: ret=11
-
这是来自
libcurl
的EAGAIN
通用错误代码,反映来自另一个网关的错误条件。默认情况下,它将重试。 meta sync: ERROR: failed to read mdlog info with (2) No such file or directory
- mdlog 的分片从未创建,因此无法同步。
同步错误消息
failed to sync object
- 进程无法通过 HTTP 从远程网关获取此对象,或者未能将该对象写入 RADOS,还会重试。
failed to sync bucket instance: (11) Resource temporarily unavailable
- 主要和次要区域之间的连接问题。
failed to sync bucket instance: (125) Operation canceled
- 对同一 RADOS 对象的写入之间存在一个跟踪条件。
6.3. 同步多站点 Ceph 对象网关 复制链接链接已复制到粘贴板!
多站点同步从其它区域读取更改日志。要从元数据和数据 loags 中获取同步进度的高级视图,您可以使用以下命令:
radosgw-admin sync status
radosgw-admin sync status
此命令列出源区域后面的日志分片(若有)。
如果以上运行的同步状态的结果返回日志分片,请运行以下命令来替换 X 的 shard-id。
radosgw-admin data sync status --shard-id=X
radosgw-admin data sync status --shard-id=X
- replace…
- X,具有分片 ID 号。
示例
输出列出了同步旁边的存储桶,以及会因为前面的错误而重试哪些存储桶(若有)。
通过以下命令检查各个 bucket 的状态,将 bucket ID 替换为 X :
radosgw-admin bucket sync status --bucket=X.
radosgw-admin bucket sync status --bucket=X.
- replace…
- X,具有存储桶的 ID 号。
结果显示哪些存储桶索引日志分片位于其源区后面。
同步中的一个常见错误是 EBUSY
,这意味着同步已在进行中,通常在另一个网关中。读取写入到同步错误日志的错误,可以使用以下命令进行读取:
radosgw-admin sync error list
radosgw-admin sync error list
同步过程将重试,直到成功为止。错误仍可能发生,可能需要干预。
6.3.1. 多站点 Ceph 对象网关数据同步的性能计数器 复制链接链接已复制到粘贴板!
以下性能计数器可用于 Ceph 对象网关的多站点配置来测量数据同步:
-
poll_latency
测量远程复制日志的请求延迟。 -
fetch_bytes
测量数据同步获取的对象数量和字节数。
使用 ceph daemon .. perf dump
命令查看性能计数器的当前指标数据:
ceph daemon /var/run/ceph/{rgw}.asok
# ceph daemon /var/run/ceph/{rgw}.asok
输出示例:
您必须从运行守护进程的节点运行 ceph daemon
命令。
其它资源
- 有关性能计数器的更多信息,请参见《红帽 Ceph 存储 3 管理指南》 中的性能 计数器章节。
第 7 章 PG 故障排除 复制链接链接已复制到粘贴板!
本节介绍修复与 Ceph 放置组(PG)相关的最常见错误。
开始前
- 验证您的网络连接。详情请查看 第 3 章 网络问题故障排除。
- 确保 monitor 能够形成仲裁。有关排除与 monitor 相关的大多数常见错误的详情,请查看 第 4 章 监控器故障排除。
-
确保所有健康的 OSD 都是
up
和in
,并且回填和恢复过程已完成。有关对 OSD 的最常见错误进行故障排除的详细信息,请参阅 第 5 章 OSD 故障排除。
7.2. 列出 stale、inactive 或 unclean 状态中的 PG 复制链接链接已复制到粘贴板!
失败后,PG 会进入 degraded
或 peering
等状态。这个状态表示通过故障恢复过程的正常进度。
但是,如果 PG 处于这些状态之一的时间比预期长,它可以代表更大的问题。监控器报告 PG 处于不最佳状态时。
下表列出了这些状态及简短的说明:
状态 | 它的含义 | 大多数常见原因 | 请查看 |
---|---|---|---|
| PG 尚未能够服务读/写请求。 |
| |
| PG 包含的对象不会复制所需的次数。些情况阻止 PG 恢复。 |
| |
|
|
|
Ceph 配置文件中的 mon_pg_stuck_threshold
参数决定放置组在 inactive
、unclean
或 stale
之后的秒数。
列出卡住 PG:
ceph pg dump_stuck inactive ceph pg dump_stuck unclean ceph pg dump_stuck stale
# ceph pg dump_stuck inactive
# ceph pg dump_stuck unclean
# ceph pg dump_stuck stale
另请参阅
- 红帽 Ceph 存储 3 管理指南中 的监控放置组状态一节
7.3. 列出清单 复制链接链接已复制到粘贴板!
使用 rados
工具列出对象不同副本中的不一致。使用 --format=json-pretty
选项列出更详细的输出。
您可以列出:
列出池中包含的 PG
rados list-inconsistent-pg <pool> --format=json-pretty
rados list-inconsistent-pg <pool> --format=json-pretty
例如,列出名为 data
的池中所有不一致的 PG:
rados list-inconsistent-pg data --format=json-pretty
# rados list-inconsistent-pg data --format=json-pretty
[0.6]
列出 PG 中的清单对象
rados list-inconsistent-obj <placement-group-id>
rados list-inconsistent-obj <placement-group-id>
例如,列出放置组中 ID 为 0.6
的不一致对象:
以下字段对于决定造成不一致的原因非常重要:
-
name
:副本不一致的对象名称。 -
nspace
: 是池的逻辑分隔的命名空间。默认情况下是空的。 -
locator
: 用于替代放置对象名称的键。 -
snap
:对象的快照 ID。对象的唯一可写版本名为head
。如果对象是克隆,则此字段包含其顺序 ID。 -
version
:副本不一致的对象的版本 ID。每个对象写入操作都会递增它。 errors
: 表明分片之间不一致的错误列表,但不决定哪个分片或分片不正确。请参阅shard
数组来进一步调查错误。-
data_digest_mismatch
:从一个 OSD 读取的副本摘要与其他 OSD 不同。 -
size_mismatch
: 克隆的大小或head
对象与预期不匹配。 -
read_error
: 此错误表示极有可能因磁盘错误而导致不一致。
-
union_shard_error
: 与分片相关的所有错误的并集。这些错误连接到有故障的分片。以oi
结尾的错误表示您必须将故障对象的信息与所选对象的信息进行比较。请参阅shard
数组来进一步调查错误。在上例中,存储在
osd.2
中的对象副本与存储在osd.0
和osd.1
中的副本不同。特别是,副本摘要不是0xffffffff
,而不是从从osd.2
读取的分片计算,而是0xe978e67f
。另外,从osd.2
读取的副本大小为 0,而osd.0
和osd.1
报告的大小为 968。
列出 PG 中的实例快照集
rados list-inconsistent-snapset <placement-group-id>
rados list-inconsistent-snapset <placement-group-id>
例如,列出 ID 为 0.23
的 PG 中的不一致快照集(snapsets
):
该命令返回以下错误:
-
ss_attr_missing
:缺少一个或多个属性。属性是关于作为键值对列表编码到快照集的快照的信息。 -
ss_attr_corrupted
: 一个或多个属性无法解码。 -
clone_missing
:缺少克隆。 -
snapset_mismatch
:快照集本身不一致。 -
head_mismatch
: 快照集表示head
存在或不存在,但清理结果会报告其他情况。 -
headless
: 快照集的head
缺失。 -
size_mismatch
: 克隆的大小或head
对象与预期不匹配。
另请参阅
7.4. 修复事件 PG 复制链接链接已复制到粘贴板!
由于深度清理过程中出现错误,一些 PG 可以包含不一致的情况。Ceph 将这样的放置组报告为 inconsistent
:
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors pg 0.6 is active+clean+inconsistent, acting [0,1,2] 2 scrub errors
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
pg 0.6 is active+clean+inconsistent, acting [0,1,2]
2 scrub errors
您只能修复某些不一致的问题。如果 Ceph 日志包括以下错误,则不要修复 PG:
<pg.id> shard <osd>: soid <object> digest <digest> != known digest <digest> <pg.id> shard <osd>: soid <object> omap_digest <digest> != known omap_digest <digest>
<pg.id> shard <osd>: soid <object> digest <digest> != known digest <digest>
<pg.id> shard <osd>: soid <object> omap_digest <digest> != known omap_digest <digest>
相反,打开支持问题单。详情请查看 第 9 章 联系红帽支持服务。
修复 inconsistent
放置组:
ceph pg repair <id>
ceph pg repair <id>
使用 inconsistent
放置组的 ID 替换 <id>
。
另请参阅
7.5. 增加 PG 数量 复制链接链接已复制到粘贴板!
放置组(PG)计数不足,会影响 Ceph 集群和数据分布的性能。它是 nearfull osds
错误消息的主要原因之一。
建议比率为每个 OSD 100 到 300 个 PG。当您向集群添加更多 OSD 时,这个比率可能会降低。
pg_num
和 pgp_num
参数决定了 PG 计数。这些参数为每个池配置,因此您必须单独调整每个池的 PG 数较低。
增加 PG 数量是您可以在 Ceph 集群上执行的一个最密集型进程。如果不以缓慢、有方法的方式完成,这个过程可能会对性能有严重影响。增加 pgp_num
后,将无法停止或撤销这个过程,您必须完成它。
考虑在业务关键处理时间分配之外增加 PG 数量,并提醒所有客户端可能会对性能造成影响。
如果集群处于 HEALTH_ERR
状态,则不要更改 PG 计数。
步骤:增加 PG Count
减少数据重新发布和恢复对单个 OSD 和 OSD 主机的影响:
降低
osd max backfills
、osd_recovery_max_active
和osd_recovery_op_priority
参数的值:ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 1 --osd_recovery_op_priority 1'
# ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 1 --osd_recovery_op_priority 1'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用低级和深度清理:
ceph osd set noscrub ceph osd set nodeep-scrub
# ceph osd set noscrub # ceph osd set nodeep-scrub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用 每个池计算器的 Ceph PG(PG) 来计算
pg_num
和pgp_num
参数的最佳值。 以小增量增加
pg_num
值,直到您达到所需的值。- 确定启动递增值。使用一个非常低的值(2 的电源),并在您确定对集群的影响时增加这个值。最佳的值取决于池大小、OSD 数和客户端 I/O 负载。
递增
pg_num
值:ceph osd pool set <pool> pg_num <value>
ceph osd pool set <pool> pg_num <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定池名称和新值,例如:
ceph osd pool set data pg_num 4
# ceph osd pool set data pg_num 4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 监控集群的状态:
ceph -s
# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PG 状态将从
creating
变为active+clean
。等待所有 PG 都处于active+clean
状态。
以小增量增加
pgp_num
值,直到您达到所需的值:- 确定启动递增值。使用一个非常低的值(2 的电源),并在您确定对集群的影响时增加这个值。最佳的值取决于池大小、OSD 数和客户端 I/O 负载。
递增
pgp_num
值:ceph osd pool set <pool> pgp_num <value>
ceph osd pool set <pool> pgp_num <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定池名称和新值,例如:
ceph osd pool set data pgp_num 4
# ceph osd pool set data pgp_num 4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 监控集群的状态:
ceph -s
# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PGs 状态将更改为
peering
、wait_backfill
、backfilling
、recover
等。等待所有 PG 都处于active+clean
状态。
- 对 PG 数量不足的所有池重复上述步骤。
将
osd max backfills
、osd_recovery_max_active
和osd_recovery_op_priority
设置为默认值:ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 3 --osd_recovery_op_priority 3'
# ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 3 --osd_recovery_op_priority 3'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用低级和深度清理:
ceph osd unset noscrub ceph osd unset nodeep-scrub
# ceph osd unset noscrub # ceph osd unset nodeep-scrub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另请参阅
- 第 5.1.2 节 “nearfull OSD”
- 红帽 Ceph 存储 3 管理指南中 的监控放置组状态一节
第 8 章 对象故障排除 复制链接链接已复制到粘贴板!
作为存储管理员,您可以使用 ceph-objectstore-tool
实用程序执行高级别或低级对象操作。ceph-objectstore-tool
工具可帮助您排除与特定 OSD 或放置组中对象相关的问题。
操作对象可能会导致无法恢复的数据丢失。在使用 ceph-objectstore-tool
实用程序前,请联系红帽支持。
8.1. 先决条件 复制链接链接已复制到粘贴板!
- 验证没有与网络相关的问题。
8.2. 高级对象操作故障排除 复制链接链接已复制到粘贴板!
作为存储管理员,您可以使用 ceph-objectstore-tool
工具执行高级别对象操作。ceph-objectstore-tool
工具支持以下高级对象操作:
- 列出对象
- 列出丢失的对象
- 修复丢失的对象
操作对象可能会导致无法恢复的数据丢失。在使用 ceph-objectstore-tool
实用程序前,请联系红帽支持。
8.2.1. 先决条件 复制链接链接已复制到粘贴板!
-
对 Ceph OSD 节点具有
root
访问权限.
8.2.2. 列出对象 复制链接链接已复制到粘贴板!
OSD 可以包含零个到多个 PG 的 PG,对放置组(PG)中的多个对象包含零。ceph-objectstore-tool
工具允许您列出 OSD 中存储的对象。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别 OSD 内的所有对象,而不考虑 PG:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --op list
ceph-objectstore-tool --data-path $PATH_TO_OSD --op list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op list
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别 PG 中的所有对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID --op list
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID --op list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c --op list
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c --op list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别对象所属的 PG:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --op list $OBJECT_ID
ceph-objectstore-tool --data-path $PATH_TO_OSD --op list $OBJECT_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op list default.region
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op list default.region
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.2.3. 修复丢失的对象 复制链接链接已复制到粘贴板!
您可以使用 ceph-objectstore-tool
实用程序列出并修复 Ceph OSD 中存储的 和未找到的对象。这个过程只适用于旧对象。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有丢失的旧对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost --dry-run
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost --dry-run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost --dry-run
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost --dry-run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ceph-objectstore-tool
工具修复 丢失和未找到 的对象。选择适当的情况:修复所有丢失的对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修复 PG 中丢失的所有对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID --op fix-lost
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID --op fix-lost
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c --op fix-lost
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c --op fix-lost
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用标识符修复丢失的对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost $OBJECT_ID
ceph-objectstore-tool --data-path $PATH_TO_OSD --op fix-lost $OBJECT_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost default.region
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --op fix-lost default.region
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3. 低级对象操作故障排除 复制链接链接已复制到粘贴板!
作为存储管理员,您可以使用 ceph-objectstore-tool
工具执行低级对象操作。ceph-objectstore-tool
工具支持以下低级别对象操作:
- 操作对象的内容
- 删除对象
- 列出对象映射(OMAP)
- 操作 OMAP 标头
- 操作 OMAP 密钥
- 列出对象的属性
- 操作对象的属性键
操作对象可能会导致无法恢复的数据丢失。在使用 ceph-objectstore-tool
实用程序前,请联系红帽支持。
8.3.1. 先决条件 复制链接链接已复制到粘贴板!
-
对 Ceph OSD 节点具有
root
访问权限.
8.3.2. 操作对象的内容 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
工具,您可以在对象中获取或设置字节。
在对象上设置字节可能会导致无法恢复的数据丢失。要防止数据丢失,请为对象制作备份副本。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 通过列出 OSD 或 PG(PG)的对象来查找对象。
在对象中设置字节前,请进行备份和对象的工作副本:
语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑工作复制对象文件,并相应地修改对象内容。
设置对象的字节:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ set-bytes < $OBJECT_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ set-bytes < $OBJECT_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-bytes < zone_info.default.working-copy
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-bytes < zone_info.default.working-copy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.3. 删除对象 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
工具删除对象。通过移除对象,其内容和引用将从放置组(PG)中删除。
对象被删除后,您就无法重新创建对象。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
删除对象:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ remove
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ remove
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ remove
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ remove
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.4. 列出对象映射 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
工具列出对象映射的内容(OMAP)。输出为您提供了键列表。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出对象映射:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ list-omap
ceph-objectstore-tool --data-path $PATH_TO_OSD --pgid $PG_ID \ $OBJECT \ list-omap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ list-omap
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 --pgid 0.1c \ '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ list-omap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.5. 操作对象映射标头 复制链接链接已复制到粘贴板!
ceph-objectstore-tool
工具将使用与对象的键关联的值输出对象映射(OMAP)标头。
如果使用 FileStore 作为 OSD 后端对象存储,则在获取或设置对象映射标头时添加 --journal-path $PATH_TO_JOURNAL
参数。其中 $PATH_TO_JOURNAL
变量是 OSD 日志的绝对路径,如 /var/lib/ceph/osd/ceph-0/journal
。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取对象映射标头:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omaphdr > $OBJECT_MAP_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omaphdr > $OBJECT_MAP_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-omaphdr > zone_info.default.omaphdr.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-omaphdr > zone_info.default.omaphdr.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置对象映射标头:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omaphdr < $OBJECT_MAP_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omaphdr < $OBJECT_MAP_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-omaphdr < zone_info.default.omaphdr.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-omaphdr < zone_info.default.omaphdr.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.6. 操作对象映射密钥 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
工具更改对象映射(OMAP)密钥。您需要提供数据路径、放置组标识符(PG ID)、对象和 OMAP 中的密钥。
如果使用 FileStore 作为 OSD 后端对象存储,则在获取、设置或删除对象映射密钥时添加 --journal-path $PATH_TO_JOURNAL
参数。其中 $PATH_TO_JOURNAL
变量是 OSD 日志的绝对路径,如 /var/lib/ceph/osd/ceph-0/journal
。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
获取对象映射键:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omap $KEY > $OBJECT_MAP_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-omap $KEY > $OBJECT_MAP_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-omap "" > zone_info.default.omap.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-omap "" > zone_info.default.omap.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置对象映射键:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ set-omap $KEY < $OBJECT_MAP_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ set-omap $KEY < $OBJECT_MAP_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-omap "" < zone_info.default.omap.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-omap "" < zone_info.default.omap.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除对象映射键:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ rm-omap $KEY
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ rm-omap $KEY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ rm-omap ""
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ rm-omap ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.7. 列出对象的属性 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
实用程序列出对象的属性。输出为您提供对象的键和值。
如果使用 FileStore 作为 OSD 后端对象存储,则在列出对象属性时添加 --journal-path $PATH_TO_JOURNAL
参数。其中 $PATH_TO_JOURNAL
变量是 OSD 日志的绝对路径,如 /var/lib/ceph/osd/ceph-0/journal
。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出对象的属性:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ list-attrs
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ list-attrs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ list-attrs
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ list-attrs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.3.8. 操作对象属性键 复制链接链接已复制到粘贴板!
使用 ceph-objectstore-tool
工具更改对象的属性。若要操作对象的属性,您需要数据和日志路径、放置组标识符(PG ID)、对象以及对象属性中的密钥。
如果使用 FileStore 作为 OSD 后端对象存储,则在获取、设置或删除对象属性时添加 --journal-path $PATH_TO_JOURNAL
参数。其中 $PATH_TO_JOURNAL
变量是 OSD 日志的绝对路径,如 /var/lib/ceph/osd/ceph-0/journal
。
先决条件
-
对 Ceph OSD 节点具有
root
访问权限. -
停止
ceph-osd
守护进程。
流程
验证适当的 OSD 是否停机:
语法
systemctl status ceph-osd@$OSD_NUMBER
systemctl status ceph-osd@$OSD_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
systemctl status ceph-osd@1
[root@osd ~]# systemctl status ceph-osd@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取对象的属性:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-attrs $KEY > $OBJECT_ATTRS_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ get-attrs $KEY > $OBJECT_ATTRS_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-attrs "oid" > zone_info.default.attr.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ get-attrs "oid" > zone_info.default.attr.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置对象的属性:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ set-attrs $KEY < $OBJECT_ATTRS_FILE_NAME
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ set-attrs $KEY < $OBJECT_ATTRS_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-attrs "oid" < zone_info.default.attr.txt
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ set-attrs "oid" < zone_info.default.attr.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除对象的属性:
语法
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ rm-attrs $KEY
ceph-objectstore-tool --data-path $PATH_TO_OSD \ --pgid $PG_ID $OBJECT \ rm-attrs $KEY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ rm-attrs "oid"
[root@osd ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0 \ --pgid 0.1c '{"oid":"zone_info.default","key":"","snapid":-2,"hash":235010478,"max":0,"pool":11,"namespace":""}' \ rm-attrs "oid"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关停止 OSD 的更多信息,请参阅《红帽 Ceph 存储管理指南》中的"启动、停止和重新启动 Ceph 守护进程"一节。
8.4. 其它资源 复制链接链接已复制到粘贴板!
- 有关 Red Hat Ceph Storage 支持,请参阅 红帽客户门户网站。
第 9 章 联系红帽支持服务 复制链接链接已复制到粘贴板!
如果本指南中的信息没有帮助您解决问题,本章将介绍如何联系红帽支持服务。
9.1. 为红帽支持工程师提供信息 复制链接链接已复制到粘贴板!
如果您无法自行修复与 Red Hat Ceph Storage 相关的问题,请联络红帽支持服务并提供足够数量的信息,以帮助支持工程师更快地解决遇到的问题。
步骤: 向红帽支持工程师提供信息
- 在 红帽客户门户网站中创建一个支持问题单。
-
理想情况下,请将
sosreport
附加到票据。详情请参阅 sosreport,以及如何在 Red Hat Enterprise Linux 4.6 及更新的版本中创建 sosreport。 - 如果 Ceph 守护进程因分段错误而失败,请考虑生成人类可读的核心转储文件。详情请查看 第 9.2 节 “生成可读的核心转储文件”。
9.2. 生成可读的核心转储文件 复制链接链接已复制到粘贴板!
当 Ceph 守护进程意外终止分段错误时,请收集关于其故障的信息,并将其提供给红帽支持工程师。
此类信息可加快初步调查的速度。另外,支持工程师还可将核心转储文件中的信息与 {storage-product} 集群已知的问题进行比较。
9.2.1. 先决条件 复制链接链接已复制到粘贴板!
安装
ceph-debuginfo
软件包(如果尚未安装)。启用包含
ceph-debuginfo
软件包的软件仓库:subscription-manager repos --enable=rhel-7-server-rhceph-3-DAEMON-debug-rpms
subscription-manager repos --enable=rhel-7-server-rhceph-3-DAEMON-debug-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据节点类型,将
DAEMON
替换为osd
或mon
。安装
ceph-debuginfo
软件包:yum install ceph-debuginfo
[root@mon ~]# yum install ceph-debuginfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确定安装了
gdb
软件包,如果没有安装,请安装它:yum install gdb
[root@mon ~]# yum install gdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
根据部署类型继续执行此步骤:
9.2.2. 在裸机部署中生成可读的核心转储文件 复制链接链接已复制到粘贴板!
如果您在裸机上使用 Red Hat Ceph Storage,请按照以下步骤生成核心转储文件。
流程
为 Ceph 生成核心转储文件。
通过在
/etc/systemd/system.conf
文件中添加以下参数,为核心转储文件设置正确的ulimits
:DefaultLimitCORE=infinity
DefaultLimitCORE=infinity
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注释掉 Ceph 守护进程服务文件中的
PrivateTmp=true
参数,该参数默认位于/lib/systemd/system/CLUSTER_NAME-DAEMON@.service
:PrivateTmp=true
[root@mon ~]# PrivateTmp=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
suid_dumpable
标志设置为2
以允许 Ceph 守护进程生成转储核心文件:sysctl fs.suid_dumpable=2
[root@mon ~]# sysctl fs.suid_dumpable=2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整内核转储文件位置:
sysctl kernel.core_pattern=/tmp/core
[root@mon ~]# sysctl kernel.core_pattern=/tmp/core
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入
systemd
服务以使更改生效:systemctl daemon-reload
[root@mon ~]# systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Ceph 守护进程使更改生效:
systemctl restart ceph-DAEMON@ID
[root@mon ~]# systemctl restart ceph-DAEMON@ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定守护进程类型(
osd
或mon
)及其 ID(OSD 的数字,或 monitor 的短主机名),例如:systemctl restart ceph-osd@1
[root@mon ~]# systemctl restart ceph-osd@1
Copy 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.PID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定失败进程的守护进程类型和 PID,例如:
gdb /usr/bin/ceph-osd /tmp/core.123456
$ gdb /usr/bin/ceph-osd /tmp/core.123456
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 GDB 命令提示中,输入
set pag off
和set log on
命令禁用分页并启用对文件的日志记录:(gdb) set pag off (gdb) set log on
(gdb) set pag off (gdb) set log on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
thr a a bt full
,将backtrace
命令应用到进程的所有线程:(gdb) thr a a bt full
(gdb) thr a a bt full
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在生成回溯追踪后,输入
set log off
:(gdb) set log off
(gdb) set log off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将日志文件
gdb.txt
传输到您访问红帽客户门户网站的系统,并将其附加到支持问题单中。
9.2.3. 在容器化部署中生成可读的核心转储文件 复制链接链接已复制到粘贴板!
如果您在容器中使用 {storage-product},请按照以下步骤生成内核转储文件。该流程涉及捕获内核转储文件的两个场景:
- 当 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_pattern
Copy 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.xz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 Ceph 监控器和 Ceph Manager 手动捕获核心转储文件 :
从容器中获取 Ceph 守护进程的
ceph-mon
软件包详情:docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@mon]# docker exec -it NAME /bin/bash [root@mon]# rpm -qa | grep ceph
Copy 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.orig
Copy 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_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号。
示例
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ceph 监控容器中安装
gdb
软件包:docker exec -it ceph-mon-MONITOR_ID /bin/bash
[root@mon]# docker exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdb
Copy 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 run
Copy 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 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成内核转储文件:
语法
gcore ID
gcore ID
Copy 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.18110
Copy 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.18110
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ceph 监控容器外部复制内核转储文件:
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 /tmp
Copy 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@.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Ceph 监控守护进程:
语法
systemctl restart ceph-mon@MONITOR_ID
systemctl restart ceph-mon@MONITOR_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MONITOR_ID 替换为 Ceph monitor 的 ID 号。
示例
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传内核转储文件以获取红帽支持分析,请参阅第 4 步。
为 Ceph OSD 手动捕获核心转储文件:
从容器中获取 Ceph 守护进程的
ceph-osd
软件包详情:docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@osd]# docker exec -it NAME /bin/bash [root@osd]# rpm -qa | grep ceph
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 NAME 替换为 Ceph 容器的名称。
在运行 Ceph 容器的节点中,为同一版本的
ceph-osd
软件包安装 Ceph 软件包:yum install ceph-osd
[root@osd]# yum install ceph-osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,请先启用适当的存储库。详情请参阅《安装指南 》中的启用红帽 Ceph 存储存储库 一节。
查找失败的进程的 ID:
ps -aef | grep PROCESS | grep -v run
ps -aef | grep PROCESS | grep -v run
Copy 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 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成内核转储文件:
gcore ID
gcore ID
Copy 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.18110
Copy 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.18110
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传内核转储文件供红帽支持分析,请参见下一步。
- 将核心转储文件上传至红帽支持问题单中。详情请参阅向红帽支持工程师提供信息。
9.2.4. 其它资源 复制链接链接已复制到粘贴板!
附录 A. 子系统默认日志记录级别值 复制链接链接已复制到粘贴板!
子系统 | 日志级别 | 内存级别 |
---|---|---|
| 1 | 5 |
| 1 | 5 |
| 0 | 0 |
| 0 | 5 |
| 0 | 5 |
| 1 | 5 |
| 0 | 5 |
| 0 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 0 | 5 |
| 1 | 5 |
| 0 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 1 | 5 |
| 0 | 5 |
| 1 | 5 |
| 0 | 5 |
| 0 | 5 |
| 0 | 5 |
| 0 | 0 |
| 0 | 5 |
| 0 | 5 |
| 0 | 5 |
| 1 | 5 |
| 0 | 5 |
| 0 | 5 |
| 1 | 5 |
| 1 | 5 |
| 0 | 5 |
| 0 | 5 |