Алгоритм 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-адреса.
На новом сервере управления остановить службу Брест и восстановить БД командами:
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