第 3 章 监控 Ceph 存储集群


作为存储管理员,您可以监控 Red Hat Ceph Storage 集群的整体健康状况,以及监控 Ceph 各个组件的健康状态。

运行 Red Hat Ceph Storage 集群后,您可以开始监控存储集群,以确保 Ceph 监控器和 Ceph OSD 守护进程在高级别中运行。Ceph 存储集群客户端连接到 Ceph Monitor 并接收最新版本的存储集群映射,然后才能将数据读取和写入到存储集群中的 Ceph 池。因此,在 Ceph 客户端可以读取和写入数据之前,监控器集群必须拥有集群状态的协议。

Ceph OSD 必须将主 OSD 上的放置组与次要 OSD 上的 PG 的副本进行对等(peer)。如果出现错误,则 peering 将处于 active + clean 以外的状态。

3.1. Ceph 存储集群的高级别监控

作为存储管理员,您可以监控 Ceph 守护进程的健康状况,以确保它们已启动并在运行。高级别监控还涉及检查存储集群容量,以确保存储集群不会超过其全满比率(full ratio)Red Hat Ceph Storage 仪表板是进行高级别监控的最常见方法。但是,您也可以使用命令行界面、Ceph 管理 socket 或 Ceph API 来监控存储集群。

3.1.1. 检查存储集群健康状况

启动 Ceph 存储集群后,在开始读取或写入数据前,首先检查存储集群的健康状态。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    root@host01 ~]# cephadm shell

  2. 您可以使用以下命令来检查 Ceph 存储集群的健康状态:

    示例

    [ceph: root@host01 /]# ceph health
    HEALTH_OK

  3. 您可以通过运行 ceph status 命令检查 Ceph 存储集群的状态:

    示例

    [ceph: root@host01 /]# ceph status

    输出提供以下信息:

    • 集群 ID
    • 集群健康状态
    • monitor map epoch 和 monitor 仲裁的状态。
    • OSD map epoch 和 OSD 状态。
    • Ceph 管理器的状态。
    • 对象网关的状态。
    • 放置组映射版本。
    • 放置组和池的数量。
    • 存储的数据数量和所存储的对象数量。
    • 存储的数据总量。
    • IO 客户端操作。
    • 如果集群正在升级,在升级过程中的更新。

      在启动 Ceph 集群时,您可能会遇到运行状况警告,如 HEALTH_WARN XXX num placement groups stale。等待几分钟,然后再次检查。当存储集群就绪时,ceph health 应返回一个如 HEALTH_OK 的消息。此时,可以开始使用群集。

3.1.2. 监视存储集群事件

您可以使用命令行界面观察 Ceph 存储集群发生的事件。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    root@host01 ~]# cephadm shell

  2. 要监控集群的持续事件,请运行以下命令:

    示例

    [ceph: root@host01 /]# ceph -w
      cluster:
        id:     8c9b0072-67ca-11eb-af06-001a4a0002a0
        health: HEALTH_OK
    
      services:
        mon: 2 daemons, quorum Ceph5-2,Ceph5-adm (age 3d)
        mgr: Ceph5-1.nqikfh(active, since 3w), standbys: Ceph5-adm.meckej
        osd: 5 osds: 5 up (since 2d), 5 in (since 8w)
        rgw: 2 daemons active (test_realm.test_zone.Ceph5-2.bfdwcn, test_realm.test_zone.Ceph5-adm.acndrh)
    
      data:
        pools:   11 pools, 273 pgs
        objects: 459 objects, 32 KiB
        usage:   2.6 GiB used, 72 GiB / 75 GiB avail
        pgs:     273 active+clean
    
      io:
        client:   170 B/s rd, 730 KiB/s wr, 0 op/s rd, 729 op/s wr
    
    2021-06-02 15:45:21.655871 osd.0 [INF] 17.71 deep-scrub ok
    2021-06-02 15:45:47.880608 osd.1 [INF] 1.0 scrub ok
    2021-06-02 15:45:48.865375 osd.1 [INF] 1.3 scrub ok
    2021-06-02 15:45:50.866479 osd.1 [INF] 1.4 scrub ok
    2021-06-02 15:45:01.345821 mon.0 [INF] pgmap v41339: 952 pgs: 952 active+clean; 17130 MB data, 115 GB used, 167 GB / 297 GB avail
    2021-06-02 15:45:05.718640 mon.0 [INF] pgmap v41340: 952 pgs: 1 active+clean+scrubbing+deep, 951 active+clean; 17130 MB data, 115 GB used, 167 GB / 297 GB avail
    2021-06-02 15:45:53.997726 osd.1 [INF] 1.5 scrub ok
    2021-06-02 15:45:06.734270 mon.0 [INF] pgmap v41341: 952 pgs: 1 active+clean+scrubbing+deep, 951 active+clean; 17130 MB data, 115 GB used, 167 GB / 297 GB avail
    2021-06-02 15:45:15.722456 mon.0 [INF] pgmap v41342: 952 pgs: 952 active+clean; 17130 MB data, 115 GB used, 167 GB / 297 GB avail
    2021-06-02 15:46:06.836430 osd.0 [INF] 17.75 deep-scrub ok
    2021-06-02 15:45:55.720929 mon.0 [INF] pgmap v41343: 952 pgs: 1 active+clean+scrubbing+deep, 951 active+clean; 17130 MB data, 115 GB used, 167 GB / 297 GB avail

