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

Для обеспечения отказоустойчивости сервера управления в ПК СВ применяется технология 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> – имя локального администратора компьютера с ролью N-го экземпляра сервера управления, заданное при установке ОС.

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

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

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

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

  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 для подключения к веб-интерфейсу ПК СВ.

Вывод из зоны объединения экземпляра сервера управления

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

  1. На лидере выполнить команду:

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

  2. Отключить на удаляемом сервере службы opennebula и opennebula-sunstone, для этого на лидере выполнить команды:

    sudo ssh <front_hostname> "systemctl stop opennebula opennebula-sunstone"
    sudo ssh <front_hostname> "systemctl disable opennebula opennebula-sunstone"
    где <front_hostname> – сетевое имя (hostname) удаляемого экземпляра. Допускается вместо имени указывать IP-адреса.

Ввод экземпляра сервера управления в зону объединения

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

  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 brest
    где значение параметра <пароль_БД_лидера> соответствует значению параметра PASSWD, указанному в файле /etc/one/one.d/db.conf.

  5. Скопировать резервную копию базы на новый экземпляр. Для этого на лидере выполнить команду:

    sudo scp /tmp/db.backup <new-front-hostname>:/tmp
    где <new-front-hostname> – сетевое имя (hostname) нового экземпляра. Допускается вместо имен указывать IP-адреса.

  6. На новом экземпляре остановить службу opennebula и восстановить БД из резервной копии командами:

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

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

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

  8. На лидере добавить новый экземпляр командой:

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

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

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

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

    sudo onezone show 0

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

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

    sudo systemctl start opennebula
    sudo systemctl restart opennebula-sunstone

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

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

  14. На лидере выполнить команды копирования файлов конфигурации 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-адреса.

  15. На новом экземпляре применить файлы конфигурации 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

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

    sudo onezone show 0