Оглавление

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

Описание тестовой среды

В данном примере в качестве тестовой среды выступает система виртуализации QEMU/KVM в ОС СН Astra Linux Special Edition 1.7.2.

При этом описываемые действия по созданию и настройке гостевых машин выполняются в программе Virt-manager версии 2.2.1-3.

Для организации Ceph-кластера будут развернуты три гостевые машины со следующими параметрами:

  • количество процессоров: 1;
  • размер памяти (ОЗУ): 2 ГБ;
  • объем диска для размещения файлов ОС Astra Linux: 12 ГБ;
  • объем диска для размещения данных хранилища: 24 ГБ.

В качестве административной рабочей станции будет выступать гостевая машина виртуализации, на которой установлены программные компоненты ПК СВ (далее по тексту – фронтальная машина).

При этом вычислительные ресурсы тестового стенда должны обеспечить одновременное функционирование фронтальной машины и трех гостевых машин Ceph-кластера.

В этом примере в качестве установочного носителя используется файл образа технологического установочного диска 1.7.2-11.08.2022_15.28.iso (установочный диск Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с интегрированным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2)).

1. Настройка сервера времени на фронтальной машине

Для корректной работы Ceph-кластера требуется, чтобы на всех узлах кластера было одинаковое время. Для обеспечения синхронности показаний времени будет использоваться служба chronyd (пакет chrony). В качестве сервера времени для узлов кластера будет выступать фронтальная машина.

Для настройки службы chronyd на работу в режиме сервера времени в ОС фронтальной машины необходимо выполнить действия, описанные ниже.

  1. Установить пакет chrony командой:

    sudo apt install chrony

  2. В конфигурационный файл /etc/chrony/chrony.conf добавить следующие строки:

    local stratum 8
    manual
    allow 172.16.1/24
    CODE

    где 172.16.1/24 – диапазон IP-адресов (в формате директив chrony), установленный при создании виртуальной сети в Virt-Manager (см. ПК СВ «Брест» в пределах одного сервера (сервисный режим)).

  3. Перезапустить службу chronyd:

    sudo systemctl restart chronyd

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

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

В данном примере будет развернут Ceph-кластер из 3 узлов:

Сетевое имяIP-адрес
astra-ceph1172.16.1.31
astra-ceph2172.16.1.32
astra-ceph3172.16.1.33

Значения IP-адресов узлов кластера выбраны исходя из диапазона, установленного при создании виртуальной сети в Virt-Manager (172.16.1.0 /24) – см. ПК СВ «Брест» в пределах одного сервера (сервисный режим).

При настройке на узлах кластера будут развернуты:

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

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

В составе каждого из узлов кластера будут два жестких диска:

  • /dev/vda для размещения ОС Astra Linux;
  • /dev/vdb для размещения службы OSD.

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

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

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