3.1.3. Ceph 如何计算数据使用量

used 值反映了使用的实际原始存储量。xxx GB / xxx GB 代表可用的存储(其中较小的数字)和总存储容量。总容量反映了在复制、克隆或快照前存储数据的大小。因此,实际存储的数据量通常会超过名义上的存储量。这是因为 Ceph 会创建数据的副本,进行克隆和快照也需要使用存储。

3.1.4. 了解存储集群用量统计

要检查集群的数据使用量和数据分布在池间,请使用 df 选项。它类似于 Linux df 命令。

如果某些 OSD 标记为 IN,则 ceph dfceph status 命令的输出中的 SIZE/AVAIL/RAW USED 会有所不同。SIZE/AVAIL/RAW USEDSIZE (最大磁盘大小)、RAW USE (磁盘上使用的空间)和 AVAIL (所有处于 IN 状态的 OSD)计算。您可以在 ceph osd df tree 命令的输出中看到 SIZE/AVAIL/RAW USED 的总 OSD。

示例

[ceph: root@host01 /]#ceph df
--- RAW STORAGE ---
CLASS   SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    5 TiB  2.9 TiB  2.1 TiB   2.1 TiB      42.98
TOTAL  5 TiB  2.9 TiB  2.1 TiB   2.1 TiB      42.98

--- POOLS ---
POOL                        ID  PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
.mgr                         1    1  5.3 MiB        3   16 MiB      0    629 GiB
.rgw.root                    2   32  1.3 KiB        4   48 KiB      0    629 GiB
default.rgw.log              3   32  3.6 KiB      209  408 KiB      0    629 GiB
default.rgw.control          4   32      0 B        8      0 B      0    629 GiB
default.rgw.meta             5   32  1.7 KiB       10   96 KiB      0    629 GiB
default.rgw.buckets.index    7   32  5.5 MiB       22   17 MiB      0    629 GiB
default.rgw.buckets.data     8   32  807 KiB        3  2.4 MiB      0    629 GiB
default.rgw.buckets.non-ec   9   32  1.0 MiB        1  3.1 MiB      0    629 GiB
source-ecpool-86            11   32  1.2 TiB  391.13k  2.1 TiB  53.49    1.1 TiB

ceph df detail 命令提供了更多关于其他池统计数据的详细信息,如配额对象、配额字节、压缩状态等。

输出的 RAW STORAGE 部分概述了存储集群用于存储数据的存储量。

  • CLASS: OSD 设备的类。
  • SIZE: 由存储集群管理的存储容量量。

    在上例中,如果 SIZE 是 90 GiB,它是不包括复制因子(默认为三)的总大小。带有复制因子的可用的总容量为 30 GiB(90 GiB/3)。根据全满比率(默认为 0.85%),最大可用空间为 30 GiB * 0.85 = 25.5 GiB

  • AVAIL: 存储集群中可用空间的数量。

    在上例中,如果 SIZE 是 90 GiB,而 USED 空间为 6 GiB,则 AVAIL 空间为 84 GiB。带有复制因素的总可用空间(默认为 84 GiB/3 = 28 GiB)

  • USED:用户数据使用的原始存储量。

    在上例中,100 MiB 是在考虑了复制因子后的总可用空间。实际可用大小为 33 MiB。RAW USED : 用户数据、内部开销或保留容量占用的原始存储量。

  • % RAW USED: RAW USED 的百分比 .使用这个数值以及 full rationear full ratio,以确保您没有消耗倒所有的存储集群容量。

