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

Для обеспечения отказоустойчивости сервиса фронтальной машины в ПК СВ применяется технология Raft.

Поддержка технологии Raft реализована только в дискреционном режиме функционирования ПК СВ.

Алгоритм Raft позволяет объединять несколько экземпляров фронтальной машины в зону, конфигурацию которой можно менять (добавлять и удалять экземпляры фронтальной машины), не прерывая работу ПК СВ. Для этой зоны выделяется плавающий (способный при необходимости переходить от одного экземпляра к другому) IP-адрес. Из доступных экземпляров выбирается лидер, которому присваивается ранее выделенный IP-адрес. Лидер обслуживает все входящие запросы.
Все изменения на лидере синхронизируются с остальными экземплярами фронтальной машины в зоне. Если работа лидера прерывается более чем на 500 миллисекунд, то выбирается новый лидер из числа исправных экземпляров. Выделенный для зоны IP-адрес присваивается новому лидеру. Таким образом обеспечивается высокая доступность фронтальной машины.

Для работы Raft должны быть соблюдены следующие требования:

  • имеется нечетное число (рекомендуется 3 или 5) экземпляров фронтальной машины (см. Установка и инициализация сервиса фронтальной машины), при этом на всех экземплярах нужно указать одинаковое имя учетной записи администратора ПК СВ;
  • ни на одном из серверов не развернут сервис apache2 в режиме "AstraMode off";
  • выделен IP-адрес для настройки плавающего IP-адреса кластера;
  • настроен беспарольный доступ для пользователя root между всеми экземплярами фронтальной машины;

  • настроено общее облачное хранилище для образов дисков и файлов.

Настройка беспарольного доступа для пользователя root

Чтобы настроить беспарольный доступ для пользователя root, необходимо выполнить действия, описанные ниже.

  1. На каждом экземпляре фронтальной машины создать SSH-ключ от имени пользователя root командой:

    sudo ssh-keygen
    Для всех параметров оставлять значения по умолчанию (сразу нажимать клавишу <Enter>).

  2. На каждом экземпляре фронтальной машины выполнить обмен ключами с помощью команд:

    KEY=$(sudo cat /root/.ssh/id_rsa.pub)

    ssh <local-admin>@<front-1-hostname> \

    "sudo bash -c \"echo $KEY >> /root/.ssh/authorized_keys\""

    ssh <local-admin>@<front-2-hostname> \

    "sudo bash -c \"echo $KEY >> /root/.ssh/authorized_keys\""

    ...

    ssh <local-admin>@<front-N-hostname> \

    "sudo bash -c \"echo $KEY >> /root/.ssh/authorized_keys\""

     где:

      • <front- N-hostname> – имя (hostname) N-го экземпляра фронтальной машины. Допускается вместо имен указывать IP-адреса;

      • <local-admin> – имя локального администратора сервера, заданное при установке ОС.

    При появлении приглашения для ввода вида:

    Are you sure you want to continue connecting (yes/no)?
    CODE

    ввести yes и нажать клавишу <Enter>. Затем ввести пароль локального администратора сервера, заданный при установке ОС.

    В том числе необходимо выполнить обмен ключами "сам на себя".

  3. Проверить обмен ключами, для этого в терминале первого экземпляра фронтальной машины:

    1. выполнить вход по SSH на другой экземпляр командой:

      sudo ssh <front-N-hostname>
      где <front- N-hostname> – имя (hostname) N-го экземпляра фронтальной машины. Допускается вместо имен указывать IP-адреса;

    2. не завершая сессию выполнить вход по SSH на первый экземпляр командой:

      sudo ssh <front-1-hostname>

      Настройка считается успешно завершенной, если после выполнения команды был осуществлен вход без пароля.

  4. Последовательно закрыть сессии SSH командами:

    exit

    exit

  5. Аналогичным образом проверить беспарольный доступ на других экземплярах фронтальной машины.

Настройка зоны объединения экземпляров фронтальных машин

Для автоматической настройки можно воспользоваться скриптом brestcloud-raft-configure, который запускается на одной из фронтальных машин от имени администратора командой:

sudo brestcloud-raft-configure
В процессе работы мастера настройки объединения экземпляров фронтальных машин необходимо выполнить действия, описанные ниже.

  1. Указать количество экземпляров фронтальных машин.
  2. Указать сетевой интерфейс, на который будет назначен плавающий IP-адрес (обычно указывается интерфейс, на котором настроен статический IP-адрес).
  3. Указать плавающий IP-адрес.
  4. Последовательно указать короткие доменные имена экземпляров фронтальных машин.
  5. Указать короткое плавающее имя (эта A-запись будет зафиксирована в DNS FreeIPA).