2.2. Создание и настройка гостевой машины astra-ceph1

  1. Создать гостевую машину astra-ceph1. Действия по созданию гостевой машины аналогичны действиям, описанным в статье Создание гостевой машины (за исключением пункта установки дополнительного оборудования — канал SPICE добавлять не нужно). При этом необходимо установить следующие параметры гостевой машины:
    • количество процессоров: 1;
    • размер памяти (ОЗУ): 2 ГБ;
    • объем диска: 12 ГБ.

      Диск для размещения службы OSD будет добавлен позже.

  2. В гостевой машине astra-ceph1 установить операционную систему специального назначения "Astra Linux Special Edition" РУСБ.10015-01. При этом следует учитывать следующие особенности установки:

    • на странице Установка базовой системы выбрать для установки ядро linux-5.15-generic;
    • на странице Выбор программного обеспечения выбрать пункт Средства удаленного подключения SSH;
    • на странице Дополнительные настройки ОС выбрать Базовый уровень защищенности "Орел";
    • на странице Дополнительные настройки ОС выбрать пункт Запрет автонастройки сети.
  3. Настроить сетевое соединение:
    • в файл /etc/network/interfaces добавить следующие строки:

      auto eth0
      iface eth0 inet static
      address 172.16.1.31
      netmask 255.255.255.0
      gateway 172.16.1.1
      CODE
    • запустить в работу сетевой интерфейс командой:

      sudo ifup eth0

    • файл /etc/hosts привести к следующему виду:

      127.0.0.1	localhost 
      172.16.1.31 astra-ceph1
      CODE
    • задать сетевое имя гостевой машине, выполнив команду:

      sudo hostnamectl set-hostname astra-ceph1
      Сообщение об ошибке вида:

      sudo: unable to resolve host <предыдущее_имя_гостевой_машины>: В соединении отказано
      CODE

      можно игнорировать (перед тем как выполнить команду инструмент командной строки sudo обращается к файлу /etc/hosts чтобы определить IP-адрес используя предыдущее имя гостевой машины).

    • добавить в автозапуск и запустить службу ssh командами:

      sudo systemctl enable ssh
      sudo systemctl start ssh

      Далее можно подключиться к гостевой машине astra-ceph1 из хостовой ОС по SSH.
  4. Подключить образ установочного носителя к гостевой машине astra-ceph1 (см. Подключение образа установочного носителя к гостевой машине).
  5. Установить и настроить службу времени chronyd:
    • установить пакет chrony командой:

      sudo apt install chrony

    • в конфигурационном файле /etc/chrony/chrony.conf закомментировать (в начале строки установить символ "#") строки с описанием кластера серверов точного времени pool.ntp.org;
    • в конфигурационный файл /etc/chrony/chrony.conf добавить информацию о предпочитаемом сервере времени. Для этого в блоке с описанием серверов времени добавить строку вида:

      server 172.16.1.20 prefer
      CODE

      где 172.16.1.20 – IP-адрес фронтальной машины;

    • перезапустить службу chronyd:

      sudo systemctl restart chronyd

    • проверить доступность сервера времени:

      chronyc tracking
      пример вывода после выполнения команды:

      Reference ID    : 7F7F0101 ()
      Stratum         : 8
      Ref time (UTC)  : Thu Jul 20 05:37:43 2023
      System time     : 0.000000000 seconds fast of NTP time
      Last offset     : +0.000000000 seconds
      RMS offset      : 0.000000000 seconds
      Frequency       : 0.000 ppm slow
      Residual freq   : +0.000 ppm
      Skew            : 0.000 ppm
      Root delay      : 0.000000000 seconds
      Root dispersion : 0.000000000 seconds
      Update interval : 0.0 seconds
      Leap status     : Normal
      CODE

      где значение параметра "Leap status" может принимать следующие значения:

      • Normal – в случае нормальной корректировки времени;
      • Not synchronised – в случае если компьютер в данный момент времени не синхронизирован.
  6. Создать и настроить учетную запись пользователя с ролью администратора Ceph-кластера (например, ceph-adm):
    • создать учетную запись пользователя командой:

      sudo adduser ceph-adm

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

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

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

    • задать высокий уровень целостности для созданного пользователя ceph-adm командой:

      sudo pdpl-user -i 63 ceph-adm

  7. Выключить гостевую машину astra-ceph1.
  8. Подключить к гостевой машине astra-ceph1 диск для размещения службы OSD:
    • в окне программы Virt-manager на панели инструментов окна гостевой машины нажать на кнопку [Показать виртуальное оборудование];
    • в окне параметров гостевой машины нажать на кнопку [Добавить оборудование] в левом нижнем углу;
    • в открывшемся окне Добавление виртуального оборудования:
      • в левом поле выбрать пункт Хранилище;

      • в правом поле установить флаг Создать образ диска для виртуальной машины;

      • задать размер диска равным 24 ГБ;
      • нажать на кнопку [Готово];

    • закрыть окно гостевой машины astra-ceph1.

