Содержание

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

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

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

Добавляем OSD

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

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

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

Например:

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

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

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

Например:

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

Активируем OSD

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

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

Например:

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

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

ceph -w

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

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

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

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

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

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

[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, и так далее.

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

ceph-deploy mon add {ceph-node}

Например:

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

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

ceph quorum_status --format json-pretty
[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"
            }
        ]
    }
}

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

clock skew detected on mon.ceph-node-01,ceph-node-02
   Monitor clock skew detected
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:

[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