ceph - pg 常见状态

说明

pg ( placement group ) 是数据存储的重要单位
在使用 ceph 的时候, pg 会经常发生状态的变化, 参考下面例子

当创建池的时候, 将会创建相应的 pg, 那么可以看到 pg creating 状态
当部分 pg 创建成功后, 将会发现 pg 会进入 peering 状态
当所有 pg peering 完成后,  将可见到状态变成 active+clean

参考下面常见的 pg 状态

creating (创建中)

PG 正在被创建, 通常当存储池正在卑创建或增加一个存储池的 PG 数量时, PG 会呈现这个状态

Down (失效)

PG 处于失效状态, PG 应该处于离线状态

repair(修复)

PG 正在被检查, 被发现的任何不一致都将尽可能被修复.

peering (等待互联)

1 当 ceph peering pg, ceph 将会把 pg 副本协定导入 osd, 当 ceph 完成 peering, 意味着 osd 同意当前 PG 状态, 并允许写入
2 PG 处于 peering 过程中, peering 由主 osd 发起的使存放 PG 副本的所有 OSD 就 PG 的所有对象和元素数据的状态达成一致的过程,  peering 过程完成后, 主 OSD 就可以接受客户端写请求.

Active (活动)

1 当 ceph 完成 peering 过程, pg 将会变成 active, active 状态意味着 pg 中的数据变得可用, 主 pg 将可执行读写操作
2 PG 是活动的, 意味着 PG 中的数据可以被读写, 对该 PG 的操作请求都讲会被处理.

Clean (干净)

1 当 pg 显示 clean 状态, 主 osd 与副本 osd 成功同步并且没有异步复制, ceph 在 pg 中所有对象具有正确的副本数量
2 PG 中的所有对象都已经卑复制了规定的副本数量.

Replay (重做)

某 OSD 崩溃后, PG 正在等待客户端重新发起操作

Degraded (降级)

1 当客户端写对象到主 osd, 主 OSD 会把数据写复制到对应复制 OSD, 在主 OSD 把对象写入存储后, PG 会显示为 degraded 状态, 直到主 osd 从复制 OSD 中接收到创建副本对象完成信息

2 PG 处于 active+degraded 原因是因为 OSD 是处于活跃, 但并没有完成所有的对象副本写入, 假如 OSD DOWN, CEPH 标记每个 PG 分配到这个相关 OSD 的
状态为 degraded, 当 OSD 重新上线, OSD 将会重新恢复, 

3 假如 OSD DOWN 并且 degraded 状态持续, CEPH 会标记 DOWN OSD, 并会对集群迁移相关 OSD 的数据, 对应时间由 mon osd down out interval 参数决定

4 PG 可以被北极为 degraded, 因为 ceph 在对应 PG 中无法找到一个或者多个相关的对象, 你不可以读写 unfound 对象, 你仍然可以访问标记为 degraded PG 的其他数据

5 PG 中部分对象的副本数量未达到规定的数量

Inconsistent (不一致)

PG副本出现不一致, 对象大小不正确或者恢复借宿后某个副本出现对象丢失现象

recoverying (恢复中)

ceph 设备故障容忍在一定范围的软件与硬件问题, 当 OSD 变 DOWN, 那么包含该 OSD 的 PG 副本都会有问题, 当 OSD 恢复, OSD 对应的 PG 将会更新
并反映出当前状态, 在一段时间周期后, OSD 将会恢复 recoverying 状态

recovery 并非永远都有效, 因为硬件故障可能会导致多个 OSD 故障, 例如, 网络交换机故障, 可以导致集群中的多个主机及主机包含的 OSD 故障
当网络恢复之后, 每个 OSD 都必须执行恢复

CEPH 提供一定数量的设定在新服务请求与恢复 PG 中数据对象时的资源平衡,
osd recovery delay start 设定允许 osd 重启, re-peer 并在启动 恢复之前处理一些回应请求,
osd recovery threads 设定了恢复过程中线程限制 (默认 1 )
osd recovery thread timeout 设定线程超时, 因为可能出现多个 osd 故障, 重启后在 re-peer 过程中可能出现污染
osd recovery max active 设定限制对一个 osd 从故障后, 恢复请求并发数量
osd recovery max chunk 限制恢复时的数据 chunk 大小, 预防网络堵塞

