Особенности использования хранилища Ceph в ПК СВ

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

Образы и диски виртуальных машин хранятся в одном Ceph-пуле. Каждый образ в пуле имеет наименование вида: one-<идентификатор_образа>. Виртуальные машины будут использовать RBD-тома для своих дисков, если образы помечены как "постоянные". В противном случае создаются новые снимки состояний образа с наименованием вида:
one-<идентификатор_образа>-<идентификатор_ВМ>-<идентификатор_диска_ВМ>.

В ПК СВ можно добавить дополнительные хранилища образов и системные хранилища, указав другие пулы с отличными от хранилища Ceph политиками распределения ресурсов/репликации.

Кроме того, допускается совместная работа хранилища образов, построенного на базе Ceph, и системного хранилища, построенного на базе файловой технологии хранения. При этом в качестве драйвера передачи данных между хранилищем образов и системным хранилищем используется метод совместной передачи (shared) – см. Хранилища на базе файловой технологии хранения. В этом случае энергозависимые диски и диски подкачки создаются в виде обычных файлов в системном хранилище. А также кроме Ceph-кластера необходимо выполнить установку и настройку распределенной файловой системы, например NFS.

Создание и настройка системы хранения

Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy

Инструмент командной строки ceph-deploy обеспечивает быстрый способ развертывания Ceph-кластера без тонкой настройки, используя инструменты ssh, sudo и Python версии 2.x.

Исходные данные

В данном разделе описан возможный вариант развертывания Ceph-кластера, состоящего 3 узлов:

  • storage1;
  • storage2;
  • storage3.

и административной рабочей станции arm.

Предполагается, что перед началом развертывания Ceph на узлах storage1, storage2 и storage3 выполнены следующие действия:

  • установлена операционная система специального назначения «Astra Linux Special Edition» РУСБ.10015-01 с оперативным обновлением 1.7.4 (далее по тексту – Astra Linux);
  • узлам назначен фиксированный IP-адрес, в качестве сервера DNS указан IP-адрес административной рабочей станции arm;
  • настроена служба синхронизации времени. В качестве сервера единого сетевого времени выступает административная рабочая станция arm;
  • настроен доступ к репозиторию Astra Linux.

В составе каждого из узлов Ceph-кластера имеются два жестких диска:

  • /dev/sda – для размещения файлов Astra Linux;
  • /dev/sdb – для размещения данных хранилища.

На узлах Ceph-кластера будут развернуты:

  • служба монитора (MON);
  • служба хранилища данных (OSD).

Использованная конфигурация предназначена только для ознакомления и тестирования Ceph. При развертывании рабочей системы на объекте не рекомендуется размещать монитор и OSD на одном узле.

Кроме того, на узле storage1 будет запущена служба ceph-mgr (служба диспетчера Ceph).

Развертывание Ceph-кластера будет выполняется на административной рабочей станции arm от имени пользователя с ролью администратора Ceph-кластера.

Для удобства развертывания, на административной рабочей станции arm в файле /etc/hosts указаны короткие имена административной рабочей станции и узлов кластера.

Подготовка к развертыванию Ceph-кластера

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

  1. Установить пакеты python и ssh, если он не были ранее установлены:

    sudo apt install python ssh

  2. Разрешить автоматический запуск службы ssh, выполнив команду:

    sudo systemctl enable --now ssh

    Дальнейшие предварительные действия на узлах кластера при необходимости можно выполнить с рабочей станции, подключаясь через SSH от имени администратора системы.
  3. Создать учетную запись пользователя с ролью администратора Ceph-кластера, например, cephadmin:

    sudo adduser cephadmin
    В результате появится диалог, в котором необходимо задать пароль пользователя и ввести дополнительную информацию. По окончании диалога необходимо ответить "y" ("Да").

  4. Предоставить созданной учетной записи пользователя cephadmin возможность использовать привилегии суперпользователя (sudo) без запроса пароля, последовательно выполнив следующие команды:

    echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
    sudo chmod 0440 /etc/sudoers.d/cephadmin

  5. Задать высокий уровень целостности для созданного пользователя cephadmin:

    sudo pdpl-user -i 63 cephadmin

    Если в качестве узла Ceph-кластера выступает компьютер с установленной службой сервера виртуализации (гиперконвергентный сценарий развертывания), то для пользователя cephadmin необходимо задать уровень целостности равный 127.

