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>
– имя локального администратора сервера, заданное при установке ОС.
При появлении приглашения для ввода вида:
Are you sure you want to continue connecting (yes/no)?
CODEввести
yes
и нажать клавишу <Enter>. Затем ввести пароль локального администратора сервера, заданный при установке ОС.В том числе необходимо выполнить обмен ключами "сам на себя".
Проверить обмен ключами, для этого в терминале первого экземпляра фронтальной машины:
выполнить вход по 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 для подключения к веб-интерфейсу ПК СВ в соответствии со статьей Настройка браузера Mozilla Firefox и подключение к веб-интерфейсу ПК СВ.
Вывод из зоны объединения экземпляра фронтальной машины
Для вывода из зоны объединения экземпляра фронтальной машины (ноды) необходимо на лидере выполнить команду:
Ввод экземпляра фронтальной машины в зону объединения
Для ввода экземпляра фронтальной машины в зону объединения необходимо выполнить действия, описанные ниже.
На новом сервере установить и настроить сервис фронтальной машины (см. Установка и инициализация сервиса фронтальной машины), при этом нужно указать существующее имя учетной записи администратора ПК СВ.
На новом сервере удостовериться в том, что сервер находится в одиночном режиме, выполнив команду:
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 opennebulaгде:
sudo scp /tmp/db.backup <new-front-hostname>:/tmp<пароль_БД_лидера>
– взят из файла/etc/one/one.d/db.conf
;<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 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-адреса.На новом сервере получить значение идентификатора сервера
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