2.3. Создание и настройка гостевой машины astra-ceph2

  1. Создать гостевую машину astra-ceph2 путем клонирования гостевой машины astra-ceph1:
    • в окне программы Virt-manager на строке с гостевой машиной astra-ceph1 нажать правую кнопку мыши и в открывшемся контекстном меню выбрать пункт Клонировать;
    • в открывшемся окне Клонирование виртуальной машины:
      • задать наименование гостевой машины (astra-ceph2);
      • нажать на кнопку [Клонировать].

        Дождаться завершения процесса клонирования. 
  2. Запустить гостевую машину astra-ceph2.

    Для первичной настройки гостевой машины astra-ceph2 можно подключиться к ней из хостовой ОС по SSH, используя IP-адрес и аутентификационные параметры гостевой машины astra-ceph1 (исходная машина astra-ceph1 должна быть выключена).
  3. В гостевой машине astra-ceph2 скорректировать настройки сетевого соединения:
    • файл /etc/network/interfaces привести к следующему виду:

      auto eth0
      iface eth0 inet static
      address 172.16.1.32
      netmask 255.255.255.0
      gateway 172.16.1.1
      CODE
    • файл /etc/hosts привести к следующему виду:

      127.0.0.1	localhost 
      172.16.1.32 astra-ceph2
      CODE
    • файл /etc/hostname привести к следующему виду:

      astra-ceph2
      CODE

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

      sudo: unable to resolve host astra-ceph1: Временный сбой в разрешении имен
      CODE

      можно игнорировать (перед тем как выполнить команду инструмент командной строки sudo обращается к файлу /etc/hosts чтобы определить IP-адрес используя предыдущее имя гостевой машины).

  4. Выключить гостевую машину astra-ceph2.

2.4. Создание и настройка гостевой машины astra-ceph3

  1. Создать гостевую машину astra-ceph3 путем клонирования гостевой машины astra-ceph1. Действия по созданию гостевой машины astra-ceph3 аналогичны действиям, описанным в разделе Создание и настройка гостевой машины astra-ceph2.
  2. Запустить гостевую машину astra-ceph3.

    Для первичной настройки гостевой машины astra-ceph3 можно подключиться к ней из хостовой ОС по SSH, используя IP-адрес и аутентификационные параметры гостевой машины astra-ceph1 (исходная машина astra-ceph1 должна быть выключена).
  3. В гостевой машине astra-ceph3 скорректировать настройки сетевого соединения:
    • файл /etc/network/interfaces привести к следующему виду:

      auto eth0
      iface eth0 inet static
      address 172.16.1.33
      netmask 255.255.255.0
      gateway 172.16.1.1
      CODE
    • файл /etc/hosts привести к следующему виду:

      127.0.0.1	localhost 
      172.16.1.33 astra-ceph3
      CODE
    • файл /etc/hostname привести к следующему виду:

      astra-ceph3
      CODE

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

      sudo: unable to resolve host astra-ceph1: Временный сбой в разрешении имен
      CODE

      можно игнорировать (перед тем как выполнить команду инструмент командной строки sudo обращается к файлу /etc/hosts чтобы определить IP-адрес используя предыдущее имя гостевой машины).

  4. Выключить гостевую машину astra-ceph3.