PG 正在迁移或者同步对象及其副本, 一个 OSD 停止服务(DOWN), 其内容将会落后与 PG 内的其他副本, 这时 PG 将会进入 recoverying 状态, 该 OSD 上的对象将从其他副本同步过来

BACK FILLING (回填)

当新 OSD 加入集群, CRUSH 将会为集群新添加的 OSD 重新分配 PG, 强制新的 OSD 接受重新分配的 PG 并把一定数量的负载转移到新 OSD 中
back filling OSD 会在后台处理, 当 backfilling 完成, 新的 OSD 完成后, 将开始对请求进行服务

在 backfill 操作期间, 你可以看到多种状态,
backfill_wait 表示 backfill 操作挂起, 但 backfill 操作还没有开始 ( PG 正在等待开始回填操作 )
backfill 表示 backfill 操作正在执行
backfill_too_full 表示在请求 backfill 操作, 由于存储能力问题, 但不可以完成, 

ceph 提供设定管理装载重新分配 PG 关联到新的 OSD
osd_max_backfills 设定最大数量并发 backfills 到一个 OSD, 默认 10
osd backfill full ratio  当 osd 达到负载, 允许 OSD 拒绝 backfill 请求, 默认 85%,
假如 OSD 拒绝 backfill 请求,  osd backfill retry interval 将会生效, 默认 10 秒后重试
osd backfill scan min ,  osd backfill scan max 管理检测时间间隔

一个新 OSD 加入集群后, CRUSH 会把集群先有的一部分 PG 分配给他, 该过程称为回填, 回填进程完成后, 新 OSD 准备好了就可以对外提供服务

REMAPPED (重映射)

当 pg 改变, 数据从旧的 osd 迁移到新的 osd, 新的主 osd 应该请求将会花费一段时间, 在这段时间内, 将会继续向旧主 osd 请求服务, 直到
PG 迁移完成, 当数据迁移完成,  mapping 将会使用新的 OSD 响应主 OSD 服务

当 PG 的 action set 变化后, 数据将会从旧 acting set 迁移到新 action set, 新主 OSD 需要过一段时间后才能提供服务, 因此它会让老的主 OSD 继续提供服务, 知道 PG 迁移完成, 数据迁移完成后, PG map 将会使用新 acting set 中的主 OSD

参考例子

[root@hh-yun-ceph-cinder015-128055 ~]# ceph osd map volumes rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57
osdmap e5276 pool 'volumes' (1) object 'rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57' -> pg 1.2cdd8028 (1.28) -> up ([32,26,41], p32) acting ([32,26,41], p32)

STALE (旧)

当 ceph 使用 heartbeat 确认主机与进程是否运行,  ceph osd daemon 可能由于网络临时故障, 获得一个卡住状态 (stuck state) 没有得到心跳回应
默认, osd daemon 会每 0.5 秒报告 PG, up 状态, 启动与故障分析,
假如 PG 中主 OSD 因为故障没有回应 monitor 或者其他 OSD 报告 主 osd down, 那么 monitor 将会标记 PG stale,
当你重启集群, 通常会看到 stale 状态, 直到 peering 处理完成,
在集群运行一段时候, 看到 stale 状态, 表示主 osd PG DOWN 或者没有主 osd 没有报告 PG 信息到 monitor 中

PG 处于未知状态, monitors 在 PG map 改变后还没有收到过 PG 的更新, 启用一个集群后, 常常会看到主 peering 过程结束前 PG 处于该状态

Scrubbing (清理中)

PG 在做不一至性校验

有问题的 PG

Unclean: PG 包含对象没有完成相应的复制副本数量, 通常都要执行恢复操作
Inactive: PG 不可以执行读写, 因为等待 OSD 更新数据到最新的备份状态
Stale: PG 处于 unknown 状态, 因为 OSD 没有报告 monitor 由 mon osd report timeout 定义超时时间
时间: 2024-09-20 11:54:01

ceph - pg 常见状态的相关文章

HTTP常见状态码 200 301 302 404 500

