Расширение Ceph кластера

Расширение Ceph кластера

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Расширяем Ceph кластер добавляя новые ресурсы в существующую инфраструктуру.

В этой статье мы добавим дополнительные OSD, а также мониторы для установки кворума Ceph мониторов.

Добавляем OSD

Подготовим и создадим OSD на новом сервере.

Затираем данные на дисках:

1
ceph-deploy disk zap {osd-server-name}:{disk-name}

Например:

1
ceph-deploy disk zap ceph-node-02:sdb ceph-node-02:sdc

Выполняем подготовку OSD (файловая система XFS):

1
ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]

Например:

1
ceph-deploy osd prepare ceph-node-02:sdb ceph-node-02:sdc

Активируем OSD

После успешной подготовки дисков активируем OSD. (Обратите внимание, что необходимо указать разделы диска.)

1
ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]

Например:

1
ceph-deploy osd activate ceph-node-02:sdb1:/dev/sdb2 ceph-node-02:sdc1:/dev/sdc2

После того как мы добавили новую OSD, кластер начнет ребалансировку путем миграции плейсмент групп на новую OSD. Этот процесс можно наблюдать следующей командой:

1
ceph -w

Если появилось предупреждение о нехватке плейсмент групп на OSD

1
2
health HEALTH_WARN
too few PGs per OSD (21 < min 30)

При добавлении новых OSD необходимо пересчитать PG и перенастроить пулы.
Всего у нас 6*100/2=300. Округляя вниз до степени 2, примем общее PG = 256.

Помня, что PG выставляется как степень 2, увеличим наш пул до 256.

1
2
ceph osd pool set POOL_NAME pg_num 256
ceph osd pool set POOL_NAME pgp_num 256

Проверяем состояние:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[ceph@ceph-node-admin ceph-admin]$ ceph -w
cluster ca89dd68-e6d7-4f62-b947-62abcc111ac0
health HEALTH_OK
monmap e1: 1 mons at {ceph-node-mon=192.168.2.68:6789/0}
election epoch 2, quorum 0 ceph-node-mon
osdmap e38: 7 osds: 6 up, 6 in
flags sortbitwise
pgmap v97: 256 pgs, 1 pools, 0 bytes data, 0 objects
208 MB used, 91885 MB / 92093 MB avail
256 active+clean

2016-02-29 15:15:02.835201 mon.0 [INF] pgmap v96: 256 pgs: 256 active+clean; 0 bytes data, 207 MB used, 91886 MB / 92093 MB avail
2016-02-29 15:15:03.846511 mon.0 [INF] pgmap v97: 256 pgs: 256 active+clean; 0 bytes data, 208 MB used, 91885 MB / 92093 MB avail
2016-02-29 15:15:04.858080 mon.0 [INF] pgmap v98: 256 pgs: 256 active+clean; 0 bytes data, 210 MB used, 91883 MB / 92093 MB avail
2016-02-29 15:17:02.838908 mon.0 [INF] pgmap v99: 256 pgs: 256 active+clean; 0 bytes data, 210 MB used, 91883 MB / 92093 MB avail
2016-02-29 15:17:03.846191 mon.0 [INF] pgmap v100: 256 pgs: 256 active+clean; 0 bytes data, 210 MB used, 91883 MB / 92093 MB avail
2016-02-29 15:17:04.851844 mon.0 [INF] pgmap v101: 256 pgs: 256 active+clean; 0 bytes data, 210 MB used, 91883 MB / 92093 MB avail

Добавляем дополнительный Ceph Monitor

Для обеспечения высокой доступности Ceph Storage Cluster работает с несколькими мониторами, на случай выхода из строя одного из мониторов.
Для этого используется алгоритм Paxos, который требует наличие большинства мониторов для формирования кворума, в соотношении 1, 2:3, 3:4, 3:5, 4:6, и так далее.

Добавим дополнительный монитор к нашему кластеру.

1
ceph-deploy mon add {ceph-node}

Например:

1
ceph-deploy mon add ceph-node-01 ceph-node-02

После того, как мы добавили новые Ceph мониторы, Ceph начнет синхронизацию мониторов и сформирует кворум. Проверить состояние кворума можно командой:

1
ceph quorum_status --format json-pretty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[ceph@ceph-node-admin ceph-admin]$ ceph quorum_status --format json-pretty

{
"election_epoch": 12,
"quorum": [
0,
1,
2
],
"quorum_names": [
"ceph-node-mon",
"ceph-node-01",
"ceph-node-02"
],
"quorum_leader_name": "ceph-node-mon",
"monmap": {
"epoch": 3,
"fsid": "ca89dd68-e6d7-4f62-b947-62abcc111ac0",
"modified": "2016-03-16 12:54:53.061980",
"created": "0.000000",
"mons": [
{
"rank": 0,
"name": "ceph-node-mon",
"addr": "192.168.2.68:6789\/0"
},
{
"rank": 1,
"name": "ceph-node-01",
"addr": "192.168.2.70:6789\/0"
},
{
"rank": 2,
"name": "ceph-node-02",
"addr": "192.168.2.71:6789\/0"
}
]
}
}

Проверяем статус:

1
2
clock skew detected on mon.ceph-node-01,ceph-node-02
Monitor clock skew detected
1
2
mon.ceph-node-01 addr 192.168.2.70:6789/0 clock skew 502482s > max 0.15s (latency 0.716532s)
mon.ceph-node-02 addr 192.168.2.71:6789/0 clock skew 502482s > max 0.15s (latency 0.716532s)

При получении данной ошибки проверяем работу NTP на серверах.

Обязательно подправим конфиг ceph.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[global]
mon initial members = ceph-node-mon,ceph-node-01,ceph-node-02
mon host = ceph-node-mon,ceph-node-01,ceph-node-02
mon addr = 192.168.2.68:6789,192.168.2.70:6789,192.168.2.71:6789

[mon.a]
host = ceph-node-mon
mon addr = 192.168.2.68:6789

[mon.b]
host = ceph-node-01
mon addr = 192.168.2.70:6789

[mon.c]
host = ceph-node-02
mon addr = 192.168.2.71:6789