PG, Pool之间的一些数量关系
先说一下我的环境:
Ceph cluster中包含6台OSD节点 (osd.0 - 5), 一共有10个Pool (0 - 9), 这些Pool共享了144个PG (这个数字是所有Pool的PG_SIZE相加, 并不是通过ceph osd pool create POOLNAME PG_SIZE指定的!), 文件拷贝数量等于2 (osd_pool_default_size = 2)
查看一下每个osd节点下的/var/local/osd/current目录, 这里面的文件夹就是用来存放对象的, 每个文件夹的格式类似2.3d这样, 小数点的左边表示pool的序号, 右边表示pg的编号. 我统计了一下文件夹数量(注意: TEMP结尾和head结尾的文件夹有区别, TEMP不应该被统计在内, 原因不知)得到了如下结论:
1. ceph -s 中显示的PG数等于ceph osd pool create POOLNAME PG_SIZE中所有POOL的PG_SIZE之和;
2. 假设对于Pool 2来说, 所有OSD节点的current目录下的2.XX_head文件夹数量之和除以拷贝份数 (即osd_pool_default_size), 等于PG_SIZE;
3. PG_SIZE在一开始指定后就不会改变, 除非手动通过ceph osd pool set POOLNAME size PG_SIZE进行修改.
pool 0 | pool 1 | pool 2 | pool 3 | pool 4 | pool 5 | pool 6 | pool 7 | pool 8 | pool 9 | total b=288 | |
osd 0 | 15 | 0 | 3 | 2 | 2 | 1 | 2 | 2 | 4 | 3 | 34 |
osd 1 | 23 | 2 | 3 | 3 | 2 | 4 | 3 | 5 | 2 | 2 | 49 |
osd 2 | 19 | 5 | 2 | 0 | 1 | 4 | 3 | 4 | 2 | 3 | 43 |
osd 3 | 25 | 3 | 2 | 6 | 4 | 4 | 4 | 4 | 4 | 4 | 60 |
osd 4 | 21 | 6 | 2 | 3 | 2 | 0 | 3 | 3 | 3 | 3 | 46 |
osd 5 | 25 | 0 | 4 | 2 | 5 | 3 | 5 | 2 | 5 | 5 | 56 |
total a=288 | 128 | 16 | 16 | 16 | 16 | 16 | 20 | 20 | 20 | 20 | |
备注 | 此处的单个对象拷贝份数都是2, 所以128/2=64才是pool 0的PG_SIZE | ||||||||||
pool 0 | pool 1 | pool 2 | pool 3 | pool 4 | pool 5 | pool 6 (replicated=3) |
pool 7 | pool 8 | pool 9 | total d=298 | |
osd 0 | 15 | 0 | 3 | 2 | 2 | 1 | 7 | 2 | 4 | 3 | 39 |
osd 1 | 23 | 2 | 3 | 3 | 2 | 4 | 4 | 5 | 2 | 2 | 50 |
osd 2 | 19 | 5 | 2 | 0 | 1 | 4 | 4 | 4 | 2 | 3 | 44 |
osd 3 | 25 | 3 | 2 | 6 | 4 | 4 | 3 | 4 | 4 | 4 | 59 |
osd 4 | 21 | 6 | 2 | 3 | 2 | 0 | 4 | 3 | 3 | 3 | 47 |
osd 5 | 25 | 0 | 4 | 2 | 5 | 3 | 8 | 2 | 5 | 5 | 59 |
total c=298 | 128 | 16 | 16 | 16 | 16 | 16 | 30 | 20 | 20 | 20 | |
备注 | 此处Pool 6的拷贝份数为3, 其余均为2; 所以30/3=10才是pool 6的PG_SIZE |
附上根据自己的理解画出的示意图: