找回密码
 注册
查看: 528|回复: 0

ceph osd 保持数据完整性

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2022-7-26 10:18:38 | 显示全部楼层 |阅读模式
  • 修复方式 wanted: command to clear 'incomplete' PGs3 e0 O+ g1 B% e6 h) L* v6 W/ p  n
    比如:pg 1.1是incomplete,先对比pg 1.1的主副本之间 pg里面的对象数 哪个对象数多 就把哪个pg export出来7 d$ G5 P* P- ^$ |$ ]- y% L8 U
    然后import到对象数少的pg里面 然后再mark complete,一定要先export pg备份。
    $ R1 ~4 m+ ]$ W- s+ M# K
简单方式,数据可能又丢的情况
a. stop the osd that is primary for the incomplete PG;     b. run: ceph-objectstore-tool --data-path ... --journal-path ... --pgid $PGID --op mark-complete     c. start the osd.  
0 d! J; q8 ^$ M5 m, i1 g
保证数据完整性
#1. 查看pg 1.1主副本里面的对象数,假设主本对象数多,则到主本所在osd节点执行 $ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/lib/ceph/osd/ceph-0/journal --pgid 1.1 --op export --file /home/pg1.1 #2. 然后将/home/pg1.1 scp到副本所在节点(有多个副本,每个副本都要这么操作),然后到副本所在节点执行 $ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op import --file /home/pg1.1 #3. 然后再makr complete $ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op mark-complete  #4. 最后启动osd $ start osd
$ }$ Q7 g" O& _" {6 n# m- k
2 O0 x, J, A# e/ r6 n  F
验证方案
#1. 把状态incomplete的pg,标记为complete。建议操作前,先在测试环境验证,并熟悉ceph-objectstore-tool工具的使用。 PS:使用ceph-objectstore-tool之前需要停止当前操作的osd,否则会报错。  #2. 查询pg 7.123的详细信息,在线使用查询 ceph pg 7.123 query > /export/pg-7.123-query.txt  #3. 每个osd副本节点进行查询 ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op info > /export/pg-7.123-info-osd641.txt 如 pg 7.123 OSD 1 存在1,2,3,4,5 object  pg 7.123 OSD 2 存在1,2,3,6 object  pg 7.123 OSD 2 存在1,2,3,7 object #4. 查询对比数据 #4.1 导出pg的object清单 ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op list > /export/pg-7.123-object-list-osd-641.txt  #4.2 查询pg的object数量 ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op list|wc -l  #4.3 对比所有副本的object是否一致。 diff -u /export/pg-7.123-object-list-osd-1.txt /export/pg-7.123-object-list-osd-2.txt 比如:pg 7.123是incomplete,对比7.123的所有副本之间pg里面的object数量。  - 如上述情况,diff对比后,每个副本(主从所有副本)的object list是否一致。避免有数据不一致。使用数量最多,并且diff对比后,数量最多的包含所有object的备份。  - 如上述情况,diff对比后,数量是不一致,最多的不包含所有的object,则需要考虑不覆盖导入,再导出。最终使用完整的所有的object进行导入。注:import是需要提前remove pg后进行导入,等于覆盖导入。  - 如上述情况,diff对比后,数据是一致,则使用object数量最多的备份,然后import到object数量少的pg里面 然后在所有副本mark complete,一定要先在所有副本的osd节点export pg备份,避免异常后可恢复pg。  #5. 导出备份 查看pg 7.123所有副本里面的object数量,参考上述情况,假设osd-641的object数量多,数据diff对比一致后,则到object数量最多,object list一致的副本osd节点执行(最好是每个副本都进行导出备份,为0也需要导出备份) ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op export --file /export/pg1.414-osd-1.obj #6. 导入备份 然后将/export/pg1.414-osd-1.obj scp到副本所在节点,在对象少的副本osd节点执行导入。(最好是每个副本都进行导出备份,为0也需要导出备份) 将指定的pg元数据导入到当前pg,导入前需要先删除当前pg(remove之前请先export备份一下pg数据)。需要remove当前pg,否则无法导入,提示已存在。 ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123 --op remove 需要加–force才可以删除。 ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123 --op import --file /export/pg1.414-osd-1.obj  #7. 标记pg状态,makr complete(主从所有副本执行) ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123: t  g1 k# ^, T" a: o1 S! m

5 d& J9 ^+ t- C2 y* J) H9 n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 22:58 , Processed in 0.031218 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表