VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Работа с CEPH

Общие сведения

Управление кластером CEPH в Платформе осуществляется при помощи открытого инструмента ceph-ansible. ceph-ansible — это набор плейбуков ansible (ansible playbooks) и docker-образов для управления кластерами CEPH, подробную информацию см. в официальной документации.

Основные группы для CEPH кластера, которые требуются для развёртывания Платформы:

  • MONs — серверы-мониторы; отслеживают состояние кластера. Минимальное количество серверов: 3.
  • OSDs — серверы хранения данных (Object Storage Device). Минимальное количество серверов для обеспечения отказоустойчивости: 3.
  • MGRs — группа демонов менеджеров (Manager Daemon); собирают метрики и осуществляют мониторинг.
  • MDSs — группа серверов метаданных (Metadata Server Daemon); отвечают за работоспособность файловой системы CephFS.

Также в рамках CEPH используются следующие компоненты:

  • CephFS — распределенная POSIX-совместимая файловая система. CephFS используется для загрузки образов Glance и примонтирован на всех управляющих узлах.
  • RBD — блочное устройство с поддержкой технологии Thin provisioning и снэпшотов. Все диски виртуальных машин хранятся в качестве устройств RADOS Block Device (RBD).

Операции с узлами

Узел — физический сервер, на каждом из которых может быть развёрнуто несколько сервисов CEPH.

Пример сервисов CEPH для узла OSD
--cluster ceph --setuser ceph --setgroup ceph --default-log-to-stderr=true --err-to-stderr=true --default-log-to-file=false --foreground -i 9--cluster ceph --setuser ceph --setgroup ceph --default-log-to-stderr=true --err-to-stderr=true --default-log-to-file=false --foreground -i 0--cluster ceph --setuser ceph --setgroup ceph --default-log-to-stderr=true --err-to-stderr=true --default-log-to-file=false --foreground -i 6--cluster ceph --setuser ceph --setgroup ceph --default-log-to-stderr=true --err-to-stderr=true --default-log-to-file=false --foreground -i 3

В примере выше работают ноды с OSD под номерами 0, 3, 6, 9. Каждый сервис функционирует в отдельном docker-контейнере.

Просмотр всех имеющихся пулов в кластере

Для просмотра всех имеющихся пулов в кластере выполните следующую команду:

ceph osd pool ls
Пример вывода команды
device_health_metricsglance-imagescinder-volumesvmsmanila-volumescephfs_datacephfs_metadata

Применение конфигурации (запуск ansible playbook)

Изменение параметров компонента CEPH выполняется путем редактирования конфигурации group_vars.yml в ceph-ansible/group_vars/ и последующим запуском плейбука (ansible playbook):

ansible-playbook \    --diff \    -i ${STAND_NAME}.yml \    ./${playbook_name}.yml

, где:

  • ${STAND_NAME} — наименование окружения.
  • ${playbook_name} — наименование файла плейбука CEPH.

OSD-узел

Вывод структуры OSD-узла

Для вывода структуры OSD-узла выполните следующую команду на этом узле:

Команда вывода структуры OSD-узла
ceph osd tree
Пример вывода команды
ID  CLASS  WEIGHT   TYPE NAME          STATUS  REWEIGHT  PRI-AFF-1         0.39990  root default-3         0.19995      host storage1 0    hdd  0.04999          osd.0          up   1.00000  1.00000 2    hdd  0.04999          osd.2          up   1.00000  1.00000 4    hdd  0.04999          osd.4          up   1.00000  1.00000 6    hdd  0.04999          osd.6          up   1.00000  1.00000-5         0.19995      host storage2 1    hdd  0.04999          osd.1          up   1.00000  1.00000 3    hdd  0.04999          osd.3          up   1.00000  1.00000 5    hdd  0.04999          osd.5          up   1.00000  1.00000 7    hdd  0.04999          osd.7          up   1.00000  1.00000

Добавление нового OSD-узла

