Алгоритм Raft#
Общие сведения#
Для обеспечения отказоустойчивости сервиса фронтальной машины в ПВ применяется технология Raft. Алгоритм Raft позволяет объединять несколько экземпляров фронтальной машины в зону, конфигурацию которой можно менять (добавлять и удалять экземпляры фронтальной машины), не прерывая работу ПВ. Для этой зоны выделяется плавающий (способный при необходимости переходить от одного экземпляра к другому) IP-адрес. Из доступных экземпляров выбирается лидер, которому присваивается ранее выделенный IP-адрес. Лидер обслуживает все входящие запросы. Все изменения на лидере синхронизируются с остальными экземплярами фронтальной машины в зоне. Если работа лидера прерывается на 100 миллисекунд, то выбирается новый лидер из числа исправных экземпляров. Выделенный для зоны IP-адрес присваивается новому лидеру. Таким образом обеспечивается высокая доступность фронтальной машины.
Для работы Raft должны быть соблюдены следующие требования:
Настроено нечетное количество (рекомендуется 3 или 5) экземпляров фронтальной машины, при этом на всех экземплярах нужно указать одинаковое имя учетной записи администратора ПВ.
Ни на одном из экземпляров не развернут сервис
apache2в режиме «AstraMode off».Выделен IP для настройки плавающего IP-адреса кластера.
Настроен беспарольный доступ для пользователя
rootмежду всеми экземплярами фронтальной машины.Настроено общее облачное хранилище для образов дисков и файлов.
Чтобы настроить беспарольный доступ для пользователя root необходимо выполнить следующие действия:
На каждом экземпляре фронтальной машины создать ssh-ключ от имени пользователя
rootкомандой:
sudo ssh-keygen.
Для всех параметров оставлять значения по умолчанию (сразу нажимать клавишу Enter).
На каждом экземпляре фронтальной машины выполнить обмен ключами командами:
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`. Вести пароль локального администратора сервера, заданный при установке ОС.
Проверить обмен ключами, для этого:
в терминале первого экземпляра фронтальной машины выполнить вход по ssh на другой экземпляр командой:
sudo ssh <front-N-hostname>
выполнить вход по ssh на первый экземпляр фронтальной машины командой:
sudo ssh <front-1-hostname>
где <front-N-hostname> — имя (hostname) N-го экземпляра фронтальной машины. Допускается вместо имен указывать IP-адреса.
Настройка считается успешно завершенной, если после выполнения команды был осуществлен вход без пароля.
последовательно закрыть сессии ssh командами:
exit exit
Аналогичным образом проверить беспарольный доступ на остальных экземплярах фронтальной машины.
Настройка зоны объединения экземпляров фронтальных машин#
Для автоматической настройки зоны, объединяющей несколько экземпляров фронтальной машины, можно воспользоваться скриптом brestcloud-raft-configure, который запускается на одной из фронтальных машин от имени администратора командой:
sudo brestcloud-raft-configure
В процессе работы мастера настройки объединения экземпляров фронтальных машин необходимо:
Указать количество экземпляров фронтальных машин.
Указать сетевой интерфейс, на который будет назначен плавающий IP-адрес (обычно указывается интерфейс, на котором настроен статический IP-адрес).
Указать плавающий IP-адрес.
Последовательно указать полные доменные имена экземпляров фронтальных машин.
Указать короткое плавающее имя (эта A-запись будет зафиксирована в DNS FreeIPA).
После завершения работы мастера настройки объединения экземпляров фронтальных машин необходимо выполнить настройку браузера Mozilla Firefox для подключения к веб-интерфейсу ПВ.
Вывод из зоны объединения экземпляра фронтальной машины#
Для вывода из зоны объединения экземпляра фронтальной машины (ноды) необходимо на лидере выполнить команду:
sudo onezone server-del <идентификатор_зоны> <идентификатор_удаляемого_экземпляра>
Ввод экземпляра фронтальной машины в зону объединения#
Для ввода экземпляра фронтальной машины в зону объединения необходимо выполнить следующие действия: 1. На новом сервере установить и настроить сервис фронтальной машины, при этом нужно указать существующее имя учетной записи администратора ПВ, проверить, что сервер находится в одиночном режиме командой:
sudo onezone show 0
Пример вывода после выполнения команды:
*ZONE 0 INFORMATION *
ID : 0
NAME : OpenNebula
ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"
На новом сервере настроить беспарольный доступ для пользователя
rootна все и со всех экземпляров фронтальной машины.На лидере сделать бекап базы и скопировать на новый сервер командами:
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-адреса.
На новом сервере остановить службу Брест и восстановить БД командами:
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.
На лидере скопировать директорию
.oneна новый сервер командой:
sudo scp -r /var/lib/one/.one/ <new-front-hostname>:/var/lib/one/
где <new-front-hostname> — имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.
На лидере добавить новый сервер командой:
sudo onezone server-add <идентификатор_зоны> --name <полное_доменное_имя_нового_сервера> --rpc \ http://<полное_доменное_имя_нового_сервера>:2633/RPC2
С лидера скопировать файл конфигурации raft на новый сервер командой:
sudo scp /etc/one/one.d/raft.conf <new-front-hostname>:/etc/one/one.d/
где <new-front-hostname> — имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.
На новом сервере скорректировать параметр
FEDERATION[SERVER_ID]в файле/etc/one/one.d/raft.conf, указав<идентификатор_нового_сервера>. Значение параметра<идентификатор_нового_сервера>(ID) можно получить, выполнив команду:
sudo onezone show 0
На новом сервере запустить службу Брест и перезапустить сервис веб-интерфейса командами:
sudo systemctl start opennebula sudo systemctl restart opennebula-sunstone
С лидера скопировать сертификаты короткого плавающего имени командой:
sudo scp /etc/one/ssl/<короткое_плавающее_имя>.* <new-front-hostname>:/etc/one/ssl/
где <new-front-hostname> — имя (hostname) нового сервера. Допускается вместо имен указывать IP-адреса.
С лидера скопировать файлы конфигурации 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-адреса.
На новом сервере применить файлы конфигурации 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
Проверить корректность новой конфигурации командой:
sudo onezone show 0