HTTP状态码(HTTP Status Code) 一些常见的状态码为: 一.1开头 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码.代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换. 二.2开头 2xx (成功)表示成功处理了请求的状态代码.代码 说明 200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 2

ceph - 索引

架构与部署 openstack 与 ceph (架构) openstack 与 ceph (monitor初始化) openstack 与 ceph (osd 部署) openstack 与 ceph ( pool 管理 ) openstack 管理二十二 - cinder 连接多个存储 backend openstack 管理二十三 - nova compute 连接 ceph 集群 ceph - crush map 与 pool ceph - 更改 ceph journal 位置 故障与测试

Ceph分布式存储实战.

云计算与虚拟化技术丛书 Ceph分布式存储实战 Ceph中国社区 著 图书在版编目(CIP)数据 Ceph分布式存储实战/Ceph中国社区著. -北京:机械工业出版社,2016.11 (云计算与虚拟化技术丛书) ISBN 978-7-111-55358-8 I. C- II. C- III. 分布式文件系统 IV. TP316 中国版本图书馆CIP数据核字(2016)第274895号 Ceph分布式存储实战 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编

Ceph分布式存储实战3.3 CRUSH关系分析

3.3 CRUSH关系分析 从本质上讲,CRUSH算法是通过存储设备的权重来计算数据对象的分布的.在计算过程中,通过Cluster Map(集群映射).Data Distribution Policy(数据分布策略)和给出的一个随机数共同决定数据对象的最终位置. 1. Cluster Map Cluster Map记录所有可用的存储资源及相互之间的空间层次结构(集群中有多少个机架.机架上有多少服务器.每个机器上有多少磁盘等信息).所谓的Map,顾名思义,就是类似于我们生活中的地图.在Ceph存储

ceph osd & placement group's stats introduce

本文主要介绍一下osd和PG的状态监控. OSD有4种状态 :  Up 的OSD可能在集群中(In)或不在集群中(Out), Down的OSD则肯定是不在集群中(Out)的. [root@osd4 ~]# ceph osd stat osdmap e41: 4 osds: 4 up, 4 in 例如以上命令看到的集群的osd状态, 总共有4个OSD, 4个在集群中. 如果你发现有up和in数字不一致, 说明有Down的或Out的osd, 可以通过如下命令查看详情. [root@osd4 ~]#

Ceph分布式存储实2.2 RADOS架构

2.2 RADOS架构 RADOS系统主要由两个部分组成,如图2-2所示. 1)OSD:由数目可变的大规模OSD(Object Storage Devices)组成的集群,负责存储所有的Objects数据. 2)Monitor:由少量Monitors组成的强耦合.小规模集群,负责管理Cluster Map.其中,Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员.关系和属性等信息以及数据的分发.   图2-2 RADOS系统架构图示 对于RADOS系统,节点组织管理和

Ceph实验室:第四课:Ceph监控

本课程演示如何监控一个Ceph集群.我们将学习如何用ceph的命令行工具进行监控. 监控集群的整体状态 健康状态 ceph命令的health选项查看集群的健康状态. # ceph health detail HEALTH_WARN clock skew detected on mon.ceph-node2; Monitor clock skew detected mon.ceph-node2 addr 192.168.1.121:6789/0 clock skew 0.194536s > max

ceph cluster monitor

    作为分布式存储, ceph由很多组件组成, 例如有osd, mon, mds等, 这些组件各自承担了各自的功能, 同时每种组件都可以由多个节点组成, 提供高可用. 监控ceph集群的状态, 包括各个组件的状态监控.     通过ceph命令, 在mon, osd, mds任意节点都可以获取到集群的信息.     例如 :  如果配置文件和KEY不在默认路径, 或集群名不是ceph的话, 请注意提供配置文件和key文件路径. ceph -c /path/to/conf -k /path/t

ceph 故障分析(backfill_toofull)

在执行了 ceph 扩容之前, 发现长时间内都具有下面的状态存在 参考下面信息 # ceph -s cluster dc4f91c1-8792-4948-b68f-2fcea75f53b9 health HEALTH_WARN 13 pgs backfill_toofull; 1 pgs degraded; 1 pgs stuck degraded; 13 pgs stuck unclean; 9 requests are blocked > 32 sec; recovery 190/54152