Ceph 存储池
如果PG 太多,对象太少,会造成大量的空间浪费;
如果PG 太少,对象太多,寻找对象的时间过长,影响性能。
ceph osd pool create --help
usage 那一行显示的是存储池内所有pg 的容量之和。
这里提出一个问题:pg_num 是32 个,那么osd 上有多少个pg?
这是一个replicated(副本)池,size 是3,表示是3 副本,那么osd 上有32*3=96 个pg;
理论上osd 上的pg_num 不能超过250 个,所以如果你再新建几个存储池,很快就会触发限制,以致于存储池无法创建;
所以在生产环境上,如果一个ceph 集群的osd 数量不是很多,只有十几块、几十块磁盘,那么存储池通常只有几个,如果存储池的数量特别多,说明这个ceph 集群的规模特别大;
所以,ceph -s 命令查看到的65 个pg 是相对于集群而言的pg 数量,对于osd,还要看单个存储池的pg_num 乘以它的副本数。
ceph pg dump pgs_brief
pool 的id 是3,查看以3 开头的pg:
ceph pg dump pgs_brief | grep '^3'
32 行,每一行都是一个pg,所以pool 3 有32 个pg;
那么这个32 个pg,怎么查看每一个pg 的主osd 和从osd 呢?
以3.2 这个pg 为例:第一列是pg 的编号,第二列是pg 的状态,现在是干净可用的,第三列表示3.2 这个pg 归属到[1,9,5] 这三个osd 上,第一个1 就是主osd,后面的9 和5 是从osd,第四列显示的就是主osd 的编号,第五列显示的是可用的osd,第六列显示的是可用的主osd
再回头看这一段:pg_num 是32,pgp_num 也是32,表示在pool 3 上,在单个副本32 个pg 上做了32 种排列组合;
如果pgp_num 数量较少,会导致有部分osd 不会承担主osd 的角色,负载不
均衡。
rados --help
这里列出来passwd 是对象名,不要把它看成是一个文件名。
因为passwd 文件不足默认切片大小4M,这里看到的USED 值应是按照4k 的大小来切片的,否则浪费的存储空间就太多了,副本数是3,存储3份,就是4k * 3=12k
Ceph 的底层其实就是一个rados,生产环境上当然不会用rados 命令来进行存储,这仅仅只是为了测试或实验。
如果你想要定位一个对象存储到了哪一个节点的哪一个磁盘上,就像上面这样操作,但是不能挂载起来进去查看文件,因为ceph 现在使用的是bluestore 驱动直接使用裸磁盘。
现在ceph 集群会自动调整pg 数量,这个公式只需要了解就行了。
ceph osd erasure-code-profile --help