Развертывание Ceph-кластера

Развертывание Ceph-кластера с помощью инструмента командной строки ceph-deploy выполняется на административной рабочей станции (arm) от имени пользователя с ролью администратора Ceph-кластера (cephadmin).

Недопустимо использование инструмента командной строки ceph-deploy от имени суперпользователя (с sudo или же от имени пользователя root).

Для развертывания Ceph-кластера необходимо выполнить действия, описанные ниже.

  1. Сгенерировать ssh-ключи (публичный и приватный) командой:

    ssh-keygen

  2. Скопировать публичный ключ на все узлы кластера, например, командой:

    for N in $(seq 1 3); do ssh-copy-id cephadmin@storage$N; done
    В ходе выполнения команд для каждого узла кластера необходимо ответить "y" ("Да") и указать пароль пользователя cephadmin.

  3. Скопировать ssh-ключ для беспарольного доступа к самой административной станции:

    ssh-copy-id cephadmin@arm

  4. Установить инструмент командной строки ceph-deploy:

    sudo apt install ceph-deploy

  5. Установить базовые компоненты Ceph на узлах кластера. Для этого на сервере управления выполнить команду:

    ceph-deploy --username cephadmin install --mon --osd storage1 storage2 storage3
    Параметры --mon и --osd определяют компоненты Ceph, необходимые для установки. Если эти параметры не указаны, будут установлены все компоненты Ceph.

  6. Перезагрузить узлы кластера, например, командой:

    for N in $(seq 1 3); do ssh cephadmin@storage$N sudo reboot; done

  7. Установить на узле storage1 дополнительный компонент ceph-mgr (служба диспетчера Ceph). Для этого на административной рабочей станции выполнить команду:

    ceph-deploy --username cephadmin install --mgr storage1

  8. Создать новый кластер Ceph, указав в команде узлы кластера, на которых в дальнейшем будут инициализированы первоначальные мониторы:

    ceph-deploy --username cephadmin new storage1 storage2 storage3
    После выполнения команды в домашнем каталоге пользователя cephadmin будут созданы конфигурационный файл ceph.conf и keyring-файл мониторов.

  9. Инициализировать мониторы на ранее указанных узлах кластера выполнив команду:

    ceph-deploy --username cephadmin mon create-initial

  10. Зарегистрировать службу диспетчера Ceph на узле storage1. Для этого на административной рабочей станции выполнить команду:

    ceph-deploy --username cephadmin mgr create storage1

  11. Создать OSD на дисках /dev/sdb узлов кластера и добавить их в кластер используя команды:

    ceph-deploy --username cephadmin osd create --data /dev/sdb storage1
    ceph-deploy --username cephadmin osd create --data /dev/sdb storage2
    ceph-deploy --username cephadmin osd create --data /dev/sdb storage3

  12. Установить клиентские инструментальные средства Ceph на административную рабочую станцию arm:

    ceph-deploy --username cephadmin install --cli arm

  13. Указать, что в качестве административной будет выступать рабочая станция arm:

    ceph-deploy admin arm

  14. После завершения развертывания кластера Ceph проверить его состояние можно используя команду:

    sudo ceph -s
    Пример вывода после выполнения команды:

    cluster:
      id:     8ecf49d8-b926-4096-8429-3e39502a6dca
      health: HEALTH_WARN
              mons are allowing insecure global_id reclaim
     
    services:
      mon: 3 daemons, quorum storage1,storage2,storage3 (age 24m)
      mgr: storage1(active, since 19m)
      osd: 3 osds: 3 up (since 16m), 3 in (since 16m)
     
    data:
      pools:   1 pools, 1 pgs
      objects: 0 objects, 0 B
      usage:   15 MiB used, 72 GiB / 72 GiB avail
      pgs:     1 active+clean
    CODE

    Сообщение вида:

    mons are allowing insecure global_id reclaim
    CODE

    можно игнорировать (это предупреждение о возможной эксплуатации уязвимости). Чтобы исключить вывод этого предупреждения необходимо:

    • выполнить команду:

      sudo ceph config set mon auth_allow_insecure_global_id_reclaim false

    • перезагрузить службу Ceph командой:

      sudo systemctl restart ceph.target

