web-dev-qa-db-ja.com

Ceph:OSDあたりのPGが多すぎます

推奨値を使用して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

ceph statusを実行すると、次のようになります。

 health HEALTH_WARN
        too many PGs per OSD (1042 > max 300)

これは2つの理由で混乱します。まず、推奨される式がCephを満たさなかったためです。次に、最も不可解なのは、構成で150と表示されているのに、OSDあたり1042のPGがあると表示されていることです。

私は何が間違っているのですか?

10

PGカウントを設定する前に、3つのことを知っておく必要があります。

1。OSDの数

ceph osd ls

Sample Output:
 0
 1
 2

 Here Total number of osd is three.

2。プールの数

ceph osd pool lsまたはrados lspools

Sample Output:
  rbd
  images
  vms
  volumes
  backups

Here Total number of pool is five.

。レプリケーション数

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.

では、計算を始めましょう

計算:

総PG計算:

Total PGs = (Total_number_of_OSD * 100) / max_replication_count

This result must be rounded up to the nearest power of 2.

例:

OSDの数:3
レプリケーション数:2

合計PG =(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.

例:

OSDの数:3
レプリケーション数:2
プールの数:5

合計PG =((3 * 100)/ 2)/ 5 = 150/5 = 30。 30から2の最も近いパワーは32です。

したがって、プールあたりのPGの総数は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

便利なコマンド

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
10
rajagopalx

12.2.4発光で修正した方法:

OSDあたりのPGが多すぎる(380>最大200)と、多くのブロッキング要求が発生する可能性があります。

最初に設定する必要があります:

[global]

mon_max_pg_per_osd = 800  # < depends on you amount of PGs
osd max pg per osd hard ratio = 10 # < default is 2, try to set at least 5. It will be
mon allow pool delete = true # without it you can't remove a pool 

次に、すべてのMONとOSDを1つずつ再起動します。

値を確認してください:

ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok config get  mon_max_pg_per_osd
ceph --admin-daemon /var/run/ceph/ceph-osd.3.asok config get osd_max_pg_per_osd_hard_ratio

今ここを見てください:

rados lspools
ceph osd pool get .users.email pg_num

私の場合、デフォルトではpg_numは128かそのようなものでした(私のクラスターは4歳で、多くのアップグレードと多くの変更がありました)。あなたはそれをそのように減らすことができます。

注意してください:

ceph osd pool create .users.email.new 8
rados cppool .users.email default.rgw.lc.new
ceph osd pool delete .users.email .users.email --yes-i-really-really-mean-it
ceph osd pool rename .users.email.new .users.email
ceph osd pool application enable .users.email rgw

それでも不十分な場合は、カットできる別のプールを探してみてください。

0
Mike Serchenya