注意
本文档适用于 Ceph 的开发版本。
监控集群
集群启动并运行后,您可以使用 ceph 工具来监控集群。监控集群通常包括检查 OSD 状态、monitor 状态、放置组状态和元数据服务器状态。
使用命令行
交互模式
要在交互模式下运行 ceph 工具,请在命令行中输入 ceph,不带任何参数。例如
ceph
health
status
quorum_status
mon stat
非默认路径
如果您在安装集群时为配置文件或密钥环指定了非默认位置,则可以通过运行以下命令向 ceph 工具指定它们的位置
ceph -c /path/to/conf -k /path/to/keyring health
检查集群状态
启动集群后,在开始读写数据之前,您应该检查集群的状态。
要检查集群状态,请运行以下命令
ceph status
或者,您可以运行以下命令
ceph -s
在交互模式下,通过输入 status 并按 Enter 执行此操作
status
Ceph 将打印集群状态。例如,一个运行着每个服务(monitor、manager 和 OSD)实例的微型 Ceph “演示集群”可能会打印以下内容
cluster:
id: 477e46f1-ae41-4e43-9c8f-72c918ab0a20
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c
mgr: x(active)
mds: cephfs_a-1/1/1 up {0=a=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 2 pools, 16 pgs
objects: 21 objects, 2.19K
usage: 546 GB used, 384 GB / 931 GB avail
pgs: 16 active+clean
Ceph 如何计算数据使用量
usage 值反映了所使用的实际原始存储量。xxx GB / xxx GB 值表示集群总存储容量中可用的量(较小的数字)。名义数字反映了数据复制、克隆或快照之前的存储数据大小。因此,实际存储的数据量通常超过名义存储量,因为 Ceph 会创建数据副本,并且可能还会使用存储容量进行克隆和快照。
观察集群
Ceph 集群中的每个守护程序都会维护一个事件日志,Ceph 集群本身也会维护一个集群日志,其中记录了有关整个 Ceph 集群的高级事件。这些事件被记录到 monitor 服务器的磁盘上(默认位置为 /var/log/ceph/ceph.log),并且可以通过命令行进行监控。
要跟踪集群日志,请运行以下命令
ceph -w
Ceph 将打印系统状态,然后打印添加到日志中的每条日志消息。例如
cluster:
id: 477e46f1-ae41-4e43-9c8f-72c918ab0a20
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c
mgr: x(active)
mds: cephfs_a-1/1/1 up {0=a=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 2 pools, 16 pgs
objects: 21 objects, 2.19K
usage: 546 GB used, 384 GB / 931 GB avail
pgs: 16 active+clean
2017-07-24 08:15:11.329298 mon.a mon.0 172.21.9.34:6789/0 23 : cluster [INF] osd.0 172.21.9.34:6806/20527 boot
2017-07-24 08:15:14.258143 mon.a mon.0 172.21.9.34:6789/0 39 : cluster [INF] Activating manager daemon x
2017-07-24 08:15:15.446025 mon.a mon.0 172.21.9.34:6789/0 47 : cluster [INF] Manager daemon x is now available
您可能不想在添加日志行时立即打印,而是只打印最近的几行。运行 ceph log last [n] 可查看集群日志中最近的 n 行。
监控健康检查
Ceph 会持续运行各种健康检查。当健康检查失败时,此失败会反映在 ceph status 和 ceph health 的输出中。集群日志会收到消息,指示检查何时失败以及集群何时恢复。
例如,当 OSD 关闭时,状态输出的 health 部分会更新如下
health: HEALTH_WARN
1 osds down
Degraded data redundancy: 21/63 objects degraded (33.333%), 16 pgs unclean, 16 pgs degraded
同时,集群日志中会发出消息,记录健康检查的失败
2017-07-25 10:08:58.265945 mon.a mon.0 172.21.9.34:6789/0 91 : cluster [WRN] Health check failed: 1 osds down (OSD_DOWN)
2017-07-25 10:09:01.302624 mon.a mon.0 172.21.9.34:6789/0 94 : cluster [WRN] Health check failed: Degraded data redundancy: 21/63 objects degraded (33.333%), 16 pgs unclean, 16 pgs degraded (PG_DEGRADED)
当 OSD 重新上线时,集群日志会记录集群恢复到健康状态
2017-07-25 10:11:11.526841 mon.a mon.0 172.21.9.34:6789/0 109 : cluster [WRN] Health check update: Degraded data redundancy: 2 pgs unclean, 2 pgs degraded, 2 pgs undersized (PG_DEGRADED)
2017-07-25 10:11:13.535493 mon.a mon.0 172.21.9.34:6789/0 110 : cluster [INF] Health check cleared: PG_DEGRADED (was: Degraded data redundancy: 2 pgs unclean, 2 pgs degraded, 2 pgs undersized)
2017-07-25 10:11:13.535577 mon.a mon.0 172.21.9.34:6789/0 111 : cluster [INF] Cluster is now healthy
网络性能检查
Ceph OSD 相互发送心跳 ping 消息,以监控守护程序可用性和网络性能。如果检测到单个延迟响应,这可能仅仅表示 OSD 繁忙。但是,如果检测到不同 OSD 对之间存在多次延迟,这可能表示网络交换机故障、NIC 故障或第 1 层故障。
默认情况下,超过 1 秒(1000 毫秒)的心跳时间会引发健康检查(HEALTH_WARN)。例如
HEALTH_WARN Slow OSD heartbeats on back (longest 1118.001ms)
在 ceph health detail 命令的输出中,您可以看到哪些 OSD 正在经历延迟以及延迟有多长。ceph health detail 的输出限制为十行。以下是您对 ceph health detail 命令输出的预期示例
[WRN] OSD_SLOW_PING_TIME_BACK: Slow OSD heartbeats on back (longest 1118.001ms)
Slow OSD heartbeats on back from osd.0 [dc1,rack1] to osd.1 [dc1,rack1] 1118.001 msec possibly improving
Slow OSD heartbeats on back from osd.0 [dc1,rack1] to osd.2 [dc1,rack2] 1030.123 msec
Slow OSD heartbeats on back from osd.2 [dc1,rack2] to osd.1 [dc1,rack1] 1015.321 msec
Slow OSD heartbeats on back from osd.1 [dc1,rack1] to osd.0 [dc1,rack1] 1010.456 msec
要查看更多详细信息并收集完整的网络性能信息转储,请使用 dump_osd_network 命令。此命令通常发送给 Ceph Manager 守护程序,但可用于通过将其发送给特定 OSD 来收集有关该 OSD 交互的信息。慢速心跳的默认阈值为 1 秒(1000 毫秒),但这可以通过提供毫秒数作为参数来覆盖。
要显示阈值为 0 的所有网络性能数据,请向 mgr 发送以下命令
ceph daemon /var/run/ceph/ceph-mgr.x.asok dump_osd_network 0
{
"threshold": 0,
"entries": [
{
"last update": "Wed Sep 4 17:04:49 2019",
"stale": false,
"from osd": 2,
"to osd": 0,
"interface": "front",
"average": {
"1min": 1.023,
"5min": 0.860,
"15min": 0.883
},
"min": {
"1min": 0.818,
"5min": 0.607,
"15min": 0.607
},
"max": {
"1min": 1.164,
"5min": 1.173,
"15min": 1.544
},
"last": 0.924
},
{
"last update": "Wed Sep 4 17:04:49 2019",
"stale": false,
"from osd": 2,
"to osd": 0,
"interface": "back",
"average": {
"1min": 0.968,
"5min": 0.897,
"15min": 0.830
},
"min": {
"1min": 0.860,
"5min": 0.563,
"15min": 0.502
},
"max": {
"1min": 1.171,
"5min": 1.216,
"15min": 1.456
},
"last": 0.845
},
{
"last update": "Wed Sep 4 17:04:48 2019",
"stale": false,
"from osd": 0,
"to osd": 1,
"interface": "front",
"average": {
"1min": 0.965,
"5min": 0.811,
"15min": 0.850
},
"min": {
"1min": 0.650,
"5min": 0.488,
"15min": 0.466
},
"max": {
"1min": 1.252,
"5min": 1.252,
"15min": 1.362
},
"last": 0.791
},
...
静音健康检查
健康检查可以被静音,这样它们就不会影响集群报告的整体状态。例如,如果集群引发了单个健康检查,然后您将该健康检查静音,则集群将报告 HEALTH_OK 状态。要静音特定的健康检查,请使用与该健康检查对应的健康检查代码(请参阅 健康检查),然后运行以下命令
ceph health mute <code>
例如,要静音 OSD_DOWN 健康检查,请运行以下命令
ceph health mute OSD_DOWN
静音会作为 ceph health 命令的短格式和长格式输出的一部分进行报告。例如,在上述场景中,集群将报告
ceph health
HEALTH_OK (muted: OSD_DOWN)
ceph health detail
HEALTH_OK (muted: OSD_DOWN)
(MUTED) OSD_DOWN 1 osds down
osd.1 is down
可以通过运行以下命令来移除静音
ceph health unmute <code>
例如
ceph health unmute OSD_DOWN
“健康静音”可以有一个 TTL(存活时间):这意味着静音将在指定的时间段后自动过期。TTL 指定为可选的持续时间参数,如以下示例所示
ceph health mute OSD_DOWN 4h # mute for 4 hours
ceph health mute MON_DOWN 15m # mute for 15 minutes
通常,如果静音的健康检查得到解决(例如,如果引发上述示例中 OSD_DOWN 健康检查的 OSD 恢复正常),则静音会消失。如果健康检查稍后再次出现,它将以通常的方式报告。
可以将健康静音设置为“粘性”:这意味着即使健康检查清除,静音仍将保留。例如,要使健康静音“粘性”,您可以运行以下命令
ceph health mute OSD_DOWN 1h --sticky # ignore any/all down OSDs for next hour
如果触发健康检查的不健康状况恶化,大多数健康静音都会消失。例如,假设有一个 OSD 关闭并且健康检查已静音。在这种情况下,如果一个或多个额外的 OSD 关闭,则健康静音消失。此行为发生在任何具有阈值值的健康检查中。
检查集群使用情况统计
要检查集群的数据使用量和池之间的数据分布,请使用 df 命令。此选项类似于 Linux 的 df 命令。运行以下命令
ceph df
ceph df 的输出类似于以下内容
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 5.4 PiB 1.2 PiB 4.3 PiB 4.3 PiB 78.58
ssd 22 TiB 19 TiB 2.7 TiB 2.7 TiB 12.36
TOTAL 5.5 PiB 1.2 PiB 4.3 PiB 4.3 PiB 78.32
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
.mgr 11 1 558 MiB 141 1.6 GiB 0 5.8 TiB
cephfs_meta 13 1024 166 GiB 14.59M 499 GiB 2.74 5.8 TiB
cephfs_data 14 1024 0 B 1.17G 0 B 0 5.8 TiB
cephfsECvol 19 2048 2.8 PiB 1.81G 3.5 PiB 83.79 561 TiB
.nfs 20 32 9.7 KiB 61 118 KiB 0 5.8 TiB
testbench 71 32 12 GiB 3.14k 37 GiB 0 234 TiB
default.rgw.buckets.data 76 2048 482 TiB 132.09M 643 TiB 47.85 526 TiB
.rgw.root 97 1 1.4 KiB 4 48 KiB 0 5.8 TiB
default.rgw.log 98 256 3.6 KiB 209 408 KiB 0 5.8 TiB
default.rgw.control 99 1 0 B 8 0 B 0 5.8 TiB
default.rgw.meta 100 128 3.8 KiB 20 194 KiB 0 5.8 TiB
default.rgw.buckets.index 101 256 4.2 MiB 33 13 MiB 0 5.8 TiB
default.rgw.buckets.non-ec 102 128 5.6 MiB 13 17 MiB 0 5.8 TiB
kubedata 104 256 63 GiB 17.65k 188 GiB 0.03 234 TiB
kubemeta 105 256 241 MiB 166 724 MiB 0 5.8 TiB
CLASS: 存在于每个 CRUSH 设备类别的统计信息,例如
ssd和hdd。SIZE: 集群管理的存储容量。
AVAIL: 集群中可用的空闲空间量。
USED: 用户数据消耗的原始存储量(不包括 BlueStore 的数据库)。
RAW USED: 用户数据、内部开销和保留容量消耗的原始存储量。
%RAW USED: 原始存储的使用百分比。结合
backfillfull ratio和near full ratio观察此数字,以便在集群接近满阈值时发出预警。请参阅 存储容量。
可以通过如下方式调用来显示附加信息
ceph df detail
输出现在类似于以下示例
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 5.4 PiB 1.2 PiB 4.3 PiB 4.3 PiB 78.58
ssd 22 TiB 19 TiB 2.7 TiB 2.7 TiB 12.36
TOTAL 5.5 PiB 1.2 PiB 4.3 PiB 4.3 PiB 78.32
--- POOLS ---
POOL ID PGS STORED (DATA) (OMAP) OBJECTS USED (DATA) (OMAP) %USED MAX AVAIL QUOTA OBJECTS QUOTA BYTES DIRTY USED COMPR UNDER COMPR
.mgr 11 1 558 MiB 558 MiB 0 B 141 1.6 GiB 1.6 GiB 0 B 0 5.8 TiB N/A N/A N/A 0 B 0 B
cephfs_meta 13 1024 166 GiB 206 MiB 166 GiB 14.59M 499 GiB 618 MiB 498 GiB 2.74 5.8 TiB N/A N/A N/A 0 B 0 B
cephfs_data 14 1024 0 B 0 B 0 B 1.17G 0 B 0 B 0 B 0 5.8 TiB N/A N/A N/A 0 B 0 B
cephfsECvol 19 2048 2.8 PiB 2.8 PiB 17 KiB 1.81G 3.5 PiB 3.5 PiB 21 KiB 83.79 561 TiB N/A N/A N/A 0 B 0 B
.nfs 20 32 9.7 KiB 2.2 KiB 7.5 KiB 61 118 KiB 96 KiB 22 KiB 0 5.8 TiB N/A N/A N/A 0 B 0 B
testbench 71 32 12 GiB 12 GiB 2.3 KiB 3.14k 37 GiB 37 GiB 6.9 KiB 0 234 TiB N/A N/A N/A 0 B 0 B
default.rgw.buckets.data 76 2048 482 TiB 482 TiB 0 B 132.09M 643 TiB 643 TiB 0 B 47.85 526 TiB N/A N/A N/A 312 MiB 623 MiB
.rgw.root 97 1 1.4 KiB 1.4 KiB 0 B 4 48 KiB 48 KiB 0 B 0 5.8 TiB N/A N/A N/A 0 B 0 B
default.rgw.log 98 256 3.6 KiB 3.6 KiB 0 B 209 408 KiB 408 KiB 0 B 0 5.8 TiB N/A N/A N/A 0 B 0 B
default.rgw.control 99 1 0 B 0 B 0 B 8 0 B 0 B 0 B 0 5.8 TiB N/A N/A N/A 0 B 0 B
default.rgw.meta 100 128 3.8 KiB 3.2 KiB 671 B 20 194 KiB 192 KiB 2.0 KiB 0 5.8 TiB N/A N/A N/A 0 B 0 B
default.rgw.buckets.index 101 256 4.2 MiB 0 B 4.2 MiB 33 13 MiB 0 B 13 MiB 0 5.8 TiB N/A N/A N/A 0 B 0 B
default.rgw.buckets.non-ec 102 128 5.6 MiB 0 B 5.6 MiB 13 17 MiB 0 B 17 MiB 0 5.8 TiB N/A N/A N/A 0 B 0 B
kubedata 104 256 63 GiB 63 GiB 0 B 17.65k 188 GiB 188 GiB 0 B 0.03 234 TiB N/A 20 TiB N/A 0 B 0 B
kubemeta 105 256 241 MiB 241 MiB 278 KiB 166 723 MiB 722 MiB 833 KiB 0 5.8 TiB N/A N/A N/A 0 B 0 B
POOLS
输出的 POOLS 部分提供了池列表以及每个池的名义使用情况。输出的这一部分不反映副本、克隆或快照。例如,如果您存储一个包含 1 MB 数据的对象,则名义使用量为 1 MB,但实际使用量可能为 2 MB 或更多,具体取决于副本、克隆和快照的数量。
ID: 池中特定节点的编号。
STORED: 用户已存储在池中的实际数据量。这类似于早期 Ceph 版本中的 USED 列,但计算(对于 BlueStore!)更精确(因为间隙得到了适当处理)。
(DATA): RBD(RADOS 块设备)、CephFS 文件数据和 RGW(RADOS 网关)对象数据的使用量。
(OMAP): 键值对。主要用于 CephFS 和 RGW(RADOS 网关)的元数据存储。
OBJECTS: 每个池存储的对象名义数量(即,除副本、克隆或快照之外的对象数量)。
USED: 为池分配给所有 OSD 的空间。这包括用于复制的空间、用于分配粒度的空间以及与纠删码相关的开销空间。还考虑了压缩节省和对象内容间隙。但是,BlueStore 的数据库不包括在 USED 下报告的数量中。
(DATA): RBD(RADOS 块设备)、CephFS 文件数据和 RGW(RADOS 网关)对象数据的使用量。
(OMAP): 对象键值对。主要用于 CephFS 和 RGW(RADOS 网关)的元数据存储。
%USED: 每个池使用的名义存储百分比。
MAX AVAIL: 可写入此池的名义数据量的估计值。
QUOTA OBJECTS: 配额对象的数量。
QUOTA BYTES: 配额对象中的字节数。
DIRTY: 已写入缓存池但尚未刷新到基本池中的缓存池中的对象数。此字段仅在缓存分层使用时可用。
USED COMPR: 为压缩数据分配的空间量。这包括压缩数据以及复制、分配粒度和纠删码开销所需的所有空间。
UNDER COMPR: 经过压缩(对所有副本求和)并且值得以压缩形式存储的数据量。
注意
POOLS 部分中的数字是名义值。它们不包括副本、克隆或快照的数量。因此,POOLS 部分输出中 USED 和 %USED 总和将不等于 RAW 部分输出中 USED 和 %USED 总和。
注意
MAX AVAIL 值是复制或使用的纠删码类型、将存储映射到设备的 CRUSH 规则、这些设备的利用率以及配置的 mon_osd_full_ratio 设置的复杂函数。
检查 OSD 状态
要检查 OSD 是否 up 和 in,请运行以下命令
ceph osd stat
或者,您可以运行以下命令
ceph osd dump
要根据 OSD 在 CRUSH map 中的位置查看它们,请运行以下命令
ceph osd tree
要打印显示主机、其 OSD、OSD 是否 up 以及 OSD 权重的 CRUSH 树,请运行以下命令
#ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.00000 pool default
-3 3.00000 rack mainrack
-2 3.00000 host osd-host
0 ssd 1.00000 osd.0 up 1.00000 1.00000
1 ssd 1.00000 osd.1 up 1.00000 1.00000
2 ssd 1.00000 osd.2 up 1.00000 1.00000
请参阅 监控 OSD 和 PG。
检查 Monitor 状态
如果您的集群有多个 monitor,则需要执行某些“monitor 状态”检查。启动集群后,在读写数据之前,您应该检查法定人数状态。当多个 monitor 运行时,必须存在法定人数,以确保 Ceph 集群正常运行。定期检查 monitor 状态以确保所有 monitor 都在运行。
要显示 monitor map,请运行以下命令
ceph mon stat
或者,您可以运行以下命令
ceph mon dump
要检查 monitor 集群的法定人数状态,请运行以下命令
ceph quorum_status
Ceph 返回法定人数状态。例如,一个由三个 monitor 组成的 Ceph 集群可能会返回以下内容
{ "election_epoch": 10,
"quorum": [
0,
1,
2],
"quorum_names": [
"a",
"b",
"c"],
"quorum_leader_name": "a",
"monmap": { "epoch": 1,
"fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
"modified": "2011-12-12 13:28:27.505520",
"created": "2011-12-12 13:28:27.505520",
"features": {"persistent": [
"kraken",
"luminous",
"mimic"],
"optional": []
},
"mons": [
{ "rank": 0,
"name": "a",
"addr": "127.0.0.1:6789/0",
"public_addr": "127.0.0.1:6789/0"},
{ "rank": 1,
"name": "b",
"addr": "127.0.0.1:6790/0",
"public_addr": "127.0.0.1:6790/0"},
{ "rank": 2,
"name": "c",
"addr": "127.0.0.1:6791/0",
"public_addr": "127.0.0.1:6791/0"}
]
}
}
检查 MDS 状态
元数据服务器为 CephFS 提供元数据服务。元数据服务器有两种状态集:up | down 和 active | inactive。要检查元数据服务器是否 up 和 active,请运行以下命令
ceph mds stat
要显示元数据服务器的详细信息,请运行以下命令
ceph fs dump
检查放置组状态
放置组 (PG) 将对象映射到 OSD。监控 PG 以确保它们处于 active 和 clean 状态。请参阅 监控 OSD 和 PG。
使用 Admin Socket
Ceph admin socket 允许您通过 socket 接口查询守护程序。默认情况下,Ceph socket 位于 /var/run/ceph 下。要通过 admin socket 访问守护程序,请登录到运行该守护程序的主机并运行以下两个命令之一
ceph daemon {daemon-name}
ceph daemon {path-to-socket-file}
例如,以下命令彼此等效
ceph daemon osd.0 foo
ceph daemon /var/run/ceph/ceph-osd.0.asok foo
有两种运行 admin socket 命令的方法:(1) 使用如上所述的 ceph daemon,它绕过 monitor 并假定直接登录到守护程序的主机,以及 (2) 使用 ceph tell {daemon-type}.{id} 命令,该命令由 monitor 转发,不需要访问守护程序的主机。
使用 raise 命令向守护程序发送信号,就像运行 kill -X {daemon.pid} 一样。通过 ceph tell 运行时,它允许在不访问其主机的情况下向守护程序发送信号
ceph daemon {daemon-name} raise HUP
ceph tell {daemon-type}.{id} raise -9
要查看可用的 admin socket 命令,请运行以下命令
ceph daemon {daemon-name} help
Admin socket 命令使您能够在运行时查看和设置配置。有关查看配置的更多信息,请参阅 查看运行时设置。
Messenger 状态
Ceph 守护程序和 librados 客户端支持 admin socket 命令 messenger dump,该命令提供连接、socket、绑定地址和内核 TCP 统计信息(通过 tcp(7) TCP_INFO)的运行时信息快照。
注意
被查询的 messenger 需要锁定连接数据结构,以便创建快照。此锁的持续时间约为几十毫秒。这可能会干扰正常操作。使用 dumpcontents 参数来限制转储的数据结构。
示例
在未指定要转储的 messenger 的情况下发出命令时,将返回可用 messenger 列表
ceph tell osd.0 messenger dump
{
"messengers": [
"client",
"cluster",
"hb_back_client",
"hb_back_server",
"hb_front_client",
"hb_front_server",
"ms_objecter",
"temp_mon_client"
]
}
client 和 cluster messenger 对应于配置的客户端/集群网络(请参阅 网络配置参考)。具有 hb_ 前缀的 messenger 是心跳系统的一部分。
列出客户端 messenger 上的所有当前连接
ceph tell osd.0 messenger dump client \
| jq -r '.messenger.connections[].async_connection |
[.conn_id, .socket_fd, .worker_id,
if .status.connected then "connected" else "disconnected" end,
.state,
"\(.peer.type).\(.peer.entity_name.id).\(.peer.id)",
.protocol.v2.con_mode, .protocol.v2.crypto.rx, .protocol.v2.compression.rx] |
@tsv'
249 102 0 connected STATE_CONNECTION_ESTABLISHED client.admin.6407 crc PLAIN UNCOMPRESSED
242 99 1 connected STATE_CONNECTION_ESTABLISHED client.rgw.8000.4473 crc PLAIN UNCOMPRESSED
248 89 1 connected STATE_CONNECTION_ESTABLISHED mgr..-1 secure AES-128-GCM UNCOMPRESSED
32 101 2 connected STATE_CONNECTION_ESTABLISHED client.rgw.8000.4483 crc PLAIN UNCOMPRESSED
3 86 2 connected STATE_CONNECTION_ESTABLISHED mon..-1 secure AES-128-GCM UNCOMPRESSED
244 102 0 connected STATE_CONNECTION_ESTABLISHED client.admin.6383 crc PLAIN UNCOMPRESSED
打印活动连接及其 TCP 往返时间(round trip time)和重传计数器
ceph tell osd.0 messenger dump client --tcp-info \
| jq -r '.messenger.connections[].async_connection |
select(.status.connected) |
select(.peer.type != "client") |
[.conn_id, .socket_fd, .worker_id,
"\(.peer.type).\(.peer.global_id)",
.tcp_info.tcpi_rtt_us, .tcp_info.tcpi_rttvar_us, .tcp_info.tcpi_total_retrans] |
@tsv'
248 89 1 mgr.0 863 1677 0
3 86 2 mon.0 230 278 0
跟踪集群数据可用性分数
Ceph 内部跟踪集群中每个池的数据可用性。要检查集群中每个池的数据可用性分数,可以调用以下命令
ceph osd pool availability-status
示例输出
POOL UPTIME DOWNTIME NUMFAILURES MTBF MTTR SCORE AVAILABLE
rbd 2m 21s 1 2m 21s 0.888889 1
.mgr 86s 0s 0 0s 0s 1 1
cephfs.a.meta 77s 0s 0 0s 0s 1 1
cephfs.a.data 76s 0s 0 0s 0s 1 1
上面的时间值是为了可读性而四舍五入的。要查看精确的秒值,请使用 --format 选项并将其设置为 json 或 json-pretty 值。
当池中至少有一个 PG 变为非活动状态或池中至少有一个未找到的对象时,该池被视为 unavailable。否则,该池被视为 available。根据池的当前和先前状态,我们更新 uptime 和 downtime 值
先前状态 |
当前状态 |
正常运行时间更新 |
停机时间更新 |
|---|---|---|---|
可用 |
可用 |
+diff time |
不更新 |
可用 |
不可用 |
+diff time |
不更新 |
不可用 |
可用 |
+diff time |
不更新 |
不可用 |
不可用 |
不更新 |
+diff time |
根据更新后的 uptime 和 downtime 值,我们计算每个池的平均故障间隔时间 (MTBF) 和平均恢复时间 (MTTR)。然后通过计算 MTBF 与总时间的比率来计算可用性分数。
分数每秒更新一次。在连续更新之间发生并恢复的瞬态变化将不会被捕获。可以使用以下形式的命令配置此间隔
ceph config set mon pool_availability_update_interval 2
这将把更新间隔设置为两秒。请注意,此间隔不能小于为 paxos_propose_interval 设置的配置值。
此功能默认开启。要关闭此功能,例如 - 对于预期的停机时间,可以将 enable_availability_tracking 配置选项设置为 false。
ceph config set mon enable_availability_tracking false
当功能关闭时,将保留最后计算的分数。一旦功能再次开启,分数将再次开始更新。
如果需要,还可以使用以下形式的命令清除特定池的数据可用性分数
ceph osd pool clear-availability-status <pool-name>
注意
如果功能本身被禁用,则不允许清除分数。