Ceph —— 均衡PG

Ceph —— 均衡PG

日常工作中,我们常常会发现PG不均衡,而集群中只要有一个OSD先达到full的状态,则整个集群都无法写入数据,所以为了尽可能的提高集群存储空间的利用率,我们都希望PG尽可能的均匀分布在OSD上。

出现PG不均衡最常见的背景情况:

  • 刚刚安装部署Ceph集群完毕
  • 集群扩容或是其他情况,进行了加盘的操作,OSD数量发生变化

为了节省日常工作的时间,针对PG均衡问题,写了个python脚本:

version : ceph_luminous (12.2.2)

 1 #!/usr/bin/python
 2
 3 import os
 4
 5
 6 def Ceph_balance():
 7     # Gets the PG number for each OSD
 8     PGS = os.popen(""" ceph osd df | awk ‘{print $10}‘ | egrep -v "^$|PGS" """).readlines()
 9     # Get the max difference of PG number
10     MAX_DIFFERENT_PG = max(map(eval, PGS)) - min(map(eval, PGS))
11     # Get pool list
12     lspools = os.popen(‘ceph osd lspools‘).read().split(‘,‘)[:-1]
13     POOL_LIST = map(lambda x: x[2:], lspools)
14     # To allow use of the feature, you must tell the cluster that it only needs to support luminous (and newer) clients with:
15     os.system(‘ceph osd set-require-min-compat-client luminous‘)
16     if MAX_DIFFERENT_PG >= 1:
17         # Grab the latest copy of your osdmap
18         os.system(‘ceph osd getmap -o /tmp/osd.map‘)
19         for i in POOL_LIST:
20             # Run the optimizer
21             os.system(‘osdmaptool /tmp/osd.map --upmap /tmp/%sout.txt --upmap-pool %s‘ % (i, i))
22         for i in POOL_LIST:
23             # Apply the changes to the cluster
24             os.system(‘source /tmp/%sout.txt‘ % i)
25     # clean up txt file
26     for i in POOL_LIST:
27         os.system(‘rm -f /tmp/%sout.txt‘ % i)
28     os.system(‘rm -f /tmp/osd.map‘)
29     print("Ceph balance has been successful !")
30
31
32 if __name__ == ‘__main__‘:
33     Ceph_balance()

此脚本只适用于luminous及以上的版本

ps:因本人awk比较菜,所以这个脚本获取PGS部分无法达到准确应用。大家可以根据自己的情况酌情修改脚本。适合自己的才是最好的。


有何意见建议,可以留言,欢迎指正。

觉得写的不错,用着还可以的,可以点个推荐关注啥的。

原文地址:https://www.cnblogs.com/shu-sheng/p/12149807.html

时间: 2024-10-10 18:37:20

Ceph —— 均衡PG的相关文章

调整ceph的pg数(pg_num, pgp_num)

https://www.jianshu.com/p/ae96ee24ef6c 调整ceph的pg数 PG全称是placement groups,它是ceph的逻辑存储单元.在数据存储到cesh时,先打散成一系列对象,再结合基于对象名的哈希操作.复制级别.PG数量,产生目标PG号.根据复制级别的不同,每个PG在不同的OSD上进行复制和分发.可以把PG想象成存储了多个对象的逻辑容器,这个容器映射到多个具体的OSD.PG存在的意义是提高ceph存储系统的性能和扩展性. 如果没有PG,就难以管理和跟踪数

ceph修改pg inconsistent

异常情况 1.收到异常情况如下: HEALTH_ERR 37 scrub errors; Possible data damage: 1 pg inconsistent 2.查看详细信息 #ceph health detail HEALTH_ERR 37 scrub errors; Possible data damage: 1 pg inconsistent OSD_SCRUB_ERRORS 37 scrub errors PG_DAMAGED Possible data damage: 1

Ceph中PG和PGP的区别

http://www.zphj1987.com/2016/10/19/Ceph%E4%B8%ADPG%E5%92%8CPGP%E7%9A%84%E5%8C%BA%E5%88%AB/ 一.前言 首先来一段英文关于PG和PGP区别的解释: PG = Placement GroupPGP = Placement Group for Placement purpose pg_num = number of placement groups mapped to an OSD When pg_num is

ceph——创建pg

bool OSD::ms_dispatch(Message *m) |---如果是标记osd down的话,直接返回service.got_stop_ack(), return true |---如果osd已经已经停止服务,则return true |---do_waiters() //list<OpRequestRef> finished 只保存pg创建的请求 |---dispatch_op(next) |---handle_pg_create(op) //处理新的请求的时候,需要等待创建p

Ceph架构及性能优化

对分布式存储系统的优化离不开以下几点: 1. 硬件层面 硬件规划 SSD选择 BIOS设置 2. 软件层面 Linux OS Ceph Configurations PG Number调整 CRUSH Map 其他因素 硬件层面 1.  CPU ceph-osd进程在运行过程中会消耗CPU资源,所以一般会为每一个ceph-osd进程绑定一个CPU核上. ceph-mon进程并不十分消耗CPU资源,所以不必为ceph-mon进程预留过多的CPU资源. ceph-msd也是非常消耗CPU资源的,所以

Ceph之数据分布:CRUSH算法与一致性Hash

转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个因素: 1) 故障域隔离.同份数据的不同副本分布在不同的故障域,降低数据损坏的风险: 2) 负载均衡.数据能够均匀地分布在磁盘容量不等的存储节点,避免部分节点空闲部分节点超载,从而影响系统性能: 3) 控制节点加入离开时引起的数据迁移量.当节点离开时,最优的数据迁移是只有离线节点上的数据被迁移

Ceph性能优化总结(v0.94)

如需转载请标明作者,原文地址:http://xiaoquqi.github.io/blog/2015/06/28/ceph-performance-optimization-summary/ 最近一直在忙着搞Ceph存储的优化和测试,看了各种资料,但是好像没有一篇文章把其中的方法论交代清楚,所以呢想在这里进行一下总结,很多内容并不是我原创,只是做一个总结.如果其中有任何的问题,欢迎各位喷我,以便我提高. 优化方法论 做任何事情还是要有个方法论的,"授人以鱼不如授人以渔"的道理吧,方法通

解析Ceph: 数据的端到端正确性和 Scrub 机制

转自:https://www.ustack.com/blog/ceph-internal-scrub/ Ceph 的主要一大特点是强一致性,这里主要指端到端的一致性.众所周知,传统存储路径上从应用层到内核的文件系统.通用块层.SCSI层到最后的HBA和磁盘控制器,每层都有发生错误的可能性,因此传统的端到端解决方案会以数据块校验为主来解决(这方面的讨论可以参考SCSI中端到端校验能解决数据完整性问题吗).而在 Ceph 方面,更是加入了 Ceph 自己的客户端和网络.存储逻辑.数据迁移,势必导致更

ceph优化的几个问题

Ceph集群问题梳理 创建: linhaifeng,最新修改: 昨天5:35 下午 问题1:  数据传到日志盘,会立刻删除还是延迟删除? 验证:优化参数 #从日志到数据盘最大同步间隔间隔秒数,默认: 5 filestore max sync interval = 15 过程分析:客户端某一object发送给ceph的pg,注意,是写到日志就返回结果,然后在15秒的间隔内, 三个osd节点数据都同步完成才会删除日志盘内数据,同时通知客户端可以删除自己内存中的数据, 如果此时数据丢失,支持客户端根据