Работа с 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.
--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
Изменение параметров компонента 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-узла выполните следующую команду на этом узле:
ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.39990 root default-3 0.19995 host storage10 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 storage21 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-узла:
-
Добавьте новый сервер под OSD в inventory файл, в группу
osds:Пример фрагмента inventory файла для кластера[osds]storage1storage2storage3 -
Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).
-
Проверьте статус CEPH кластера, выполнив команду:
ceph healthДождитесь, когда кластер перейдет в статус
HEALTH_OK. -
Убедитесь, что узел появился, выполнив команду вывода структуры OSD (см. раздел Вывод структуры OSD-узла).
-
При необходимости выведите разницу между структурами узлов, выполнив команду:
ceph osd dfПример вывода команды ceph osd dfID 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>Пример вывода команды ceph osd dfsystemctl disable --now ceph-osd@0.servicesystemctl disable --now ceph-osd@2.servicesystemctl disable --now ceph-osd@4.servicesystemctl disable --now ceph-osd@6.service -
Удалите OSD из Crush maps, выполнив команду:
ceph osd crush remove <НАИМЕНОВАНИЕ_СЕРВИСА_OSD>Пример удаления сервисов OSD из Crush mapsceph osd crush remove osd.0ceph osd crush remove osd.2ceph osd crush remove osd.4ceph osd crush remove osd.6 -
Удалите сервисы OSD, выполнив команду:
ceph osd rm <НАИМЕНОВАНИЕ_СЕРВИСА_OSD>Пример удаления сервисов OSDceph osd rm osd.0ceph osd rm osd.2ceph osd rm osd.4ceph osd rm osd.6
Чтобы удалить OSD-узел:
-
Выведите OSD-узел из эксплуатации (см. раздел Вывод OSD-узла из эксплуатации).
-
Найдите наименование узла, который необходимо удалить, в inventory файле.
-
Удалите узел, выполнив команду:
ceph osd crush remove <НАИМЕНОВАНИЕ_УЗЛА> -
Проверьте статус CEPH кластера, выполнив команду:
ceph healthДождитесь, когда кластер перейдет в статус
HEALTH_OK.
Для добавления нового MON-узла:
-
Добавьте новый сервер под OSD в inventory файл, в группу
mons:Пример фрагмента inventory файла для кластера[mons]storage1storage2storage3 -
Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).
-
Проверьте статус создания 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 -scluster:id: 5456e034-c7a6-4a7d-af66-1e95be8e50b1health: HEALTH_OKservices:mon: 3 daemons, quorum storage1,storage2,storage3 (age 4h)mgr: storage3(active, since 5h), standbys: storage2mds: cephfs:1 {0=storage3=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-узел из эксплуатации:
-
Перейдите на storage сервер, откуда требуется вывести узел, по SSH.
-
Выключите службу, отвечающую за работу mon-сервиса, выполнив команду:
systemctl disable --now ceph-mon.target -
Удалите MON-узел из storage сервера, выполнив команду:
ceph mon remove <НАИМЕНОВАНИЕ_STORAGE_СЕРВЕРА> -
Проверьте статус MON-узлов, выполнив команду:
ceph mon statПример вывода команды ceph mon state2: 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 -
Найдите файл
ceph.confна всех узлах и удалите оттуда IP storage сервера, для которого выводился MON-узел, из секцииmon host. -
Удалите storage сервер, для которого выводился MON-узел, из группы
monsв inventory файле компонента ceph-ansible.
Для добавления нового MDS-узла:
-
Добавьте новый сервер под MDS в inventory файл, в группу
mdss:Пример фрагмента inventory файла для кластера[mdss]storage1storage3 -
Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).
-
Проверьте статус создания MDS-узла, выполнив команду:
ceph mds statПример работы команды ceph mds statcephfs:1 {0=storage3=up:active} 1 up:standby
Чтобы вывести MDS-узел из эксплуатации:
-
Перейдите на storage сервер, откуда требуется вывести узел, по SSH.
-
Выключите службу, отвечающую за работу mds-сервиса, выполнив команду:
systemctl disable --now ceph-mds.target -
Удалите storage сервер, для которого выводился MON-узел, из группы
mdssв inventory файле компонента ceph-ansible.
Для добавления нового MGR-узла:
-
Добавьте новый сервер под MGR в inventory файл, в группу
mgrs:Пример фрагмента inventory файла для кластера[mgrs]storage2storage3 -
Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).
-
Проверьте статус создания MGR-узла, выполнив команду:
ceph -s
Чтобы вывести MGR-узел из эксплуатации:
-
Перейдите на storage сервер, откуда требуется вывести узел, по SSH.
-
Выключите службу, отвечающую за работу mgr-сервиса, выполнив команду:
systemctl disable --now ceph-mgr.target -
Удалите storage сервер, для которого выводился MGR-узел, из группы
mgrsв inventory файле компонентаceph-ansible.
Для просмотра содержимого 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-ansible/group_vars/all.ymlдобавьте информацию по новому пулу в секциюopenstack_pools. -
Запустите плейбук (см. раздел Применение конфигурации (запуск ansible playbook)).
-
Проверьте статус создания RBD-пула, выполнив команду:
rbd pool stats ${PoolName}
Для удаления RBD-пула:
-
В файле
ceph-ansible/group_vars/all.ymlудалите информацию по пулу из секцииopenstack_pools. -
Удалите пул из CEPH кластера, выполнив команду:
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)
Подробнее о работе с томами через подписку см. в официальной документации.