输出的 POOLS 部分提供了池列表以及每个池的使用情况。本节的输出不会反映副本、克隆或快照的情况。例如,如果您存储 1 MB 的数据的对象,名义的使用量为 1 MB,但实际使用量可能为 3 MB 或更多。具体的实际使用量取决于副本的数量(例如: size = 3)、克隆和快照。

  • POOL:池的名称。
  • ID: 池 ID。
  • STORED: 用户存储在池中的实际数据量。这个值会根据(k+M)/K 值、对象副本数以及池统计计算时降级的对象数量更改。
  • OBJECTS: 每个池存储的名义数量。它是 STORED 大小 * 复制因素。
  • USED: 存储以 KB 为单位的数据数量,除非数字带有 M(megabyte)或 G(gigabytes)。
  • %USED: 每个池使用的名义存储的百分比。
  • MAX AVAIL: 可以写入这个池的数据数量的估计值。它是在第一个 OSD 变为满之前可以使用的数据量。它考虑了 CRUSH map 中跨磁盘的项目分布数据,并使用第一个 OSD 来填充作为目标。

    在上例中,MAX AVAIL 为 153.85 MB(没有考虑复制因子,默认为三)。

    请参阅红帽知识库中的 ceph df MAX AVAIL is incorrect for simple replicated pool 以计算 MAX AVAIL 的值。

  • QUOTA OBJECTS: 配额对象的数量。
  • QUOTA BYTES: 配额对象中的字节数。
  • USED COMPR: 为压缩数据分配的空间量,包括其压缩数据、分配、复制和擦除编码开销。
  • UNDER COMPR: 通过压缩格式传输的数据量,以压缩形式存储有更多益处。
注意

POOLS 部分中的数字是估算的。它们不包括副本数、快照或克隆的数量。因此,USED%USED 数值的总和可能会与输出的 GLOBAL 部分中的 RAW USED%RAW USED 不同。

注意

MAX AVAIL 值是所用的复制或纠删代码的一个复杂功能,CRUSH 规则将存储映射到设备、这些设备的使用以及配置的 mon_osd_full_ratio

其它资源

3.1.5. 了解 OSD 使用统计

使用 ceph osd df 命令查看 OSD 使用率统计。

示例

[ceph: root@host01 /]# ceph osd df
ID CLASS WEIGHT  REWEIGHT SIZE    USE     DATA    OMAP    META    AVAIL   %USE VAR  PGS
 3   hdd 0.90959  1.00000  931GiB 70.1GiB 69.1GiB      0B    1GiB  861GiB 7.53 2.93  66
 4   hdd 0.90959  1.00000  931GiB 1.30GiB  308MiB      0B    1GiB  930GiB 0.14 0.05  59
 0   hdd 0.90959  1.00000  931GiB 18.1GiB 17.1GiB      0B    1GiB  913GiB 1.94 0.76  57
MIN/MAX VAR: 0.02/2.98  STDDEV: 2.91

  • ID: OSD 的名称。
  • CLASS: OSD 使用的设备类型。
  • WEIGHT: CRUSH 映射中的 OSD 权重。
  • REWEIGHT: 默认的重新加权值。
  • SIZE: OSD 的整体存储容量。
  • USE: OSD 容量。
  • DATA: 用户数据使用的 OSD 容量量。
  • OMAP: 用于存储对象映射(omap)数据(rocksdb 中存储的键值对)的 bluefs 存储的估算值。
  • META: 分配的 bluefs 空间或在 bluestore_bluefs_min 参数中设置的值(取决于哪个值更大),对于内部元数据,它的值是在 bluefs 中分配的总空间减去预计的 omap 数据大小。
  • AVAIL: OSD 上可用的空间量。
  • %USE: OSD 使用的存储百分比
  • VAR: 高于或低于平均利用率的差异。
  • PGS: OSD 中的置放组数量。
  • MIN/MAX VAR: 所有 OSD 的最小和最大变化。

