Алгоритм Raft#
Общие сведения#
Для обеспечения отказоустойчивости сервера управления в ПВ применяется технология Raft. Под термином «сервер управления» подразумевается компьютер, на котором установлена и инициализирована служба сервера управления.
Предупреждение
Поддержка технологии Raft реализована только в дискреционном режиме функционирования ПВ.
Алгоритм Raft позволяет объединять несколько экземпляров сервера управления в зону, конфигурацию которой можно менять (добавлять и удалять экземпляры сервера управления), не прерывая работу ПВ. Для этой зоны выделяется плавающий (способный при необходимости переходить от одного экземпляра к другому) IP-адрес. Из доступных экземпляров выбирается лидер, которому присваивается ранее выделенный IP-адрес. Лидер обслуживает все входящие запросы. Все изменения на лидере синхронизируются с остальными экземплярами сервера управления в зоне. Если работа лидера прерывается на 100 миллисекунд, то выбирается новый лидер из числа исправных экземпляров. Выделенный для зоны IP-адрес присваивается новому лидеру. Таким образом обеспечивается высокая доступность сервера управления.
Для работы Raft должны быть соблюдены следующие требования:
Настроен по крайней мере один контроллер домена.
Настроено нечетное количество (рекомендуется 3 или 5) экземпляров сервера управления, при этом на всех экземплярах нужно указать одинаковое имя учетной записи администратора ПВ.
Ни на одном из экземпляров не развернута служба
apache2
в режиме «AstraMode off».Выделен IP для настройки плавающего IP-адреса кластера.
Настроен беспарольный доступ для пользователя
root
между всеми экземплярами сервера управления.Настроено общее облачное хранилище для образов дисков и файлов.
Настройка беспарольного доступа для пользователя 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-адрес.
Последовательно указать сетевые имена экземпляров серверов управления.
После завершения работы мастера настройки объединения экземпляров серверов управления необходимо выполнить настройку браузера 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"
На новом сервере управления настроить беспарольный доступ для пользователя
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 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
.
На лидере скопировать директорию
.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-адреса.
На новом сервере управления в файле
/etc/one/one.d/raft.conf
скорректировать значение параметраSERVER_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