Дополнительная настройка Ceph-кластера для использования в ПК СВ

Дополнительно на административной рабочей станции от имени пользователя с ролью администратора Ceph-кластера необходимо выполнить действия, описанные ниже.

  1. Распределить конфигурационные файлы на узлы Ceph-кластера, например, с использованием инструмента командной строки ceph-deploy:

    ceph-deploy --username <администратор_Ceph-кластера> config push <узел_кластера-1> <узел_кластера-2> ... <узел_кластера-N>

    Пример команды для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.

    ceph-deploy --username cephadmin config push storage1 storage2 storage3

  2. Создать пул для хранилищ ПК СВ, указав наименование пула one:

    sudo ceph osd pool create one <количество_групп>
    где <количество_групп> количество групп в пуле, которое определяется по следующей формуле: ((Общее количество OSD * 100) / Уровень репликации) с округлением до ближайшей степени 2 в сторону увеличения.

    Пример

    В случае для трех узлов Ceph-кластера:

    (3 OSD * 100) / 3 = 100 (округляется до 128)

    Таким образом, количество групп в пуле должно быть равным 128.

    Пример вывода после успешного выполнения команды:

    pool 'one' created
    CODE
  3. Настроить пул "one" на работу с RBD:

    sudo ceph osd pool application enable one rbd
    Пример вывода после успешного выполнения команды:

    enabled application 'rbd' on pool 'one'
    CODE
  4. Создать Ceph-пользователя, который будет иметь доступ к пулу хранилищ. Данный пользователь будет также использоваться службой libvirt для доступа к образам дисков. Для того чтобы создать пользователя, например, с именем libvirt, необходимо выполнить команду:

    sudo ceph auth get-or-create client.libvirt mon 'profile rbd' osd 'profile rbd pool=one'
    Пример вывода после успешного выполнения команды:

    [client.libvirt]
            key = AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==
    CODE

    Префикс client означает, что команда выполняется в отношении логической сущности "пользователь".

  5. Получить копию ключа Ceph-пользователя для последующей настройки службы сервера виртуализации:

    sudo ceph auth get-key client.libvirt | tee client.libvirt.key
    Пример вывода после успешного выполнения команды:

    AQAS8hJkyaa9FxAAnRqI2RTD1nqmOcJLxPRWNg==
    CODE
  6. Экспортировать набор ключей Ceph-пользователя в файл ceph.client.libvirt.keyring:

    sudo ceph auth get client.libvirt -o ceph.client.libvirt.keyring
    Пример вывода после успешного выполнения команды:

    exported keyring for client.libvirt
    CODE

Настройка сервера управления для работы с Ceph-кластером

Для сервера управления не требуется специальная настройка. Сервер управления будет выполнять доступ к Ceph-кластеру через серверы виртуализации, настроенные на использование Ceph-кластера (параметр BRIDGE_LIST, который указывается при регистрации хранилища).

Настройка сервера виртуализации для работы с Ceph-кластером