其它资源

3.1.6. 检查存储集群状态

您可以从命令行界面查看 Red Hat Ceph Storage 集群的状态。status 子命令或 -s 参数将显示存储集群的当前状态。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 要检查存储集群的状态,请执行以下操作:

    示例

    [ceph: root@host01 /]# ceph status

    或者

    示例

    [ceph: root@host01 /]# ceph -s

  3. 在交互模式中,键入 ceph 并按 Enter 键:

    示例

    [ceph: root@host01 /]# ceph
    ceph> status
      cluster:
        id:     499829b4-832f-11eb-8d6d-001a4a000635
        health: HEALTH_WARN
                1 stray daemon(s) not managed by cephadm
                1/3 mons down, quorum host03,host02
                too many PGs per OSD (261 > max 250)
    
      services:
        mon:     3 daemons, quorum host03,host02 (age 3d), out of quorum: host01
        mgr:     host01.hdhzwn(active, since 9d), standbys: host05.eobuuv, host06.wquwpj
        osd:     12 osds: 11 up (since 2w), 11 in (since 5w)
        rgw:     2 daemons active (test_realm.test_zone.host04.hgbvnq, test_realm.test_zone.host05.yqqilm)
        rgw-nfs: 1 daemon active (nfs.foo.host06-rgw)
    
      data:
        pools:   8 pools, 960 pgs
        objects: 414 objects, 1.0 MiB
        usage:   5.7 GiB used, 214 GiB / 220 GiB avail
        pgs:     960 active+clean
    
      io:
        client:   41 KiB/s rd, 0 B/s wr, 41 op/s rd, 27 op/s wr
    
    ceph> health
    HEALTH_WARN 1 stray daemon(s) not managed by cephadm; 1/3 mons down, quorum host03,host02; too many PGs per OSD (261 > max 250)
    
    ceph> mon stat
    e3: 3 mons at {host01=[v2:10.74.255.0:3300/0,v1:10.74.255.0:6789/0],host02=[v2:10.74.249.253:3300/0,v1:10.74.249.253:6789/0],host03=[v2:10.74.251.164:3300/0,v1:10.74.251.164:6789/0]}, election epoch 6688, leader 1 host03, quorum 1,2 host03,host02

3.1.7. 检查 Ceph Monitor 状态

如果存储集群有多个 Ceph Monitor(这是生产环境 Red Hat Ceph Storage 集群的要求),您可以在开始存储集群后检查 Ceph Monitor 仲裁状态,并在执行任何读取或写入数据前检查 Ceph Monitor 仲裁状态。

当运行了多个 Ceph monitor 时,必须存在仲裁。