Для добавления нового OSD-узла:

  1. Добавьте новый сервер под OSD в inventory файл, в группу osds:

    Пример фрагмента inventory файла для кластера
    [osds]storage1storage2storage3
  2. Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).

  3. Проверьте статус CEPH кластера, выполнив команду:

    ceph health

    Дождитесь, когда кластер перейдет в статус HEALTH_OK.

  4. Убедитесь, что узел появился, выполнив команду вывода структуры OSD (см. раздел Вывод структуры OSD-узла).

  5. При необходимости выведите разницу между структурами узлов, выполнив команду:

    ceph osd df
    Пример вывода команды ceph osd df
    ID  CLASS  WEIGHT   REWEIGHT  SIZE     RAW USE  DATA     OMAP     META      AVAIL    %USE   VAR   PGS  STATUS 1    hdd  0.04999   1.00000   25 GiB  4.8 GiB  3.8 GiB  188 KiB  1024 MiB   20 GiB  19.35  1.11   41      up 2    hdd  0.04999   1.00000   25 GiB  3.5 GiB  2.5 GiB   92 KiB  1024 MiB   21 GiB  14.01  0.81   28      up 4    hdd  0.04999   1.00000   25 GiB  4.1 GiB  3.1 GiB  126 KiB  1024 MiB   21 GiB  16.54  0.95   40      up 6    hdd  0.04999   1.00000   25 GiB  4.7 GiB  3.7 GiB  144 KiB  1024 MiB   20 GiB  18.88  1.09   37      up 0    hdd  0.04999   1.00000   25 GiB  3.8 GiB  2.8 GiB  134 KiB  1024 MiB   21 GiB  15.27  0.88   29      up 3    hdd  0.04999   1.00000   25 GiB  4.5 GiB  3.5 GiB      0 B     1 GiB   21 GiB  17.88  1.03   43      up 5    hdd  0.04999   1.00000   25 GiB  4.1 GiB  3.1 GiB      0 B     1 GiB   21 GiB  16.51  0.95   35      up 7    hdd  0.04999   1.00000   25 GiB  5.1 GiB  4.1 GiB  185 KiB  1024 MiB   20 GiB  20.44  1.18   36      up                       TOTAL  200 GiB   35 GiB   27 GiB  872 KiB   8.0 GiB  165 GiB  17.36MIN/MAX VAR: 0.81/1.18  STDDEV: 2.03

Вывод OSD-узла из эксплуатации

Для вывода OSD-узла из эксплуатации:

  1. Выключите сервисы, функционирующие на ноде OSD, выполнив команду:

    systemctl disable --now <НАИМЕНОВАНИЕ_СЕРВИСА_OSD>
    Пример вывода команды ceph osd df
    systemctl disable --now ceph-osd@0.servicesystemctl disable --now ceph-osd@2.servicesystemctl disable --now ceph-osd@4.servicesystemctl disable --now ceph-osd@6.service
  2. Удалите OSD из Crush maps, выполнив команду:

    ceph osd crush remove <НАИМЕНОВАНИЕ_СЕРВИСА_OSD>
    Пример удаления сервисов OSD из Crush maps
    ceph osd crush remove osd.0ceph osd crush remove osd.2ceph osd crush remove osd.4ceph osd crush remove osd.6
  3. Удалите сервисы OSD, выполнив команду:

    ceph osd rm <НАИМЕНОВАНИЕ_СЕРВИСА_OSD>
    Пример удаления сервисов OSD
    ceph osd rm osd.0ceph osd rm osd.2ceph osd rm osd.4ceph osd rm osd.6

Удаление OSD-узла

Чтобы удалить OSD-узел:

  1. Выведите OSD-узел из эксплуатации (см. раздел Вывод OSD-узла из эксплуатации).

  2. Найдите наименование узла, который необходимо удалить, в inventory файле.

  3. Удалите узел, выполнив команду:

    ceph osd crush remove <НАИМЕНОВАНИЕ_УЗЛА>
  4. Проверьте статус CEPH кластера, выполнив команду:

    ceph health

    Дождитесь, когда кластер перейдет в статус HEALTH_OK.

