手把手演示增加集群PG数量
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧扫码订购吧:
有部分线上集群建设时间比较早,跑了一年多没啥问题,但是最近有扩容需求,客户要求在原来的7台机器的基础上,扩容11台,早期设计的时候没有预留太多PG,每个osd上的PG大概在100上下,扩容这么多机器必然会导致每个osd的PG数量大幅降低,因此有了对生产集群做PG数量调整的需求
调研先行
稳妥起见,我们先调查一下增加PG的操作,再利用非生产环境做测试,最后再到生产环境执行,目标集群版本是Mimic
关于增加PG数,官网查到的说法是
1 | 出自:https://docs.ceph.com/docs/mimic/rados/operations/placement-groups/ |
看来是执行ceph osd pool set {pool-name} pg_num {pg_num}
这个命令,不增加pgp的话,不会发生数据迁移
关于这点,《ceph之rados设计原理与实现》的第一章的1.5小节有介绍,不过没有详细介绍Bluetwj版本的PG分裂原理,这里简单介绍一下,对于已经存在的pool,为了增加它的PG数而不引发大规模数据迁移,实际上是使用了现有PG进行分裂的方式来增加,新增加的PG与原有的PG将保持与原来PG相同的映射规则,这就使得新的PG(孩子)与原来的PG(祖先)存在相同的osd上,规避了数据迁移,而为了保证这个规则的相同,是借助了pgp来记录原来的pg分布情况的
一句话,增加PG数触发PG分裂,分裂后默认新的PG不发生迁移,PG数原地增加
但是,这里会有一个显而易见的问题,如果仅增加了PG而不修改PGP,那么PG将无法再次修改,因为PGP记录的是前一次的PG分布情况,因此,ceph建议在修改了PG后,适时修改PGP为相同的值
注意,根据Release Note,在Nautilus及后续版本中,修改pg数后,PGP数会自动修改为与PG数一致,无需手动修改
操作实验
在非生产环境上操作看看
1 | [twj@test-cluster ~]$ sudo ceph osd pool ls detail |
修改这个pool的pg_num
1 | [twj@test-cluster ~]$ sudo ceph osd pool set test-zone1.rgw.buckets.index pg_num 512 |
修改完后,pg原地创建成功,没有数据迁移,同时集群有提示信息,pg和pgp不一致,接下来,修改pgp
1 | [twj@test-cluster ~]$ sudo ceph osd pool set test-zone1.rgw.buckets.index pgp_num 512 |
可以看到,修改完pgp后,发生了数据迁移,这里修改的是index池的pg数,因此恢复的数据都是key
多说一句
针对14.2.0及后续版本,增加pg后,会自动增加pgp的数量,因此无需手工修改pgp,同时因为会自动修改pgp而引发集群发生数据迁移,因此要注意一下业务的影响
在N版本中,修改pg后,pool的状态变成
1 | -bash-4.2$ sudo ceph osd pool ls detail |
多了一个pgp_num_target
,即pgp数会逐步增加,直到与pg数一直为止
总结
生产环境使用ceph,扩容是绕不开的一个场景,扩容方案,从思路上一般有三条路可以走,第一,扩容现有pool,加入机器/磁盘到现有的pool中,第二,直接增加新的pool,第三,直接增加新的集群,三种思路各有千秋,针对扩容现有pool,增加pg数又是难以避免的问题,本文希望可以给大家一个参考
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2020/10/30/生产集群增加PG数/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!