Ceph: слишком много PG на OSD

Я настроил 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)

Это сбивает с толку по двум причинам. Во-первых, потому что рекомендованная формула не удовлетворяла Ceph. Во-вторых, что вызывает наибольшее недоумение, в нем говорится, что у меня 1042 PG на OSD, тогда как в моей конфигурации указано 150.

Что я делаю неправильно?


person Turtle V. Rabbit    schedule 23.11.2016    source источник
comment
Сколько у вас бассейнов?   -  person Noah Watkins    schedule 23.11.2016
comment
@NoahWatkins - Это все в новинку для меня, надеюсь, это то, о чем вы просите. ceph osd lspools возвращает: 0 rbd,1 .rgw.root,2 default.rgw.control,3 default.rgw.data.root,4 default.rgw.gc,5 default.rgw.log,6 default.rgw.users.uid,7 default.rgw.users.keys,8 default.rgw.meta,9 default.rgw.users.swift,10 default.rgw.buckets.index,11 default.rgw.buckets.data, - так 12 пулов?   -  person Turtle V. Rabbit    schedule 23.11.2016
comment
у каждого пула есть набор групп размещения. поэтому, если в каждом пуле 100 PG, то в кластере с 12 пулами будет 1200 PG. Это может быть полезно: ceph.com/pgcalc   -  person Noah Watkins    schedule 23.11.2016


Ответы (2)


Перед установкой количества PG вам необходимо знать 3 вещи.

1. Количество экранных меню

ceph osd ls

Sample Output:
 0
 1
 2
 
 Here Total number of osd is three.

2. Количество пулов

ceph osd pool ls or rados lspools

Sample Output:
  rbd
  images
  vms
  volumes
  backups
     
Here Total number of pool is five.

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.

Теперь перейдем к расчету

Расчеты:

Расчет общего количества 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 pool

*usually pg and pgp number is same
person rajagopalx    schedule 01.01.2017

Как я это исправил в 12.2.4 luminous:

Слишком много PG на OSD (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 один за другим.

Проверить значение:

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

Если этого было недостаточно, попробуйте найти другой бассейн, который вы сможете разрезать.

person Mike Serchenya    schedule 03.04.2018