2.5. Настройка фронтальной машины и развертывание Ceph-кластера

  1. На фронтальной машине файл /etc/hosts привести к следующему виду:

    127.0.0.1	localhost  
    172.16.1.20 <имя_фронтальной_машины>
    172.16.1.31 astra-ceph1
    172.16.1.32 astra-ceph2
    172.16.1.33 astra-ceph3
    CODE
  2. Установить пакет ceph-deploy командой:

    sudo apt install ceph-deploy

  3. Создать и настроить учетную запись пользователя ceph-adm:
    • создать учетную запись пользователя командой:

      sudo adduser ceph-adm

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

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

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

    • Если ПК СВ настроен на работу в дискреционном режиме, то для созданного пользователя ceph-adm необходимо задать уровень целостности равный 127:

      sudo pdpl-user -i 127 ceph-adm

  4. Включить гостевые машины astra-ceph1, astra-ceph2 и astra-ceph3. Удостовериться в том, что для всех гостевых машин подключен установочный диск.
  5. Войти в ОС фронтальной машины под учетной записью ceph-adm.

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

  6. На фронтальной машине настроить беспарольный ssh-доступ:
    • сгенерировать ssh-ключи (публичный и приватный) командой:

      ssh-keygen

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

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

    • скопировать приватный ключ на саму фронтальную машину командой:

      ssh-copy-id ceph-adm@<имя_фронтальной_машины>
      В ходе выполнения команды необходимо ответить "yes" ("Да") и указать пароль пользователя ceph-adm.

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

    ceph-deploy --username ceph-adm install --mon --osd astra-ceph1 astra-ceph2 astra-ceph3
    Аргументы команды --mon и --osd определяют компоненты Ceph, необходимые для установки. Если эти параметры не указаны, будут установлены все компоненты Ceph.

  8. Перезагрузить узлы кластера:

    for N in $(seq 1 3); do ssh ceph-adm@astra-ceph$N sudo reboot; done

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

    ceph-deploy --username ceph-adm install --mgr astra-ceph1

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

    ceph-deploy --username ceph-adm new astra-ceph1 astra-ceph2 astra-ceph3
    После выполнения команды в домашнем каталоге пользователя ceph-adm будут созданы конфигурационный файл ceph.conf и keyring-файл мониторов.

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

    ceph-deploy --username ceph-adm mon create-initial

  12. Зарегистрировать службу диспетчера Ceph на узле astra-ceph1. Для этого на фронтальной машине выполнить команду:

    ceph-deploy --username ceph-adm mgr create astra-ceph1

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

    ceph-deploy --username ceph-adm osd create --data /dev/vdb astra-ceph1
    ceph-deploy --username ceph-adm osd create --data /dev/vdb astra-ceph2
    ceph-deploy --username ceph-adm osd create --data /dev/vdb astra-ceph3

  14. Установить клиентские инструментальные средства Ceph на фронтальную машину:

    ceph-deploy --username ceph-adm install --cli <имя_фронтальной_машины>

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

    ceph-deploy admin <имя_фронтальной_машины>

  16. Проверить состояние 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 astra-ceph1,astra-ceph2,astra-ceph3 (age 24m)
        mgr: astra-ceph1(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

3. Дополнительная настройка Ceph-кластера для работы с ПК СВ

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

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

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

    В описываемом примере:

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

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

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

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

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

    enabled application 'rbd' on pool 'one'
    CODE
  3. Создать 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 означает, что команда выполняется в отношении логической сущности "пользователь".

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

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

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

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

    exported keyring for client.libvirt
    CODE

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

На фронтальной машине от имени пользователя ceph-adm необходимо выполнить действия, описанные ниже.

  1. Cкопировать набор ключей Ceph-пользователя в каталог /etc/ceph:

    sudo cp ceph.client.libvirt.keyring /etc/ceph/

  2. Cкопировать ключ Ceph-пользователя в каталог /var/lib/one:

    sudo cp client.libvirt.key /var/lib/one/

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

    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:

    sudo cp secret.xml /var/lib/one/

  5. Задать секретный ключ libvirt, используя файл secret.xml:

    sudo virsh -c qemu:///system secret-define /var/lib/one/secret.xml
    Пример вывода после успешного выполнения команды:

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

    sudo virsh -c qemu:///system secret-set-value --secret $UUID --file /var/lib/one/client.libvirt.key
    Пример вывода после успешного выполнения команды:

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

    sudo rbd ls -p one --id libvirt
    Результатом выполнения команды должен быть пустой вывод без ошибок.

5. Создание (регистрация) хранилищ в веб-интерфейсе ПК СВ

Подключение к веб-интерфейсу ПК СВ описано в статье ПК СВ «Брест» в пределах одного сервера (сервисный режим).

5.1. Создание системного хранилища

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

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

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

5.2. Создание хранилища образов

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

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

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


6. Проверка работы хранилищ

Для проверки работы созданных хранилищ можно выполнить действия по развертыванию ВМ. Для этого: