PG
- PG是ceph对象到OSD的中间桥梁,实现大容量集群的关键效率技术
PG分裂
- ceph最大的特点是能实现OSD负载均衡,如果新增OSD就会导致之前的PG映射就要被负载一部分到新的PG上(前提是新增了PG数量)
PGP
- PGP其实是PG的复制,原因在于PG分裂会导致之前的PG映射OSD关系变化,导致新增OSD后导致大量数据迁移,而复制PG给PGP在后续分裂中尽量让之前的PG还是对应之前的OSD上,避免数据的迁移
为什么需要合理规划PG数量,OSD增加一般也需要增加PG数量
- 数据表明磁盘的使用率在70%左右是I/O平发和响应延时最佳状态
- PG数是决定了OSD的并发处理对象的能力
- PG需要占用大量的CPU和内存资源
为了使磁盘发挥最大的效能,就需要对PG数进行合理计算
- 集群PG数:代表的是整个PG数量(只是记录作用)
- 存储池PG数:基于集群PG数分配 (创建存储池指定)
- PG数是2的次方整数
计算PG公式(二种方案),以下纯属自己的理解
方案一,基于平均存储池
- 集群PG=(OSD*100)/最大副本数 (所有存储池加起来不要超过)
- 存储池PG=(PG=(OSD*100)/最大副本数)/存储池数
- 100是整数倍数,代表的是未来OSD可能增加的倍数,比如未来可能增加一倍就是200
这个方案提供的是平均存储池的方案,也就是存储池没有大小固定限制,那么如果需求是存储池是安装大小分配的,合理的PG就需要根据容量的百分比进行计算
方案二,基于不平均存储池
官网提供计算器:https://old.ceph.com/pgcalc/
操作
ceph -s | grep pg
#查看集群的PG总数
ceph --show-config | grep pg
#mon_max_pg_per_osd = 250 查看默认最大的PG数
#超过系统会提示不给创建存储池,可以在ceph.conf中配置
14.2.18无法通过–show-config 查看,ceph-mon --show-config | grep pg
ceph osd pool get volumes pg_num
#查看存储池volumes的PG数
ceph osd pool get volumes pgp_num
#查看存储池volumes的PGP数
ceph osd dump |grep pool | awk '{print $1,$3,$4,$5":"$6,$13":"$14}'
#查看所有存储池的副本数和PG数
#128+64+8+8+8+8+8+8+8=248