Ceph中出现unfound object的情况和处理
来源:互联网 发布:技术支持0538泰安网络 编辑:程序博客网 时间:2024/05/01 16:04
在上周的ceph-devel 邮件列表中,有人提到了在测试的环境中出现了 unfound object 的状态,本文试图分析这种情况发生的原理。
首先介绍一下什么是 unfoud object ? unfoud object 对象就是 完成了peering 过程,各个副本达成了一致的状态。 简单的说,就是在副本中确定了对象的正确的版本。 在recovery 过程中,要去确定该正确的版本对象 所在的osd上的位置,如果没有找到 拥有该正确 版本的 osd,该对象就被标记为 unfoud object。
通过上述分析可知,unfoud object 就是完成了peering 过程,但在 recovery 过程中找不到该对象正确版本所在的osd,无法恢复。
场景1
一个pg,两副本,其acting set 为 [osd1,osd2]
此时pg处于recovery状态,osd1上有 缺失的对象 (missing object),等待恢复。 osd2 上有完整的对象,正常情况下从osd2上同步osd1上缺失的对象即可。 这时候osd2 down掉后。 pg 重新开始peering,acting set 为[osd1,osd3],
osd1保存了权威的日志记录,peering可以完成。在恢复阶段,osd1上有缺失的对象无法恢复, 这些缺失的对象就处于 unfound object状态。
这种情况发生的实质就是: pg只有两副本,在rocovery 状态中,只有osd2是一个完整的副本。如果唯一一个拥有完整副本的osd2 也down 了, 必然出现unfoud 对象。
场景2
当有request被阻塞时, 剔除以osd。
pool 的size 为3 , min_size 为2 。给集群添加负载,使集群会出现 “requests are blocked > 32 sec” 的提示。 此时剔除一个盘,其方法如下:
移除节点操作如下:
ceph osd out osd.id
service ceph osd.1 stop
ceph osd crush remove osd.id 和host
ceph rm osd.id
ceph auth del osd.id
分析如下:
pg 的acting set 为 [osd1, osd2, osd3],当执行 ceph osd out osd.1时:
该pg上对象objA:
osd1 objA(22) objA(23) 已完成 osd2 objA(22) objA(23) 正在完成 osd3 objA(22) objA(23 正在完成
此时,osd1完成的对象objA 的版本22 和 23 的操作。而副本osd2和osd3 的对象objA的 22 和 23 操作都没有完成。
osd1被标记为out后,osd2 和 osd3 首先都收到了 monitor发送来的 osdmap的变化。 pg的 acting set 变为[osd2, osd3, osd4], pg开始触发peering,在peering的过程中能够从osd1上获取pg log(由于osd标记为out,可以继续访问到), 确定对象ojbA的版本为23.
当recovery 时, osd1 被停止,对象objA的23版本数据无法读出,就标记为unfound object。
从上可知,objA的23版本只在以 osd1上存在一个唯一副本。它参与了peering 过程,从而获取了该对象的权威版本,但是随时把该osd down后,就无法获取数据导致。
有以上原因分析可知:
1)当管理员缩容时,建议标记为osd out后,等待ceph集群处于clean 状态,确定请求没有被阻塞时,才能停止osd
2)当有 request are blocked 的情况下,osd失效导致产生 unfound object。 在这种情况,正如情况2 中的例子,无论是版本22,或者23,数据都没有应答给客户端。所以最终结果是版本22或者23或者最后一次写入成功的版本都可以接受。
- Ceph中出现unfound object的情况和处理
- 部署完ceph出现 osd down情况时的解决方法
- ceph中radosgw的put object代码走读
- ceph中radosgw的get object代码走读
- firefox(火狐)浏览器中ajax请求返回data时出现[object XMLDocument]的情况的分析
- ceph存储 object的attr和omap操作
- Python 文件中出现中文情况处理
- ceph存储 ceph中pglog处理流程
- 解释object c 中经常出现的initWith... 和....With...
- Ceph中PG和PGP的区别
- 经常出现情况的处理原则
- C# 处理字符串中带有 / 和 "" 的情况
- 关于firefox(火狐)浏览器中ajax请求返回data时出现[object XMLDocument]的情况的分析
- C#中对文件操作出现“无权限、被占用”情况的处理
- 步进电机在运行过程中出现“只响不转”的情况该怎样处理
- ceph存储 ceph中PG的意义
- Android中出现OOM情况的研究
- shell 中出现了乱码的情况
- 执行器实现返回多个任务并处理第一个结果
- 设计模式:(1)工厂方法模式(Factory Method)
- 【编程马拉松】【010-杨辉三角】
- 数据库设计
- 什么是java异步
- Ceph中出现unfound object的情况和处理
- java基础之线程
- ubuntu12.04清除释放内存空间。
- Delete Node in a Linked List
- C语言关系和逻辑运算符与分支语句
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
- 剑指offer(四十八)之复杂链表的复制
- 4系统环境搭配
- Ubuntu下搭建LAMP环境