定期检查 Ceph Monitor 状态,以确保它们正在运行。如果 Ceph Monitor 出现问题,这会防止达成存储集群状态协议,因此会阻止 Ceph 客户端读取和写入数据。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 要显示 Ceph Monitor 映射,请执行以下操作:

    示例

    [ceph: root@host01 /]# ceph mon stat

    示例

    [ceph: root@host01 /]# ceph mon dump

  3. 要检查存储集群的仲裁状态,请执行以下操作:

    [ceph: root@host01 /]# ceph quorum_status -f json-pretty

    Ceph 返回仲裁状态。

    示例

    {
        "election_epoch": 6686,
        "quorum": [
            0,
            1,
            2
        ],
        "quorum_names": [
            "host01",
            "host03",
            "host02"
        ],
        "quorum_leader_name": "host01",
        "quorum_age": 424884,
        "features": {
            "quorum_con": "4540138297136906239",
            "quorum_mon": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune",
                "nautilus",
                "octopus",
                "pacific",
                "elector-pinging"
            ]
        },
        "monmap": {
            "epoch": 3,
            "fsid": "499829b4-832f-11eb-8d6d-001a4a000635",
            "modified": "2021-03-15T04:51:38.621737Z",
            "created": "2021-03-12T12:35:16.911339Z",
            "min_mon_release": 16,
            "min_mon_release_name": "pacific",
            "election_strategy": 1,
            "disallowed_leaders: ": "",
            "stretch_mode": false,
            "features": {
                "persistent": [
                    "kraken",
                    "luminous",
                    "mimic",
                    "osdmap-prune",
                    "nautilus",
                    "octopus",
                    "pacific",
                    "elector-pinging"
                ],
                "optional": []
            },
            "mons": [
                {
                    "rank": 0,
                    "name": "host01",
                    "public_addrs": {
                        "addrvec": [
                            {
                                "type": "v2",
                                "addr": "10.74.255.0:3300",
                                "nonce": 0
                            },
                            {
                                "type": "v1",
                                "addr": "10.74.255.0:6789",
                                "nonce": 0
                            }
                        ]
                    },
                    "addr": "10.74.255.0:6789/0",
                    "public_addr": "10.74.255.0:6789/0",
                    "priority": 0,
                    "weight": 0,
                    "crush_location": "{}"
                },
                {
                    "rank": 1,
                    "name": "host03",
                    "public_addrs": {
                        "addrvec": [
                            {
                                "type": "v2",
                                "addr": "10.74.251.164:3300",
                                "nonce": 0
                            },
                            {
                                "type": "v1",
                                "addr": "10.74.251.164:6789",
                                "nonce": 0
                            }
                        ]
                    },
                    "addr": "10.74.251.164:6789/0",
                    "public_addr": "10.74.251.164:6789/0",
                    "priority": 0,
                    "weight": 0,
                    "crush_location": "{}"
                },
                {
                    "rank": 2,
                    "name": "host02",
                    "public_addrs": {
                        "addrvec": [
                            {
                                "type": "v2",
                                "addr": "10.74.249.253:3300",
                                "nonce": 0
                            },
                            {
                                "type": "v1",
                                "addr": "10.74.249.253:6789",
                                "nonce": 0
                            }
                        ]
                    },
                    "addr": "10.74.249.253:6789/0",
                    "public_addr": "10.74.249.253:6789/0",
                    "priority": 0,
                    "weight": 0,
                    "crush_location": "{}"
                }
            ]
        }
    }

3.1.8. 使用 Ceph 管理 socket

使用管理套接字可以通过 UNIX 套接字文件直接与给定守护进程交互。例如,这个套接字可以:

  • 在运行时列出 Ceph 配置
  • 在运行时直接设置配置值,而不依赖 Monitor。当 Monitor 停机时,这非常有用。
  • 转储历史操作
  • 转储操作优先级队列状态
  • 在不重启的情况下转储操作
  • 转储性能计数器

此外,在对 Ceph monitor 或 OSD 相关的问题进行故障排除时,使用 socket 非常有用。

无论如何,如果守护进程没有运行,在尝试使用管理套接字时会返回以下错误:

Error 111: Connection Refused
重要