MON-узел

Добавление нового MON-узла

Для добавления нового MON-узла:

  1. Добавьте новый сервер под OSD в inventory файл, в группу mons:

    Пример фрагмента inventory файла для кластера
    [mons]storage1storage2storage3
  2. Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).

  3. Проверьте статус создания MON-узла, выполнив команды:

    ceph mon statceph -s
    Пример работы команд
    $>ceph mon state1: 3 mons at {storage1=[v2:10.12.0.19:3300/0,v1:10.12.0.19:6789/0],storage2=[v2:10.12.0.20:3300/0,v1:10.12.0.20:6789/0],storage3=[v2:10.12.0.21:3300/0,v1:10.12.0.21:6789/0]}, election epoch 8, leader 0 storage1, quorum 0,1,2 storage1$>ceph -s  cluster:    id:     5456e034-c7a6-4a7d-af66-1e95be8e50b1    health: HEALTH_OK  services:    mon: 3 daemons, quorum storage1,storage2,storage3 (age 4h)    mgr: storage3(active, since 5h), standbys: storage2    mds: cephfs:1 {0=storage3=up:active} 1 up:standby    osd: 8 osds: 8 up (since 4h), 8 in (since 13h)  data:    pools:   7 pools, 289 pgs    objects: 3.44k objects, 26 GiB    usage:   35 GiB used, 165 GiB / 200 GiB avail    pgs:     289 active+clean

Вывод MON-узла из эксплуатации

Чтобы вывести MON-узел из эксплуатации:

  1. Перейдите на storage сервер, откуда требуется вывести узел, по SSH.

  2. Выключите службу, отвечающую за работу mon-сервиса, выполнив команду:

    systemctl disable --now ceph-mon.target
  3. Удалите MON-узел из storage сервера, выполнив команду:

    ceph mon remove <НАИМЕНОВАНИЕ_STORAGE_СЕРВЕРА>
  4. Проверьте статус MON-узлов, выполнив команду:

    ceph mon stat
    Пример вывода команды ceph mon stat
    e2: 2 mons at {storage1=[v2:10.12.0.19:3300/0,v1:10.12.0.19:6789/0],storage3=[v2:10.12.0.21:3300/0,v1:10.12.0.21:6789/0]}, election epoch 20, leader 0 storage1, quorum 0,1 storage1,storage3
  5. Найдите файл ceph.conf на всех узлах и удалите оттуда IP storage сервера, для которого выводился MON-узел, из секции mon host.

  6. Удалите storage сервер, для которого выводился MON-узел, из группы mons в inventory файле компонента ceph-ansible.

MDS-узел

Добавление нового MDS-узла

Для добавления нового MDS-узла:

  1. Добавьте новый сервер под MDS в inventory файл, в группу mdss:

    Пример фрагмента inventory файла для кластера
    [mdss]storage1storage3
  2. Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).

  3. Проверьте статус создания MDS-узла, выполнив команду:

    ceph mds stat
    Пример работы команды ceph mds stat
    cephfs:1 {0=storage3=up:active} 1 up:standby

Вывод MDS-узла из эксплуатации

Чтобы вывести MDS-узел из эксплуатации:

  1. Перейдите на storage сервер, откуда требуется вывести узел, по SSH.

  2. Выключите службу, отвечающую за работу mds-сервиса, выполнив команду:

    systemctl disable --now ceph-mds.target
  3. Удалите storage сервер, для которого выводился MON-узел, из группы mdss в inventory файле компонента ceph-ansible.

MGR-узел

Добавление нового MGR-узла

Для добавления нового MGR-узла:

  1. Добавьте новый сервер под MGR в inventory файл, в группу mgrs:

    Пример фрагмента inventory файла для кластера
    [mgrs]storage2storage3
  2. Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).

  3. Проверьте статус создания MGR-узла, выполнив команду:

    ceph -s

Вывод MGR-узла из эксплуатации