Для использования Ceph-кластера на административной рабочей станции от имени пользователя с ролью администратора Ceph-кластера необходимо выполнить действия, описанные ниже.

  1. Cкопировать набор ключей Ceph-пользователя (в рассматриваемом примере – ceph.client.libvirt.keyring) на все серверы виртуализации в каталог /etc/ceph:

    scp ceph.client.libvirt.keyring <администратор>@<узел_виртуализации>:/tmp

    ceph-deploy --username <администратор> install --cli <узел_виртуализации>

    ceph-deploy --username <администратор> admin <узел_виртуализации>

    ceph-deploy --username <администратор> config push <узел_виртуализации>

    ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/ceph.client.libvirt.keyring /etc/ceph"

    где:

    • <администратор> – учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;
    • <узел_виртуализации> – сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.
  2. Cкопировать ключ Ceph-пользователя (в рассматриваемом примере client.libvirt.key) на все серверы виртуализации в каталог в каталог /var/lib/one:

    scp client.libvirt.key <администратор>@<узел_виртуализации>:/tmp
    ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/client.libvirt.key /var/lib/one"
    где:

    • <администратор> – учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;

    • <узел_виртуализации> – сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.

  3. Cгенерировать универсальный уникальный идентификатор (UUID) и сохранить его в файл secret.xml:

    sudo apt install uuid-runtime

    UUID=$(uuidgen)
    cat > secret.xml <<EOF
    <secret ephemeral='no' private='no'>
    <uuid>$UUID</uuid>
    <usage type='ceph'>
    <name>client.libvirt secret</name>
    </usage>
    </secret>
    EOF

  4. Cкопировать файл secret.xml на все серверы виртуализации в каталог /var/lib/one/:

    scp secret.xml <администратор>@<узел_виртуализации>:/tmp
    ssh <администратор>@<узел_виртуализации> "sudo mv /tmp/secret.xml /var/lib/one/"
    где:

    • <администратор> – учетная запись локального администратора сервера, на котором развернута служба сервера виртуализации;
    • <узел_виртуализации> – сетевое имя или IP-адрес сервера, на котором развернута служба сервера виртуализации.
  5. На всех серверах виртуализации задать секретный ключ службы libvirt, используя файл secret.xml:

    ssh <администратор>@<узел_виртуализации> "sudo virsh -c qemu:///system secret-define /var/lib/one/secret.xml"
    Пример вывода после успешного выполнения команды:

    Секрет c84b8321-6d49-4b43-8d1b-0efc1686edc4 создан
    CODE
  6. На всех серверах виртуализации связать секретный ключ службы libvirt и ключ Ceph-пользователя:

    ssh <администратор>@<узел_виртуализации> "sudo virsh -c qemu:///system secret-set-value --secret $UUID --file /var/lib/one/client.libvirt.key"

    Пример вывода после успешного выполнения команды:

    Значение установлено
    CODE
  7. Убедиться в том, что Ceph-пользователь (с наименованием libvirt) имеет корректные настройки на сервере виртуализации, выполнив команду:

    ssh <администратор>@<узел_виртуализации> "sudo rbd ls -p one --id libvirt"
    результатом выполнения команды должен быть пустой вывод без ошибок.

  8. Убедиться в том, что на узлах выделено достаточно места для хранения вспомогательных файлов виртуальных машин, таких как context-диски, файлы развертывания и файлы контрольной точки.

  9. В файле /etc/hosts указать короткие имена административной рабочей станции и узлов кластера.

Регистрация хранилищ

Параметры хранилищ

Для использования Ceph-кластера в качестве хранилища необходимо зарегистрировать системное хранилище и хранилище образов. Оба хранилища совместно используют одни и те же параметры конфигурации, приведенные в таблице ниже, и Ceph-пул.

Общие параметры конфигурации, используемые при регистрации хранилища, построенного на базе технологии Ceph:

ПараметрОписаниеОбязательный
NAMEИмя хранилищаДА
POOL_NAMEИмя Ceph-пулаДА
CEPH_USERИмя Ceph-пользователя, используемое службами libvirt и rbdДА
CEPH_KEYПолный путь файла секретного ключа для пользователя, если не используется стандартный файл (/var/lib/one/client.libvirt.key)НЕТ
CEPH_CONFНестандартный конфигурационный файл Ceph, если необходимНЕТ
RBD_FORMATформат RBD (по умолчанию будет использоваться RBD формата 2)НЕТ
BRIDGE_LISTРазделенный пробелами список серверов виртуализации, настроенных на использование Ceph-кластераДА
CEPH_HOSTРазделенный пробелами список узлов Ceph-кластера, с инициированным службой монитора (MON)ДА
CEPH_SECRETУниверсальный уникальный идентификатор (UUID) секретного ключа libvirtДА

Значение UUID можно скопировать из файла /var/lib/one/secret.xml на сервере управления.

При регистрации системного хранилища дополнительно к общим параметрам, устанавливаются значения следующих параметров:

ПараметрЗначениеОбязательный
TYPESYSTEM_DSДА
TM_MADcephДА

При регистрации хранилища образов дополнительно к общим параметрам, устанавливаются значения следующих параметров:

ПараметрЗначениеОбязательный
TYPEIMAGE_DSДА
DS_MADcephДА
TM_MADcephДА
DISK_TYPERBDДА

Регистрация хранилищ в интерфейсе командной строки

Регистрация системного хранилища

Для регистрации хранилища используется следующая команда:

onedatastore create <имя_файла>
где <имя_файла> – наименование файла, в котором указаны значения параметров хранилища.

Пример

Регистрация системного хранилища на базе Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy

  1. Создать файл systemds.txt следующего содержания:

    NAME		= ceph_system 
    POOL_NAME	= one 
    CEPH_USER	= libvirt
    BRIDGE_LIST = "oneserver"
    CEPH_HOST	= "storage1 storage2 storage3"
    CEPH_SECRET = "c84b8321-6d49-4b43-8d1b-0efc1686edc4"
    
    TYPE		= SYSTEM_DS 
    TM_MAD		= ceph
    CODE
  2. Выполнить команду:

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100
    CODE

Регистрация хранилища образов

Для регистрации хранилища используется следующая команда:

onedatastore create <имя_файла>
где <имя_файла> – наименование файла, в котором указаны значения параметров хранилища.

Пример

Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy. Регистрация хранилища образов с использованием конфигурационного файла:

  1. Создать файл imageds.txt следующего содержания:

    NAME 		= "ceph_images" 
    POOL_NAME	= one 
    CEPH_USER	= libvirt
    BRIDGE_LIST = "oneserver"
    CEPH_HOST	= "storage1 storage2 storage3"
    CEPH_SECRET = "c84b8321-6d49-4b43-8d1b-0efc1686edc4"
    
    TYPE		= IMAGE_DS 
    DS_MAD 		= ceph 
    TM_MAD 		= ceph
    DISK_TYPE 	= RBD   
    CODE
  2. Выполнить команду:

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101
    CODE

Регистрация хранилищ в веб-интерфейсе ПК СВ

Регистрация системного хранилища

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище зарегистрировать хранилище одним из способов:
    • во вкладке Расширенный указать непосредственно значения параметров хранилища;
    • во вкладке Мастер настройки:
      • в поле Название задать наименование хранилища;
      • в выпадающем списке Тип хранилища выбрать значение Ceph;
      • установить флаг Система;
      • прокрутить страницу Создать хранилище ниже;
      • в поле Список мостов на узле через пробел перечислить серверы виртуализации, настроенные на использование Ceph-кластера;
      • в поле Пул Ceph для хранения образов ввести наименование пула, созданного для хранилища;
      • в поле Пользователь Ceph ввести имя  Ceph-пользователя;
      • в поле Узел Ceph через пробел перечислить узлы кластера Ceph, на которых инициирована служба монитора (MON);
      • в поле Ceph секрет ввести значение универсального уникального идентификатора (UUID).

        Значение UUID можно скопировать из файла /var/lib/one/secret.xml.

        Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.

  3. На странице Создать хранилище нажать на кнопку [Создать].
  4. Дождаться когда на странице Хранилища для созданного хранилища отобразить актуальный размер.

    В представленном примере системному хранилищу ceph_system присвоен идентификатор 100.

Регистрация хранилища образов

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище зарегистрировать хранилище одним из способов:
    • во вкладке Расширенный указать непосредственно значения параметров хранилища;
    • во вкладке Мастер настройки:
      • в поле Название задать наименование хранилища;
      • в выпадающем списке Тип хранилища выбрать значение Ceph;
      • установить флаг Образы;
      • прокрутить страницу Создать хранилище ниже;
      • в поле Список мостов на узле через пробел перечислить серверы виртуализации, настроенные на использование Ceph-кластера;
      • в поле Пул Ceph для хранения образов ввести наименование пула, созданного для хранилища;
      • в поле Пользователь Ceph ввести имя  Ceph-пользователя;
      • в поле Узел Ceph через пробел перечислить узлы кластера Ceph, на которых инициирована служба монитора (MON);
      • в поле Ceph секрет ввести значение универсального уникального идентификатора (UUID).

        Значение UUID можно скопировать из файла /var/lib/one/secret.xml.

        Пример для Ceph-кластера, развертывание которого описано в подразделе Пример развертывания Ceph-кластера с помощью инструмента командной строки ceph-deploy.

  3. На странице Создать хранилище нажать на кнопку [Создать].
  4. Дождаться когда на странице Хранилища для созданного хранилища отобразить актуальный размер.
    В представленном примере хранилищу образов ceph_images присвоен идентификатор 101.