ceph osd pg upmap

概述

在我们巡检ceph集群、处理故障或者进行迁移等操作时,pg往往是最需要关注项之一。一方面pg的健康状态会直接影响集群能否正常提供业务,另一方面,pg的分布会影响集群osd的容量与负载均衡。ceph根据crush rule,采用分布式哈希算法,也就是以计算代替查表的方式进行数据分布。由于伪随机性和众多因素(pgnum合理性,硬件规格统一性,后期结构调整,ceph),很多时候pg的分布往往达不到我们想要的效果,此时便需要我们手动进行pg的调整。

常见场景

以下是几种可能需要手动处理的常见场景

  1. 集群osd 容量不均衡,相差较大,需手动均衡
  2. pg卡在backfill_toofull无法自动消除
  3. 多个高危osd存在交叉pg时,手动调整避免风险

PG set

在查看pg dump时,可以看到每个pg都有两个分布信息,分别为up set与acting set。acting set可以理解为pg当前在哪些osd上有数据,up set可以理解为pg最终需要分布在哪些osd上。当acting set值域up set值一致时,且每个osd上的pg数据都正确时,pg状态才会进入active+clean状态。而pg的backfill过程也是从acting set的osd向up set中的osd恢复。

PG_STAT  UP           ACTING 
3.111    [0,1,3]      [0,1,2]

以这个pg为例,当前pg数据在osd[0,1,2]上,最终目标osd组合为[0,1,3],可以简单地理解为该pg数据从osd.2上迁移到osd.3上,对应的结果就是在ceph osd df中预期可以看到osd.2的容量下降,osd.3的容量上升。

调整pg up set

有如下两种方式调整pg up set,命令与参数如下

ceph osd pg-upmap pg.id  [<osd.id> <osd.id> <osd.id>] #参数为pgid和目标的up set组合
ceph osd pg-upmap-items pg.id  oldosd.id newosd.id [<oldosd.id> <newosd.id>] #参数为pgid,和成对出现的osdid

假设当前存在一个集群,其tree如下

ID   CLASS  WEIGHT      TYPE NAME            STATUS  REWEIGHT  PRI-AFF
 -1         6          root default                                                                
              2          host node0                            
       hdd     1             osd.0       up   1.00000  1.00000
       hdd     1             osd.1       up   1.00000  1.00000
              2          host node1                            
       hdd     1             osd.2       up   1.00000  1.00000
       hdd     1             osd.3       up   1.00000  1.00000
              2          host node2                            
       hdd     1             osd.4       up   1.00000  1.00000
       hdd     1             osd.5       up   1.00000  1.00000

当前存在一个clean的pg 3.11b,其up set与acting set都是[0,2,4],而当前osd.2和osd.4使用率过高,osd.3和osd.5使用率较低。以下两条命令都可以实现osd的容量均衡调整

root@mon0:~# ceph osd pg-upmap 3.11b 0 3 5
set 3.11b pg_upmap mapping to [0,3,5]

通过执行返回可以看出,该命令直接将pg的目标up set设置为目标osd组合。
也可以通过如下命令

ceph osd pg-upmap 3.11b 2 3 4 5
set 3.11b pg_upmap_items mapping to [2->3] [4->5] 

相对而言,更推荐第二种方式

  • 比较直观看出pg迁移动向
  • 如果参数输错,或给出的osdid不合理(osdid未成对出现,或者不符合容灾规则),则不会执行

实际场景

以下为几种常用场景

pg backfill_toofull

假设pg处于backfill_toofull状态,一般是up set中的osd存在部分超过osd_backfillfull_ratio阈值的osd,如果该osd本身利用率就很高,还要大量pg 需要向上迁移,这种场景,单单调整osd_backfillfull_ratio只能拖延,过段时间该osd仍会超出阈值,无法从根本上解决问题,如果该osd所在host上存在使用率较低的osd,则可以通过up-upmap-items 进行迁移。

osd使用率不均衡

ceph osd df默认顺序与ceph osd tree一致,假设每个host下一共10个osd,假设host下第一个osd为0,则可以通过如下命令对该host下osd进行排序

ceph osd df |grep -A 9 ^"  0"|sort -k17 -n#排序列各版本不同,需自行确认,“  0”需根据集群osd编号长度确定

高危PG

假如三副本集群中已有一块硬盘损坏,而监测发现,另一块硬盘已经开始计数错误告警,如果直接更换该硬盘,则会导致部分pg单副本,根据pg dump,找出降级的pg,使用upmap提前迁移至其他安全硬盘,避免单副本数据。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值