Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

3.2.3. 监控 PG 状态

如果您执行 ceph healthceph -sceph -w 等命令,您可能会注意到集群并不总是回显 HEALTH OK。在检查 OSD 是否在运行后,您也应检查 PG 状态。您应预计,在多个与 peering 相关的放置组中,集群 不会 回显 HEALTH OK

  • 您刚刚创建了一个池和放置组,但尚未创建对等组。
  • PG 正在恢复。
  • 您刚刚将 OSD 添加到集群中或从集群中删除了 OSD。
  • 您刚刚修改过 CRUSH map,而 PG 正在迁移。
  • 放置组的不同副本中的数据不一致。
  • Ceph 正在清理 PG 的副本。
  • Ceph 没有足够的存储容量来完成回填操作。

如果其中一个情况导致 Ceph 回显 HEALTH WARN,请不要 panic。在很多情况下,集群会自行恢复。在某些情况下,您可能需要采取行动。监控 PG 的一个重要方面是确保在集群启动并运行时,所有放置组都是 active,最好是处于 clean 状态。要查看所有 PG 的状态,请执行:

# ceph pg stat

结果应该告诉您放置组映射版本 vNNNNNN、放置组总数 x 以及放置组 y 处于特定状态,如 active+clean:

vNNNNNN: x pgs: y active+clean; z bytes data, aa MB used, bb GB / cc GB avail
注意

Ceph 通常报告 PG 的多个状态。

快照 Trimming PG 状态

存在快照时,将报告两个额外的 PG 状态。

  • snaptrim : PG 目前被修剪
  • snaptrim_wait : PG 等待修剪

输出示例:

244 active+clean+snaptrim_wait
 32 active+clean+snaptrim
注意

如需了解有关快照修剪设置的更多详细信息,请参见《红帽 Ceph 存储 3 配置指南》 中的各种 OSD 设置。

除了放置组状态外,Ceph 还将回显所使用的数据量、aa、剩余存储容量量、bb 以及放置组的总存储容量。这些数据在少数情况下可能很重要:

  • 您将到达 near full ratiofull ratio
  • 由于 CRUSH 配置中出现错误,您的数据不会在集群中分布。

放置组 ID

放置组 ID 由池编号而不是池名称组成,后跟句点(.)和放置组 ID-​a 十六进制数字。您可以从 ceph osd lspools 的输出中查看池号及其名称。默认池名称 datametadatarbd 分别对应于池号 012。完全限定 PG ID 具有以下格式:

<pool_num>.<pg_id>

输出示例:

0.1f
  • 检索 PG 列表:

    # ceph pg dump
  • 以 JSON 格式格式化输出并将其保存到文件中:

    # ceph pg dump -o <file_name> --format=json
  • 查询特定放置组:

    # ceph pg <pool_num>.<pg_id> query

    JSON 格式的输出示例:

    {
      "state": "active+clean",
      "up": [
        1,
        0
      ],
      "acting": [
        1,
        0
      ],
      "info": {
        "pgid": "1.e",
        "last_update": "4'1",
        "last_complete": "4'1",
        "log_tail": "0'0",
        "last_backfill": "MAX",
        "purged_snaps": "[]",
        "history": {
          "epoch_created": 1,
          "last_epoch_started": 537,
          "last_epoch_clean": 537,
          "last_epoch_split": 534,
          "same_up_since": 536,
          "same_interval_since": 536,
          "same_primary_since": 536,
          "last_scrub": "4'1",
          "last_scrub_stamp": "2013-01-25 10:12:23.828174"
        },
        "stats": {
          "version": "4'1",
          "reported": "536'782",
          "state": "active+clean",
          "last_fresh": "2013-01-25 10:12:23.828271",
          "last_change": "2013-01-25 10:12:23.828271",
          "last_active": "2013-01-25 10:12:23.828271",
          "last_clean": "2013-01-25 10:12:23.828271",
          "last_unstale": "2013-01-25 10:12:23.828271",
          "mapping_epoch": 535,
          "log_start": "0'0",
          "ondisk_log_start": "0'0",
          "created": 1,
          "last_epoch_clean": 1,
          "parent": "0.0",
          "parent_split_bits": 0,
          "last_scrub": "4'1",
          "last_scrub_stamp": "2013-01-25 10:12:23.828174",
          "log_size": 128,
          "ondisk_log_size": 128,
          "stat_sum": {
            "num_bytes": 205,
            "num_objects": 1,
            "num_object_clones": 0,
            "num_object_copies": 0,
            "num_objects_missing_on_primary": 0,
            "num_objects_degraded": 0,
            "num_objects_unfound": 0,
            "num_read": 1,
            "num_read_kb": 0,
            "num_write": 3,
            "num_write_kb": 1
          },
          "stat_cat_sum": {
    
          },
          "up": [
            1,
            0
          ],
          "acting": [
            1,
            0
          ]
        },
        "empty": 0,
        "dne": 0,
        "incomplete": 0
      },
      "recovery_state": [
        {
          "name": "Started\/Primary\/Active",
          "enter_time": "2013-01-23 09:35:37.594691",
          "might_have_unfound": [
    
          ],
          "scrub": {
            "scrub_epoch_start": "536",
            "scrub_active": 0,
            "scrub_block_writes": 0,
            "finalizing_scrub": 0,
            "scrub_waiting_on": 0,
            "scrub_waiting_on_whom": [
    
            ]
          }
        },
        {
          "name": "Started",
          "enter_time": "2013-01-23 09:35:31.581160"
        }
      ]
    }

以下小节更详细地描述了常见状态。

3.2.3.1. Create

创建池时,它将创建您指定的 PG 数量。在创建一个或多个 PG 时,Ceph 将回显 creating。创建之后,属于放置组操作集合一部分的 OSD 将对它们进行对等操作。完成 peering 后,放置组状态应为 active+clean,这意味着 Ceph 客户端可以开始写入 PG。

Creating PGs