Ceph:每个OSD太多的PG

Tur*_*bit 8 ceph

我使用推荐值配置了Ceph(使用文档中的公式).我有3个OSD,我的配置(我放在监控节点和所有3个OSD)包括:

osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 150
osd pool default pgp num = 150
Run Code Online (Sandbox Code Playgroud)

当我跑步时,ceph status我得到:

 health HEALTH_WARN
        too many PGs per OSD (1042 > max 300)
Run Code Online (Sandbox Code Playgroud)

由于两个原因,这令人困惑.首先,因为推荐的配方不满足Ceph.其次,最令人费解的是,当我的配置为150时,它表示每个OSD有1042个PG.

我究竟做错了什么?

raj*_*alx 10

在设置PG计数之前,您需要了解3件事.

1. OSD数量

ceph osd ls

Sample Output:
 0
 1
 2

 Here Total number of osd is three.
Run Code Online (Sandbox Code Playgroud)

2.池数

ceph osd pool ls 要么 rados lspools

Sample Output:
  rbd
  images
  vms
  volumes
  backups

Here Total number of pool is five.
Run Code Online (Sandbox Code Playgroud)

3.复制计数

ceph osd dump | grep repli

Sample Output:
 pool 0 'rbd' replicated size 2 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 38 flags hashpspool stripe_width 0
 pool 1 'images' replicated size 2 min_size 2 crush_ruleset 1 object_hash rjenkins pg_num 30 pgp_num 30 last_change 40 flags hashpspool stripe_width 0
 pool 2 'vms' replicated size 2 min_size 2 crush_ruleset 1 object_hash rjenkins pg_num 30 pgp_num 30 last_change 42 flags hashpspool stripe_width 0
 pool 3 'volumes' replicated size 2 min_size 2 crush_ruleset 1 object_hash rjenkins pg_num 30 pgp_num 30 last_change 36 flags hashpspool stripe_width 0
 pool 4 'backups' replicated size 2 min_size 2 crush_ruleset 1 object_hash rjenkins pg_num 30 pgp_num 30 last_change 44 flags hashpspool stripe_width 0

You can see each pool has replication count two.
Run Code Online (Sandbox Code Playgroud)

现在让我们进入计算

计算:

总PGs计算:

Total PGs = (Total_number_of_OSD * 100) / max_replication_count

This result must be rounded up to the nearest power of 2.
Run Code Online (Sandbox Code Playgroud)

例:

OSD否:3
复制计数:2

总PGs =(3*100)/ 2 = 150.最近的150到2的功率是256.

所以最大推荐PG为256

您可以为每个池设置PG

每个池的总PG数计算:

Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool count

This result must be rounded up to the nearest power of 2.
Run Code Online (Sandbox Code Playgroud)

例:

OSD否:3
复制计数:2
池数:5

总PGs =((3*100)/ 2)/ 5 = 150/5 = 30.最近的30到2的力是32.

所以每个游泳池的总数是32.

功率2表:

2^0     1
2^1     2
2^2     4
2^3     8
2^4     16
2^5     32
2^6     64
2^7     128
2^8     256
2^9     512
2^10    1024
Run Code Online (Sandbox Code Playgroud)

有用的命令

ceph osd pool create <pool-name> <pg-number> <pgp-number> - To create a new pool

ceph osd pool get <pool-name> <pg_num> - To get number of PG in a pool

ceph osd pool get <pool-name> <pgp_num> - To get number of PGP in a pool

ceph osd pool set <pool-name> <pg_num number> - To increase number of PG in a pool

ceph osd pool set <pool-name> <pgp_num number> - To increase number of PGP in a poo

*usually pg and pgp number is same
Run Code Online (Sandbox Code Playgroud)