Download PDF
Download page Алгоритм отказоустойчивости (Raft).
Алгоритм отказоустойчивости (Raft)
Общие сведения
Для обеспечения отказоустойчивости сервера управления в ПК СВ применяется технология Raft. Под термином «сервер управления» подразумевается компьютер, на котором установлена и инициализирована служба сервера управления.
Поддержка технологии Raft реализована только в дискреционном режиме функционирования ПК СВ.
Алгоритм Raft позволяет объединять несколько экземпляров сервера управления в зону, конфигурацию которой можно менять (добавлять и удалять экземпляры сервера управления), не прерывая работу ПК СВ. Для этой зоны выделяется плавающий (способный при необходимости переходить от одного экземпляра к другому) IP-адрес. Из доступных экземпляров выбирается лидер, которому присваивается ранее выделенный IP-адрес. Лидер обслуживает все входящие запросы.
Все изменения на лидере синхронизируются с остальными экземплярами сервера управления в зоне. Если работа лидера прерывается более чем на 500 миллисекунд, то выбирается новый лидер из числа исправных экземпляров. Выделенный для зоны 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>
– имя локального администратора компьютера с ролью N-го экземпляра сервера управления, заданное при установке ОС.
При появлении приглашения для ввода вида:
Are you sure you want to continue connecting (yes/no)?
CODEввести
yes
и нажать клавишу <Enter>. Затем ввести пароль локального администратора компьютера с ролью N-го экземпляра сервера управления, заданный при установке ОС.В том числе необходимо выполнить обмен ключами "сам на себя".
Проверить обмен ключами, для этого в терминале первого экземпляра сервера управления:
выполнить вход по SSH на другой экземпляр командой:
sudo ssh <front-N-hostname>где<front-
N-hostname>
– сетевое имя (hostname) N-го экземпляра сервера управления. Допускается вместо имен указывать IP-адреса;не завершая сессию выполнить вход по SSH на первый экземпляр командой:
sudo ssh <front-1-hostname>Настройка считается успешно завершенной, если после выполнения команды был осуществлен вход без пароля.
Последовательно закрыть сессии SSH командами:
exit
exit
- Аналогичным образом проверить беспарольный доступ на других экземплярах сервера управления.
Настройка зоны объединения экземпляров фронтальных машин
Для автоматической настройки можно воспользоваться скриптом brestcloud-raft-configure
, который запускается на одном из экземпляров сервера управления от имени администратора командой:
- Указать количество экземпляров сервера управления.
- Указать сетевой интерфейс, на который будет назначен плавающий IP-адрес. Обычно указывается интерфейс, на котором настроен статический IP-адрес.
- Указать плавающий IP-адрес.
- Последовательно указать сетевые имена экземпляров сервера управления.
- Указать короткое плавающее имя (эта A-запись будет зафиксирована в DNS FreeIPA).
После завершения работы мастера настройки объединения экземпляров сервера управления необходимо выполнить настройку браузера Mozilla Firefox для подключения к веб-интерфейсу ПК СВ.
Вывод из зоны объединения экземпляра сервера управления
Для вывода из зоны объединения экземпляра сервера управления необходимо выполнить действия, описанные ниже:
На лидере выполнить команду:
sudo onezone server-del <идентификатор_зоны> <идентификатор_удаляемого_экземпляра>где<идентификатор_удаляемого_экземпляра>
— идентификатора сервераОтключить на удаляемом сервере службы
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-адреса.
Ввод экземпляра сервера управления в зону объединения
Для ввода экземпляра сервера управления в зону объединения необходимо выполнить действия, описанные ниже.
На новом компьютере установить и инициализировать службу сервера управления, при этом нужно указать существующее имя учетной записи администратора ПК СВ.
На новом компьютере удостовериться в том, что сервер находится в одиночном режиме, выполнив команду:
sudo onezone show 0Пример вывода после выполнения команды:ZONE 0 INFORMATION ID : 0 NAME : OpenNebula ZONE TEMPLATE ENDPOINT="http://localhost:2633/RPC2"
CODE- На новом компьютере настроить беспарольный доступ для пользователя
root
на все и со всех экземпляров сервера управления. На лидере сделать резервную копию базы командой:
sudo onedb backup /tmp/db.backup -f -t postgresql -S localhost -u oneadmin -p "<пароль_БД_лидера>" -d brestгде значение параметра<пароль_БД_лидера>
соответствует значению параметра PASSWD, указанному в файле/etc/one/one.d/db.conf
.Скопировать резервную копию базы на новый экземпляр. Для этого на лидере выполнить команду:
sudo scp /tmp/db.backup <new-front-hostname>:/tmpгде<new-front-hostname>
– сетевое имя (hostname) нового экземпляра. Допускается вместо имен указывать IP-адреса.На новом экземпляре остановить службу
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
.На лидере выполнить команду копирования директории
.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-адреса.На новом экземпляре получить значение идентификатора сервера
sudo onezone show 0На новом экземпляре скорректировать параметр
FEDERATION[SERVER_ID]
в файле/etc/one/one.d/raft.conf
, указав идентификатор нового сервера.На новом экземпляре запустить службу
opennebula
и перезапустить службу веб-интерфейса командами: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