管理套接字仅在守护进程正在运行时才可用。当您正确关闭守护进程时,管理套接字会被删除。但是,如果守护进程意外终止,管理套接字可能仍然会被保留。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 使用套接字:

    语法

    ceph daemon MONITOR_ID COMMAND

    替换:

    • 守护进程的 MONITOR_ID
    • 带有要运行的命令的 COMMAND。使用 help 列出给定守护进程的可用命令。

      查看 Ceph Monitor 的状态:

      示例

      [ceph: root@host01 /]# ceph daemon mon.host01 help
      {
          "add_bootstrap_peer_hint": "add peer address as potential bootstrap peer for cluster bringup",
          "add_bootstrap_peer_hintv": "add peer address vector as potential bootstrap peer for cluster bringup",
          "compact": "cause compaction of monitor's leveldb/rocksdb storage",
          "config diff": "dump diff of current config and default config",
          "config diff get": "dump diff get <field>: dump diff of current and default config setting <field>",
          "config get": "config get <field>: get the config value",
          "config help": "get config setting schema and descriptions",
          "config set": "config set <field> <val> [<val> ...]: set a config variable",
          "config show": "dump current config settings",
          "config unset": "config unset <field>: unset a config variable",
          "connection scores dump": "show the scores used in connectivity-based elections",
          "connection scores reset": "reset the scores used in connectivity-based elections",
          "counter dump": "dump all labeled and non-labeled counters and their values",
          "counter schema": "dump all labeled and non-labeled counters schemas",
          "dump_historic_ops": "show recent ops",
          "dump_historic_slow_ops": "show recent slow ops",
          "dump_mempools": "get mempool stats",
          "get_command_descriptions": "list available commands",
          "git_version": "get git sha1",
          "heap": "show heap usage info (available only if compiled with tcmalloc)",
          "help": "list available commands",
          "injectargs": "inject configuration arguments into running daemon",
          "log dump": "dump recent log entries to log file",
          "log flush": "flush log entries to log file",
          "log reopen": "reopen log file",
          "mon_status": "report status of monitors",
          "ops": "show the ops currently in flight",
          "perf dump": "dump non-labeled counters and their values",
          "perf histogram dump": "dump perf histogram values",
          "perf histogram schema": "dump perf histogram schema",
          "perf reset": "perf reset <name>: perf reset all or one perfcounter name",
          "perf schema": "dump non-labeled counters schemas",
          "quorum enter": "force monitor back into quorum",
          "quorum exit": "force monitor out of the quorum",
          "sessions": "list existing sessions",
          "smart": "Query health metrics for underlying device",
          "sync_force": "force sync of and clear monitor store",
          "version": "get ceph version"
      }

      示例

      [ceph: root@host01 /]# ceph daemon mon.host01 mon_status
      
      {
          "name": "host01",
          "rank": 0,
          "state": "leader",
          "election_epoch": 120,
          "quorum": [
              0,
              1,
              2
          ],
          "quorum_age": 206358,
          "features": {
              "required_con": "2449958747317026820",
              "required_mon": [
                  "kraken",
                  "luminous",
                  "mimic",
                  "osdmap-prune",
                  "nautilus",
                  "octopus",
                  "pacific",
                  "elector-pinging"
              ],
              "quorum_con": "4540138297136906239",
              "quorum_mon": [
                  "kraken",
                  "luminous",
                  "mimic",
                  "osdmap-prune",
                  "nautilus",
                  "octopus",
                  "pacific",
                  "elector-pinging"
              ]
          },
          "outside_quorum": [],
          "extra_probe_peers": [],
          "sync_provider": [],
          "monmap": {
              "epoch": 3,
              "fsid": "81a4597a-b711-11eb-8cb8-001a4a000740",
              "modified": "2021-05-18T05:50:17.782128Z",
              "created": "2021-05-17T13:13:13.383313Z",
              "min_mon_release": 16,
              "min_mon_release_name": "pacific",
              "election_strategy": 1,
              "disallowed_leaders: ": "",
              "stretch_mode": false,
              "features": {
                  "persistent": [
                      "kraken",
                      "luminous",
                      "mimic",
                      "osdmap-prune",
                      "nautilus",
                      "octopus",
                      "pacific",
                      "elector-pinging"
                  ],
                  "optional": []
              },
              "mons": [
                  {
                      "rank": 0,
                      "name": "host01",
                      "public_addrs": {
                          "addrvec": [
                              {
                                  "type": "v2",
                                  "addr": "10.74.249.41:3300",
                                  "nonce": 0
                              },
                              {
                                  "type": "v1",
                                  "addr": "10.74.249.41:6789",
                                  "nonce": 0
                              }
                          ]
                      },
                      "addr": "10.74.249.41:6789/0",
                      "public_addr": "10.74.249.41:6789/0",
                      "priority": 0,
                      "weight": 0,
                      "crush_location": "{}"
                  },
                  {
                      "rank": 1,
                      "name": "host02",
                      "public_addrs": {
                          "addrvec": [
                              {
                                  "type": "v2",
                                  "addr": "10.74.249.55:3300",
                                  "nonce": 0
                              },
                              {
                                  "type": "v1",
                                  "addr": "10.74.249.55:6789",
                                  "nonce": 0
                              }
                          ]
                      },
                      "addr": "10.74.249.55:6789/0",
                      "public_addr": "10.74.249.55:6789/0",
                      "priority": 0,
                      "weight": 0,
                      "crush_location": "{}"
                  },
                  {
                      "rank": 2,
                      "name": "host03",
                      "public_addrs": {
                          "addrvec": [
                              {
                                  "type": "v2",
                                  "addr": "10.74.249.49:3300",
                                  "nonce": 0
                              },
                              {
                                  "type": "v1",
                                  "addr": "10.74.249.49:6789",
                                  "nonce": 0
                              }
                          ]
                      },
                      "addr": "10.74.249.49:6789/0",
                      "public_addr": "10.74.249.49:6789/0",
                      "priority": 0,
                      "weight": 0,
                      "crush_location": "{}"
                  }
              ]
          },
          "feature_map": {
              "mon": [
                  {
                      "features": "0x3f01cfb9fffdffff",
                      "release": "luminous",
                      "num": 1
                  }
              ],
              "osd": [
                  {
                      "features": "0x3f01cfb9fffdffff",
                      "release": "luminous",
                      "num": 3
                  }
              ]
          },
          "stretch_mode": false
      }

  3. 或者,使用其套接字文件指定 Ceph 守护进程:

    语法

    ceph daemon /var/run/ceph/SOCKET_FILE COMMAND

  4. 查看特定主机上名为 osd.0 的 Ceph OSD 的状态:

    示例

    [ceph: root@host01 /]# ceph daemon /var/run/ceph/ceph-osd.0.asok status
    {
        "cluster_fsid": "9029b252-1668-11ee-9399-001a4a000429",
        "osd_fsid": "1de9b064-b7a5-4c54-9395-02ccda637d21",
        "whoami": 0,
        "state": "active",
        "oldest_map": 1,
        "newest_map": 58,
        "num_pgs": 33
    }

    注意

    对于为特定守护进程可用的各种选项,您可以使用 help 而不是 status

  5. 列出 Ceph 进程的所有套接字文件:

    示例

    [ceph: root@host01 /]# ls /var/run/ceph

