注意

本文档适用于 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 statusceph 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 设备类别的统计信息,例如 ssdhdd

  • SIZE: 集群管理的存储容量。

  • AVAIL: 集群中可用的空闲空间量。

  • USED: 用户数据消耗的原始存储量(不包括 BlueStore 的数据库)。

  • RAW USED: 用户数据、内部开销和保留容量消耗的原始存储量。

  • %RAW USED: 原始存储的使用百分比。结合 backfillfull rationear 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 是否 upin,请运行以下命令

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 | downactive | inactive。要检查元数据服务器是否 upactive,请运行以下命令

ceph mds stat

要显示元数据服务器的详细信息,请运行以下命令

ceph fs dump

检查放置组状态

放置组 (PG) 将对象映射到 OSD。监控 PG 以确保它们处于 activeclean 状态。请参阅 监控 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"
   ]
 }

clientcluster 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 选项并将其设置为 jsonjson-pretty 值。

当池中至少有一个 PG 变为非活动状态或池中至少有一个未找到的对象时,该池被视为 unavailable。否则,该池被视为 available。根据池的当前和先前状态,我们更新 uptimedowntime

先前状态

当前状态

正常运行时间更新

停机时间更新

可用

可用

+diff time

不更新

可用

不可用

+diff time

不更新

不可用

可用

+diff time

不更新

不可用

不可用

不更新

+diff time

根据更新后的 uptimedowntime 值,我们计算每个池的平均故障间隔时间 (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>

注意

如果功能本身被禁用,则不允许清除分数。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入