Алгоритм Raft#

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

Для обеспечения отказоустойчивости сервера управления в ПВ применяется технология Raft. Под термином «сервер управления» подразумевается компьютер, на котором установлена и инициализирована служба сервера управления.

Предупреждение

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

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

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

  1. Настроен по крайней мере один контроллер домена.

  2. Настроено нечетное количество (рекомендуется 3 или 5) экземпляров сервера управления, при этом на всех экземплярах нужно указать одинаковое имя учетной записи администратора ПВ.

  3. Ни на одном из экземпляров не развернута служба apache2 в режиме «AstraMode off».

  4. Выделен IP для настройки плавающего IP-адреса кластера.

  5. Настроен беспарольный доступ для пользователя root между всеми экземплярами сервера управления.

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

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

Чтобы настроить беспарольный доступ для пользователя root необходимо выполнить следующие действия:

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

sudo ssh-keygen.

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

  1. На каждом экземпляре сервера управления выполнить обмен ключами командами:

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)?

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

  1. Проверить обмен ключами, для этого:

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

sudo ssh <front-N-hostname>
  1. выполнить вход по ssh на первый экземпляр сервера управления командой:

sudo ssh <front-1-hostname>

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

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

  1. последовательно закрыть сессии ssh командами:

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

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

Для автоматической настройки зоны, объединяющей несколько экземпляров серверов управления, можно воспользоваться скриптом brestcloud-raft-configure, который запускается на одном из серверов управления от имени администратора командой:

sudo brestcloud-raft-configure

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

  1. Указать количество экземпляров серверов управления.

  2. Указать сетевой интерфейс, на который будет назначен плавающий IP-адрес (обычно указывается интерфейс, на котором настроен статический IP-адрес).

  3. Указать плавающий IP-адрес.

  4. Последовательно указать сетевые имена экземпляров серверов управления.

После завершения работы мастера настройки объединения экземпляров серверов управления необходимо выполнить настройку браузера 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"
  1. На новом сервере управления настроить беспарольный доступ для пользователя root на все и со всех экземпляров сервера управления.

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

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-адреса.

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

sudo scp /tmp/db.backup <new-front-hostname>:/tmp

где <new-front-hostname> — сетевое имя нового сервера управления. Допускается вместо сетевых имен указывать IP-адреса. 6. На новом сервере управления остановить службу Брест и восстановить БД командами:

sudo systemctl stop opennebula sudo onedb restore -f /tmp/db.backup -t postgresql -S localhost -u oneadmin -p "<пароль_БД_нового_сервера>" -d opennebula

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

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

sudo scp -r /var/lib/one/.one/ <new-front-hostname>:/var/lib/one/

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

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

sudo onezone server-add <идентификатор_зоны> --name <полное_доменное_имя_нового_сервера> --rpc \ http://<полное_доменное_имя_нового_сервера>:2633/RPC2
  1. С лидера скопировать файл конфигурации raft на новый сервер управления командой:

sudo scp /etc/one/one.d/raft.conf <new-front-hostname>:/etc/one/one.d/

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

  1. На новом сервере управления в файле /etc/one/one.d/raft.conf скорректировать значение параметра SERVER_ID (идентификатор нового сервера). Идентификатор нового сервера можно получить, выполнив команду:

sudo onezone show 0
  1. На новом сервере управления запустить службу Брест и перезапустить сервис веб-интерфейса командами:

sudo systemctl start opennebula sudo systemctl restart opennebula-sunstone
  1. С лидера скопировать сертификаты короткого плавающего имени командой:

sudo scp /etc/one/ssl/<короткое_плавающее_имя>.* <new-front-hostname>:/etc/one/ssl/

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

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

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

sudo onezone show 0