其它资源

3.1.9. 了解 Ceph OSD 状态

Ceph OSD 的状态可以是 in 存储集群,或 out 存储集群。它可以是 up 并运行,或 down 并没有运行。如果 Ceph OSD 为 up,它可以在存储集群,可以在其中读取和写入数据,或者在存储集群。如果它以前位于存储集群中,并最近从存储集群中移出,Ceph 将开始将放置组迁移到其他 Ceph OSD。如果 Ceph OSD 不在存储集群中,CRUSH 不会将放置组分配到 Ceph OSD。如果 Ceph OSD 是 down,它应该也是 out

注意

如果 Ceph OSD 已关闭 且处于 in 状态,则存储集群将处于健康状态。

OSD 状态

如果执行诸如 ceph health, ceph -sceph -w 等命令,您可能会注意到存储集群并不总是回显 HEALTH OK。不需要紧张对于 Ceph OSD,您可以预计在一些预期情况下,存储集群不会 反映 HEALTH OK

  • 还没有启动存储集群,且没有响应。
  • 您刚启动或重启了存储集群,当还没有就绪,因为放置组正在被创建,Ceph OSD 正在进行对等处理。
  • 您刚添加或删除 Ceph OSD。
  • 您刚修改了存储集群映射。

监控 Ceph OSD 的一个重要方面是,当存储集群启动并正在运行,所有存在于存储集群中的所有 Ceph OSD 的状态为up 并在正常运行。

要查看所有 OSD 是否在运行,请执行:

示例

[ceph: root@host01 /]# ceph osd stat

示例

[ceph: root@host01 /]# ceph osd dump

结果应该显示 map epoch, eNNNN, OSD 的总数量, x, 多少个, y, 是 up, 多少个, z, 是 in:

eNNNN: x osds: y up, z in

如果存在于存储集群中的 Ceph OSD 数量超过了状态为 up 的数量。执行以下命令来标识没有运行的 ceph-osd 守护进程:

示例

[ceph: root@host01 /]# ceph osd tree

# id    weight  type name   up/down reweight
-1  3   pool default
-3  3       rack mainrack
-2  3           host osd-host
0   1               osd.0   up  1
1   1               osd.1   up  1
2   1               osd.2   up  1

提示

通过设计良好的 CRUSH 层次结构搜索功能可以帮助您更加快速地通过确定物理位置对存储集群进行故障排除。

如果 Ceph OSD 为 down,连接到该节点并启动它。您可以使用 Red Hat Storage Console 重启 Ceph OSD 守护进程,或者通过命令行。

语法

systemctl start CEPH_OSD_SERVICE_ID

示例

[root@host01 ~]# systemctl start ceph-499829b4-832f-11eb-8d6d-001a4a000635@osd.6.service

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.