Работа с CEPH
Управление кластером CEPH в Платформе осуществляется при помощи плейбука ansible-openstack/playbooks/ceph-osd-deploy.yml c использованием основного inventory vkcloud/vkcloud.yml.
Основные группы для 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.
--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
Чтобы вывести структуру OSD-узла, выполните команду на этом узле:
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.39990 root default-3 0.19995 host csn0010 hdd 0.04999 osd.0 up 1.00000 1.000002 hdd 0.04999 osd.2 up 1.00000 1.000004 hdd 0.04999 osd.4 up 1.00000 1.000006 hdd 0.04999 osd.6 up 1.00000 1.00000-5 0.19995 host csn0021 hdd 0.04999 osd.1 up 1.00000 1.000003 hdd 0.04999 osd.3 up 1.00000 1.000005 hdd 0.04999 osd.5 up 1.00000 1.000007 hdd 0.04999 osd.7 up 1.00000 1.00000
Для добавления нового OSD-узла:
-
Добавьте новый узел в переменную
equipment.cephвфайле minimal.yml. Чтобы внести изменения в существующий кластер CEPH, воспользуйтесь плейбукомansible-openstack/playbooks/ceph-osd-deploy.yml. -
Проверьте статус CEPH кластера, выполнив команду:
$ ceph healthДождитесь, когда кластер перейдет в статус
HEALTH_OK. -
Убедитесь, что узел появился, выполнив команду вывода структуры OSD (подробнее — в разделе Вывод структуры OSD-узла).
-
При необходимости выведите разницу между структурами узлов, выполнив команду:
$ ceph osd dfПример ожидаемого результатаID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS1 hdd 0.04999 1.00000 25 GiB 4.8 GiB 3.8 GiB 188 KiB 1024 MiB 20 GiB 19.35 1.11 41 up2 hdd 0.04999 1.00000 25 GiB 3.5 GiB 2.5 GiB 92 KiB 1024 MiB 21 GiB 14.01 0.81 28 up4 hdd 0.04999 1.00000 25 GiB 4.1 GiB 3.1 GiB 126 KiB 1024 MiB 21 GiB 16.54 0.95 40 up6 hdd 0.04999 1.00000 25 GiB 4.7 GiB 3.7 GiB 144 KiB 1024 MiB 20 GiB 18.88 1.09 37 up0 hdd 0.04999 1.00000 25 GiB 3.8 GiB 2.8 GiB 134 KiB 1024 MiB 21 GiB 15.27 0.88 29 up3 hdd 0.04999 1.00000 25 GiB 4.5 GiB 3.5 GiB 0 B 1 GiB 21 GiB 17.88 1.03 43 up5 hdd 0.04999 1.00000 25 GiB 4.1 GiB 3.1 GiB 0 B 1 GiB 21 GiB 16.51 0.95 35 up7 hdd 0.04999 1.00000 25 GiB 5.1 GiB 4.1 GiB 185 KiB 1024 MiB 20 GiB 20.44 1.18 36 upTOTAL 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, выполнив команду:
$ systemctl disable --now <НАЗВАНИЕ_СЕРВИСА_OSD>Пример отключения сервисов на узле$ systemctl disable --now ceph-osd@0.service$ systemctl disable --now ceph-osd@2.service$ systemctl disable --now ceph-osd@4.service$ systemctl disable --now ceph-osd@6.service -
Удалите OSD из Crush maps, выполнив команду:
$ ceph osd crush remove <НАЗВАНИЕ_СЕРВИСА_OSD>Пример удаления сервисов OSD из Crush maps$ ceph osd crush remove osd.0$ ceph osd crush remove osd.2$ ceph osd crush remove osd.4$ ceph osd crush remove osd.6 -
Удалите сервисы OSD, выполнив команду:
$ ceph osd rm <НАЗВАНИЕ_СЕРВИСА_OSD>Пример удаления сервисов OSD$ ceph osd rm osd.0$ ceph osd rm osd.2$ ceph osd rm osd.4$ ceph osd rm osd.6
Чтобы удалить OSD-узел:
-
Выведите OSD-узел из эксплуатации (подробнее — в разделе Вывод OSD-узла из эксплуатации).
-
Найдите название узла, который необходимо удалить, в файле
inventory. -
Удалите узел, выполнив команду:
$ ceph osd crush remove <НАЗВАНИЕ_УЗЛА> -
Проверьте статус CEPH кластера, выполнив команду:
$ ceph healthДождитесь, когда кластер перейдет в статус
HEALTH_OK.
Для добавления нового MON-узла:
-
Добавьте новый узел в переменную
equipment.cephв файлеminimal.yml. Чтобы внести изменения в существующий кластер CEPH, воспользуйтесь плейбукомansible-openstack/playbooks/ceph-osd-deploy.yml. -
Проверьте статус создания MON-узла:
$ ceph mon stat$ ceph -sПример ожидаемого результата$>ceph mon state1: 3 mons at {csn001=[v2:10.12.0.19:3300/0,v1:10.12.0.19:6789/0],csn002=[v2:10.12.0.20:3300/0,v1:10.12.0.20:6789/0],csn003=[v2:10.12.0.21:3300/0,v1:10.12.0.21:6789/0]}, election epoch 8, leader 0 csn001, quorum 0,1,2 csn001$>ceph -scluster:id: 5456e034-c7a6-4a7d-af66-1e95be8e50b1health: HEALTH_OKservices:mon: 3 daemons, quorum csn001,csn002,csn003 (age 4h)mgr: csn003(active, since 5h), standbys: csn002mds: cephfs:1 {0=csn003=up:active} 1 up:standbyosd: 8 osds: 8 up (since 4h), 8 in (since 13h)data:pools: 7 pools, 289 pgsobjects: 3.44k objects, 26 GiBusage: 35 GiB used, 165 GiB / 200 GiB availpgs: 289 active+clean
Чтобы вывести MON-узел из эксплуатации:
-
Перейдите по SSH на CSN-сервер, откуда требуется вывести узел.
-
Отключите службу, отвечающую за работу MON-сервиса:
$ systemctl disable --now ceph-mon.target -
Удалите MON-узел из CSN-сервера:
$ ceph mon remove <НАЗВАНИЕ_CSN_СЕРВЕРА> -
Проверьте статус MON-узлов:
$ ceph mon statПример ожидаемого результатаe2: 2 mons at {csn001=[v2:10.12.0.19:3300/0,v1:10.12.0.19:6789/0],csn003=[v2:10.12.0.21:3300/0,v1:10.12.0.21:6789/0]}, election epoch 20, leader 0 csn001, quorum 0,1 csn001,csn003 -
Найдите файл
ceph.confна всех узлах и удалите из него IP CSN-сервера, для которого выводился MON-узел, из секцииmon host. -
Удалите CSN-сервер, для которого выводился MON-узел, из группы
monsв файле inventory.
Для добавления нового MDS-узла:
-
Добавьте новый узел в переменную
equipment.cephв файлеminimal.yml. Чтобы внести изменения в существующий кластер CEPH, воспользуйтесь плейбукомansible-openstack/playbooks/ceph-osd-deploy.yml. -
Проверьте статус создания MDS-узла:
$ ceph mds statПример ожидаемого результатаcephfs:1 {0=csn003=up:active} 1 up:standby
Чтобы вывести MDS-узел из эксплуатации:
-
Перейдите по SSH на CSN-сервер, откуда требуется вывести узел.
-
Отключите службу, отвечающую за работу MDS-сервиса, выполнив команду:
$ systemctl disable --now ceph-mds.target -
Удалите CSN-сервер, для которого выводился MON-узел, из группы
mdssв файлinventory.
Для добавления нового MGR-узла:
-
Добавьте новый узел в переменную
equipment.cephв файлеminimal.yml. Чтобы внести изменения в существующий кластер CEPH, воспользуйтесь плейбукомansible-openstack/playbooks/ceph-osd-deploy.yml. -
Проверьте статус создания MGR-узла:
$ ceph -s
Чтобы вывести MGR-узел из эксплуатации:
-
Перейдите по SSH на CSN-сервер, откуда требуется вывести узел.
-
Отключите службу, отвечающую за работу MGR-сервиса:
$ systemctl disable --now ceph-mgr.targetsystemctl disable --now ceph-mgr@csn002.service -
Удалите CSN-сервер, для которого выводился MGR-узел, из группы
mgrsв файлinventory.
Чтобы просмотреть содержимого 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-пула выполняется согласно официальной документации CEPH.
Чтобы проверить статус создания RBD-пула, выполните команду:
$ rbd pool stats ${PoolName}
Чтобы удалить RBD-пул, выполните команду:
$ ceph rbd pool delete <НАЗВАНИЕ_ПУЛА> [<НАЗВАНИЕ_ПУЛА> --yes-i-really-really-mean-it]
Чтобы просмотреть информацию по 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 objectsorder 23 (8 MiB objects)snapshot_count: 1id: 1a7120e9b6edblock_name_prefix: rbd_data.1a7120e9b6edformat: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features:flags:create_timestamp: Wed May 25 04:29:50 2022access_timestamp: Wed May 25 04:29:50 2022modify_timestamp: Wed May 25 04:29:50 2022
Чтобы удалить RBD-диск, выполните команду:
$ rbd remove ${PoolName}/${ImageName}
В Платформы поддержка Тонких томов выполняется по умолчанию (параметр 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)
Подробная информация о работе с томами через подписку приведена в официальной документации.