После завершения работы мастера настройки объединения экземпляров фронтальных машин необходимо выполнить настройку браузера Mozilla Firefox для подключения к веб-интерфейсу ПК СВ в соответствии со статьей Настройка браузера Mozilla Firefox и подключение к веб-интерфейсу ПК СВ.

Вывод из зоны объединения экземпляра фронтальной машины

Для вывода из зоны объединения экземпляра фронтальной машины (ноды) необходимо на лидере выполнить команду:

sudo onezone server-del <идентификатор_зоны> <идентификатор_удаляемого_экземпляра>

Ввод экземпляра фронтальной машины в зону объединения

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

  1. На новом сервере установить и настроить сервис фронтальной машины (см. Установка и инициализация сервиса фронтальной машины), при этом нужно указать существующее имя учетной записи администратора ПК СВ.

  2.  На новом сервере удостовериться в том, что сервер находится в одиночном режиме, выполнив команду:

    sudo onezone show 0
    Пример вывода после выполнения команды:

    ZONE 0 INFORMATION
    ID : 0
    NAME : OpenNebula
    
    ZONE TEMPLATE
    ENDPOINT="http://localhost:2633/RPC2"
    CODE
  3. На новом сервере настроить беспарольный доступ для пользователя root на все и со всех экземпляров фронтальной машины.
  4. На лидере сделать резервную копию базы и скопировать на новый сервер командами:

    sudo onedb backup /tmp/db.backup -f -t postgresql -S localhost -u oneadmin -p "<пароль_БД_лидера>" -d opennebula
    sudo scp /tmp/db.backup <new-front-hostname>:/tmp
    где:

    • <пароль_БД_лидера> – взят из файла /etc/one/one.d/db.conf;

    • <new-front-hostname> – имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.

  5. На новом сервере остановить сервис opennebula и восстановить БД из резервной копии командами:

    sudo systemctl stop opennebula
    sudo onedb restore -f /tmp/db.backup -t postgresql -S localhost -u oneadmin -p "<пароль_БД_нового_сервера>" -d opennebula
    где <пароль_БД_нового_сервера> – взят из файла /etc/one/one.d/db.conf.

  6.  На лидере выполнить команду копирования директории .one на новый сервер.

    sudo scp -r /var/lib/one/.one/ <new-front-hostname>:/var/lib/one/
    где <new-front-hostname> – имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.

  7. На лидере добавить новый сервер командой:

    sudo onezone server-add <идентификатор_зоны> --name <полное_доменное_имя_нового_сервера> --rpc http://<полное_доменное_имя_нового_сервера>:2633/RPC2

  8.  На лидере выполнить команду копирования файла конфигурации raft на новый сервер.

    sudo scp /etc/one/one.d/raft.conf <new-front-hostname>:/etc/one/one.d/
    где <new-front-hostname> – имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.

  9. На новом сервере получить значение идентификатора сервера (ID), выполнив команду:

    sudo onezone show 0

  10. На новом сервере скорректировать параметр FEDERATION[SERVER_ID] в файле /etc/one/one.d/raft.conf, указав идентификатор нового сервера.

  11. На новом сервере запустить сервис opennebula и перезапустить сервис веб-интерфейса командами:

    sudo systemctl start opennebula
    sudo systemctl restart opennebula-sunstone

  12. На лидере выполнить команду копирования сертификата короткого плавающего имени на новый сервер.

    sudo scp /etc/one/ssl/<короткое_плавающее_имя>.* <new-front-hostname>:/etc/one/ssl/
    где <new-front-hostname> – имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.

  13. На лидере выполнить команду копирования файлов конфигурации apache на новый сервер.

    sudo scp /etc/apache2/sites-available/ipa-one-apache2-float.conf <new-front-hostname>:/etc/apache2/sites-available/
    sudo scp /etc/apache2/apache2.<короткое_плавающее_имя>.keytab <new-front-hostname>:/etc/apache2/
    где <new-front-hostname> – имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.

  14. На новом сервере применить файлы конфигурации apache командами:

    sudo ktutil << EOF
    rkt /etc/apache2/apache2.<короткое_плавающее_имя>.keytab
    wkt /etc/apache2/apache2.keytab
    q
    EOF
    sudo a2ensite ipa-one-apache2-float.conf
    sudo systemctl restart apache2

  15. Проверить корректность новой конфигурации командой:

    sudo onezone show 0