Чтобы вывести MGR-узел из эксплуатации:

  1. Перейдите на storage сервер, откуда требуется вывести узел, по SSH.

  2. Выключите службу, отвечающую за работу mgr-сервиса, выполнив команду:

    systemctl disable --now ceph-mgr.target
  3. Удалите storage сервер, для которого выводился MGR-узел, из группы mgrs в inventory файле компонента ceph-ansible.

Пулы RBD

Просмотр содержимого RBD-пула

Для просмотра содержимого RBD-пула выполните следующую команду:

rbd ls ${PoolName}

, где ${PoolName} — переменная с именем пула.

Пример вывода команды
$>rbd ls glance-images1c72bd62-901b-4eef-926c-00250c00007c5887f985-bc7a-4aae-9951-2db13fe5523f58d06e85-43e2-4dd3-ac42-f5d7762189216b006060-515e-48b0-bd16-d9c476c49c3c8cc653e9-2cd1-4ed9-9759-f65061338a0cbe2da014-613e-42d9-ba6a-9232fde79b7deb93cf6b-f55e-4f92-9311-1f2fd7cd47beed774e49-e1d9-4345-a834-076b2e1c8fdaf3bfa55d-5068-4175-9aa1-5d0d3d7ad4bd

Чтобы посмотреть общую статистику пула, выполните следующую команду:

rbd pool stats ${PoolName}

, где ${PoolName} — переменная с именем пула.

Пример вывода команды
Total Images: 9Total Snapshots: 9Provisioned Size: 26 GiB

Добавление RBD-пула

Для добавления RBD-пула:

  1. В файле ceph-ansible/group_vars/all.yml добавьте информацию по новому пулу в секцию openstack_pools.

  2. Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).

  3. Проверьте статус создания RBD-пула, выполнив команду:

    rbd pool stats ${PoolName}

Удаление RBD-пула

Для удаления RBD-пула:

  1. В файле ceph-ansible/group_vars/all.yml удалите информацию по пулу из секции openstack_pools.

  2. Удалите пул из CEPH кластера, выполнив команду:

    ceph rbd pool delete <НАИМЕНОВАНИЕ_ПУЛА> [<НАИМЕНОВАНИЕ_ПУЛА_ПОВТОРНО> --yes-i-really-really-mean-it]

Диск RBD

Просмотр информации по RBD-диску

Чтобы просмотреть информацию по RBD-диску, выполните следующую команду:

rbd info ${PoolName}/${ImageName}

, где:

  • ${PoolName} — переменная с именем пула.
  • ${ImageName} — переменная с именем диска.
Пример выполнения команды
$>rbd info glance-images/1c72bd62-901b-4eef-926c-00250c00007crbd image '1c72bd62-901b-4eef-926c-00250c00007c':  size 3 GiB in 384 objects  order 23 (8 MiB objects)  snapshot_count: 1  id: 1a7120e9b6ed  block_name_prefix: rbd_data.1a7120e9b6ed  format: 2  features: layering, exclusive-lock, object-map, fast-diff, deep-flatten  op_features:  flags:  create_timestamp: Wed May 25 04:29:50 2022  access_timestamp: Wed May 25 04:29:50 2022  modify_timestamp: Wed May 25 04:29:50 2022

Удаление RBD-диска

Чтобы удалить RBD-диск, выполните следующую команду:

rbd remove ${PoolName}/${ImageName}

Тонкие тома (Thin provisioning) и Толстые тома (Thick provisioning)

В Платформы поддержка Тонких томов выполняется по умолчанию (параметр thin_provisioning_support указан в rbd драйвере: ./cinder/volume/drivers/rbd.py).

Использование Тонких томов и Толстых томов настраивается через подписку в конфигурационном файле /etc/cinder/cinder.conf параметрами thin_provisioning_support и thick_provisioning_support:

Параметры подписки Тонких и Толстых томов
thin_provisioning_support = True (or False)thick_provisioning_support = True (or False)

Подробнее о работе с томами через подписку см. в официальной документации.