ceph相关概念

1 crush

一、CRUSH 规则配置

1. 查看 CRUSH 规则列表

[root@ceph141 ~]# ceph osd crush rule ls  
replicated_rule
erasure-code
cmy

2. 查看 CRUSH 规则详细信息(JSON 格式)

[root@ceph141 ~]# ceph osd crush rule dump

2 平衡器 (Balancer)

1. 查看平衡器状态

[root@ceph141 ~]# ceph balancer status
{
    "active": true,
    "last_optimize_duration": "0:00:00.002693",
    "last_optimize_started": "Wed May 21 03:21:29 2025",
    "mode": "upmap",
    "no_optimization_needed": true,
    "optimize_result": "Unable to find further optimization...",
    "plans": []
}

2. 平衡器关键参数配置

参数名称 配置命令 当前值 说明
最大不平衡比例阈值 ceph config get mgr target_max_misplaced_ratio 0.05 数据分布最大允许的不平衡比例(默认 5%)
平衡检测间隔时间(秒) ceph config get mgr mgr/balancer/sleep_interval 60 自动检测数据分布的时间间隔
平衡开始时间(HHMM) ceph config get mgr mgr/balancer/begin_time 0000 每日开始自动平衡的时间(默认 0 点)
平衡结束时间(HHMM) ceph config get mgr mgr/balancer/end_time 2359 每日结束自动平衡的时间(默认 23:59)
平衡开始星期(0 = 星期日) ceph config get mgr mgr/balancer/begin_weekday 0 每周开始自动平衡的星期(默认周日)
平衡结束星期(6 = 星期六) ceph config get mgr mgr/balancer/end_weekday 6 每周结束自动平衡的星期(默认周六)
应用平衡的存储池 ID(空 = 所有池) ceph config get mgr mgr/balancer/pool_ids "" 指定需要平衡的存储池 ID(多个用逗号分隔)

3. 数据平衡阶段

  1. 指定计划:生成优化方案
  2. 评估计划:分析方案效果
  3. 执行优化:应用优化方案

3 OSD

1. 查看 OSD 整体状态

[root@ceph141 ~]# ceph osd stat
12 osds: 12 up (since 2h), 12 in (since 2h); epoch: e582

2. 查看 OSD 树形结构

[root@ceph141 ~]# ceph osd tree

2. OSD 状态说明

状态 含义
Up OSD 进程正在运行
Down OSD 进程已停止
In OSD 在集群中,参与数据存储
Out OSD 被标记为离线,不参与数据存储

4 PG

  • 基本概念
    PG(Placement Group,归置组)是 Ceph 存储集群中用于管理对象存储的逻辑分组,是对象与 OSD 之间的中间层。当创建存储池(Pool)时,需为其指定 PG 和 PGP(PG Placement)数量,若未指定则使用配置文件默认值。

  • 关键参数

    • 副本数(Size):默认3,表示每个对象的副本数量,需根据数据安全性调整。
    • PG 数量计算
      公式:PG数量 = (OSD数量 × 目标PG数/OSD) / 副本数
      其中,目标 PG 数 / OSD(官方推荐100,OSD 默认 PG 数量上限250)。
      示例:200 个 OSD,副本数 3 → 200×100/3≈6666.66,通常取2 的幂次方值(如2^12=4096)。
    • PGP 作用:与 PG 数量相等,用于 CRUSH 算法确定 PG 所属 OSD,确保数据分布均衡。
  • 推荐阅读Ceph 官方 PG 配置文档

2. 临时 PG

  • 产生场景
    当主 OSD 故障时,CRUSH 算法重新分配 OSD,需借助临时 PG 完成数据同步。

  • 流程示例

    1. 原 Acting Set:[0,1,2](OSD.0 为主)。
    2. OSD.0 故障,新 Acting Set:[3,1,2](OSD.3 为主),但 OSD.3 未同步数据,无法承担读操作。
    3. PG 申请临时主 OSD.1,Up Set 变为[1,3,2],与 Acting Set 不一致。
    4. OSD.3 完成 Backfill 后,临时 PG 取消,Up Set 与 Acting Set 统一为[3,1,2]

3. PG 相关操作

3.1 获取当前 PG 数量
ceph osd pool get <pool-name> pg_num  # 示例:ceph osd pool get cmy pg_num
3.2 修改 PG 数量
ceph osd pool set <pool-name> pg_num <new-value>  # 示例:ceph osd pool set cmy pg_num 4
  • 注意:修改后需等待数据迁移完成,可通过ceph osd pool get确认结果。
3.3 设置 PG 数量上限
  • 默认限制:每个 OSD 最多承载250个 PG(mon_max_pg_per_osd=250)。

  • 修改上限

    ceph tell mon.* injectargs --mon-max-pg-per_osd=<new-value>  # 示例:设置为1000
    
  • 报错处理:若 PG 数 × 副本数超过 OSD 上限,需调整上限或减少 PG 数。

3.4 获取精简 PG 统计信息
ceph pg dump_stuck          # 查看卡住的PG
ceph pg dump_stuck stale    # 查看过时的PG
ceph -s                     # 集群状态概览(含PG总数)
3.5 查看所有 PG 状态
ceph pg stat  # 显示PG总数及状态(如active+clean)
3.6 查看 PG 对应 OSD 详情
# 方法1:通过存储池名称查询
ceph pg ls-by-pool <pool-name> | awk '{print $1,$2,$16}'  # 显示PG ID、对象数、Acting OSD列表

# 方法2:通过pg dump筛选
ceph pg dump | grep ^<pool-id> | awk '{print $1,$2,$17}'  # 示例:pool ID为8时,grep ^8
3.7 查看指定 PG 的详细统计
ceph pg <pg-id> query  # 示例:ceph pg 8.5 query(显示状态、OSD列表、同步进度等)
3.8 列出不一致的 PG
rados list-inconsistent-pg <pool-name>  # 示例:rados list-inconsistent-pg cmy

4. PG 状态说明

  • 正常状态

    • active:PG 可处理读写请求。
    • clean:对象副本数达到配置要求。
  • 异常状态

状态 说明
degraded 对象副本数不足(需恢复)
inconsistent 副本数据不一致(需修复)
stale OSD 长时间未向 Monitor 报告状态(可能离线)
undersized 副本数低于存储池配置
backfill 正在同步整个 PG 数据(数据迁移)
  • 处理建议

    1. 重启 OSD 服务:systemctl restart ceph-osd@<osd-id>.service
    2. 调整参数:如mon_max_pg_per_osd或副本数
    3. 重置 PG:谨慎使用ceph pg repair <pg-id>ceph pg mark_unclean <pg-id> --force(需评估风险)。

5. 最佳实践

  • PG 数量规划
    • 按公式计算后取2 的幂次方值(如 128、256、512),避免小数和非幂值。
    • 单集群 PG 总数建议不超过6666,优先使用40962^12)。
  • 监控与调优
    • 定期通过ceph -sceph pg stat检查 PG 状态。
    • 若出现too many PGs per OSD警告,需调整mon_max_pg_per_osd或增加 OSD 节点。

5 Map

Ceph 集群的高性能体现在单位时间内处理业务数据的能力,而各类 Map 的作用是将相关资源进行关联,便于查找。以下是 Ceph 集群中常见的 Map:

  • Monitor Map
    存储 Monitor 节点的连接信息,包括 Ceph 集群 ID、Monitor 节点名称、IP 地址和端口等。
  • Crush Map
    是 Ceph 高效数据操作(如写入和查询)的重要支撑,包含数据操作用到的设备列表和存储桶。
  • OSD Map
    保存 OSD 的基本信息,如 ID、状态、副本、PG、OSD 信息等,用于数据均衡性操作。
  • MDS Map
    存储 MDS 的基本信息,包括版本号、创建和修改时间、数据和元数据存储池、数量、MDS 状态等。
  • PG Map
    记录 PG 的基本信息,如 PG ID、数量、状态、版本号、时间戳、容量百分比等。

5.1 Map 信息查看命令及示例

查看 Monitor 相关信息

ceph mon dump

查看 OSD 相关信息

ceph osd dump

查看 MDS 相关信息

ceph node ls mds

2.4 查看 Crush 相关信息

ceph osd crush dump

输出示例(部分):

json

{
    "devices": [
        {
            "id": 0,
            "name": "osd.0",
            "class": "hdd"
        },
        ...
    ],
    "buckets": [
        {
            "id": -1,
            "name": "default",
            "type_id": 11,
            "type_name": "root",
            "weight": 503802,
            "alg": "straw2",
            "hash": "rjenkins1",
            "items": [
                {
                    "id": -3,
                    "weight": 167934,
                    "pos": 0
                },
                ...
            ]
        },
        ...
    ],
    "rules": [
        {
            "rule_id": 0,
            "rule_name": "replicated_rule",
            "type": 1,
            "steps": [
                {
                    "op": "take",
                    "item": -1,
                    "item_name": "default"
                },
                ...
            ]
        },
        ...
    ]
}

2.5 查看 PG 相关信息

ceph pg dump

输出示例(部分):

plaintext

version 12225
stamp 2025-05-21T06:39:07.102204+0000
...
10.ff         11                   0         0          0        0    213534            0           0    14         0        14  active+clean  2025-05-21T02:09:22.215494+0000     398'14   2721:4786    [5,8,2]           5    [5,8,2]               5      332'12  2025-05-20T10:23:31.139745+0000              0'0  2025-05-19T03:15:48.762496+0000              0                    1  periodic scrub scheduled @ 2025-05-21T18:34:22.187358+0000                 0                0
...

2.6 查看 PG-OSD 关系图

  • 按存储池列出 PG 及其对应 OSD

    ceph pg ls-by-pool <pool-name> | awk '{print $1,$2,$16}'
    

    示例(存储池名为 cmy):

    plaintext

    PG OBJECTS ACTING
    22.0 0 [9,10,11]p9
    22.1 0 [11,10,9]p11
    22.2 0 [10,11,9]p10
    ...
    
  • 查看单个 PG 的 OSD 映射

    ceph pg map <pg-id>
    

    示例(PG ID 为 22.5):

    plaintext

    osdmap e2721 pg 22.5 (22.5) -> up [10,9,11] acting [10,9,11]
    

2.7 查看 Ceph 文件对象对应 PG 和 OSD 关系

ceph osd map <pool-name> <object-name>

示例(存储池 cmy,对象 myhosts):

plaintext

osdmap e2721 pool 'cmy' (22) object 'myhosts' -> pg 22.5a39779b (22.3) -> up ([11,9,10], p11) acting ([11,9,10], p11)
上一篇
下一篇