文章目录
- [ceph balancer](#ceph balancer)
以下内容均参考官网:https://docs.ceph.com/en/reef/rados/operations/balancer/
ceph balancer
在老版本的ceph集群中,需要通过 ceph reweight-by-pg 或者 ceph reweight-by-utilization来数据均衡。
在Luminous或更新ceph版本中,为了实现ceph集群中数据均衡分布,balancer工具能优化osd上pg的分布。balancer工具可以自动执行也可以手动执行。
工具状态
c
ceph balancer status
该工具的限制
如果集群中有数据处于降级(degraded)状态,那么ceph balancer就不会对pg分布做任何调整。
否则,balancer将逐步调整一小部分不均衡的 PG(Placement Groups)以达到数据均衡的目的。默认调整pg的阈值是 5%。也可以通过调整参数target_max_misplaced_ratio
来修改默认值:
c
ceph config set mgr target_max_misplaced_ratio .07 # 7%
每均衡一次都会sleep一段时间,可以修改sleep的秒数:
c
ceph config set mgr mgr/balancer/sleep_interval 60
如果要设置自动均衡开始的时间(以 HHMM 格式)(比如:0000 表示午夜 12:00(午夜),1230 表示中午 12:30,1530 表示下午 3:30,2359 表示晚上 11:59。):
c
ceph config set mgr mgr/balancer/begin_time 0000
设置自动均衡结束的时间(以 HHMM 格式):
c
ceph config set mgr mgr/balancer/end_time 2359
自动均衡可以限制在一周的固定几天执行:
设置在某一天之后执行(0表示星期日,1表示星期一,...):
c
ceph config set mgr mgr/balancer/begin_weekday 0
设置自动均衡在某一天之前执行(0表示星期日,1表示星期一,...):
c
ceph config set mgr mgr/balancer/end_weekday 6
默认是对所有存储池都均衡。通过设定存储池id,设置对特定的存储池自动均衡:
c
ceph config set mgr mgr/balancer/pool_ids 1,2,3
如何查看存储池的id:
c
ceph osd pool ls detail
支持的模式:
- crush-compat:
在这种模式下,osd正常的权重应为对应磁盘的容量大小,以反映设备上计划存储的数据目标量。之后,平衡器将优化权重集的值,通过小幅度增加或减少权重,以实现尽可能接近目标分布。(由于 PG 到osd的映射过程是一个伪随机过程。那么osd上的数据分布就不一定是完全均衡的。因此,balancer旨在通过优化权重到数据均衡的目的。) - upmap:
在这种模式下,可以控制单个pg的映射过程,使其映射至指定的osd。但是如果需要使用这种模式,ceph版本必须是L版本或更新版本。
手动执行balancer
分为以下三步:
- 制定计划
- 评估数据分布的质量,(分析当前的 PG 分布,以及执行计划后的 PG 分布)
- 执行计划
评估当前集群或特定存储池或特定计划的数据分布:
c
ceph balancer eval <option>
ceph balancer eval <pool-name>
显示评估细节:
c
ceph balancer eval-verbose {<option>}
根据当前配置,指示balancer生成一个计划,并指定计划名称:
c
ceph balancer optimize <plan>
查看计划内容:
c
ceph balancer show <plan-name>
显示所有计划:
c
ceph balancer ls
删除旧计划:
c
ceph balancer rm <plan-name>
评估执行特定计划后产生的数据分布:
c
ceph balancer eval <plan-name>
如果预计一个计划会改善数据分布(即该计划的得分低于当前集群状态的得分),可以通过运行以下命令来执行该计划:
c
ceph balancer execute <plan-name>