RAFT
Введение
Облачные сервисы ПК СВ "Брест" имеют встроенный механизм обеспечения отказоустойчивости высокой доступности. Для его задействования разворачивается нечетное количество экземпляров Front-end, которые взаимодействуя между собой по алгоритму RAFT, обеспечивают доступность сервисов управления облаком при отказе менее половины узлов.
Узлы, взаимодействуя по алгоритму RAFT, определяют лидера, который обслуживает все входящие запросы, для чего выделяется "плавающий" (переходящий от узла к узлу) IP-адрес. Каждый узел имеет свой экземпляр БД, который реплицируется сервисами, обслуживающими облако.
Требования
- Настроен по крайней мере 1 контроллер домена FreeIPA.
- Настроена Фронтальная машина облака (далее — Первый узел).
- Имеется дополнительно 2N узлов, настроенных в соответствии с Установка ОС (далее — Второй и последующие узлы).
- Ни на одном узле не развернут сервис apache2 в режиме "AstraMode off".
- Выделен ip для настройки плавающего адреса.
Подготовка узлов
Все действия в инструкции выполняются от имени суперпользователя с высокой целостностью. Действия данного раздела необходимо выполнять на Втором и последующих узлах.
Если установка ведется на выделенных для этой роли серверах, потребуется обмен SSH-ключами учетной записи root между ними. Этого не требуется, если установка ведется на узлах виртуализации.
Выполнить:
Затем перейти на каждый уже настроенный узел и выполнить на нем:
Здесь <hostname>
— имя текущего узла, на котором выполняется данная инструкция.
Настройка RAFT
Настроить отказоустойчивость облачных сервисов.
Создание зоны
На Первом узле выполнить:
Проверить добавление узла в зону:
Включение RAFT
Остановить сервисы на Первом узле:
CODEУказать идентификатор сервера в зоне в файле
/etc/one/oned.conf
на Первом узле:CODEВ этом же файле активировать Raft-hooks для того, чтобы добавить плавающий адрес в кластер на Первом узле:
CODE<interface>
— имя интерфейса, на котором будет активироваться плавающий адрес;<floating-ip>
— плавающий IP-адрес;<netmask>
— маска сети, заданная числом от 0 до 32.Далее запустить сервисы:
CODEПроверить зону и наличие плавающего адреса:
CODE
Перенос данных на Второй и последующие узлы
На Первом узле сохранить БД:
CODEСкопировать БД на Второй и последующие узлы:
CODEОстановить службы на Втором и последующих узлах:
CODEЗаменить аутентификационные файлы:
CODEВосстановить на Втором и последующих узлах БД:
Если в команде
pg_restore
не используется ключ--if-exists
и какие-либо объекты не присутствуют в целевой БД, это может привести к появлению сообщений об ошибках (не критичных).CODE
Добавление Второго и последующих узлов
Добавлять новые узлы в зону по одному. Для этого на Первом узле выполнить:
CODEПроверить назначенный узлу идентификатор ID:
CODEВ данном примере узлу
<front-2-hostname>.<domain>
был назначенID=1
.Перейти на добавляемый узел и обновить конфигурацию:
/etc/one/oned.conf
CODEВключить hook:
/etc/one/oned.conf
CODEгде
<interface>
— имя интерфейса, на котором будет активироваться плавающий адрес;<floating-ip>
— плавающий IP-адрес;<netmask>
— маска сети, заданная числом от 0 до 32.Запустить сервисы:
CODEПосле этого вернуться на Первый узел и проверить статус зоны:
CODE- Повторить все действия данного пункта для следующего узла.
Настройка веб-сервисов
Далее необходимо настроить на первом узле RAFT веб-серверы для корректной работы с плавающим IP.
Требуется создать самоподписанный сертификат для плавающего адреса (
<floating-name>.<domain>
):CODEВвести:
CODEПросмотреть сертификат:
CODEСкопировать сертификат и ключ для плавающего имени с первого на все остальные узлы RAFT:
CODECODE
Настройка Apache2
На каждом узле RAFT необходимо создать дополнительный конфигурационный файл веб-сервера Apache2 для использования плавающего имени.
Для этого необходимо скопировать файл
/etc/apache2/sites-available/000-default.conf
в тот же каталог и присвоить имя —001-default.conf
, его содержимое отредактировать, заменив FQDN на плавающий, а также расположение сертификата для плавающего имени. Ниже приведен пример настройки файла:Добавить созданную конфигурацию в действующие конфигурации командой:
CODEСохранить изменения и протестировать конфигурацию Apache. Протестировать конфигурацию на наличие различных синтаксических ошибок, иначе веб-сервер не запустится:
CODEПерезапустить
apache2.service
:CODE- Повторить действия данного пункта для следующих узлов RAFT.
Получение билетов
- Получить необходимые kerberos-билеты, для чего перейти по одной из ссылок: Настройки для FreeIPA или Настройки для ALD.
После получения билетов вызвать утилиту на каждом из участников RAFT по очереди:
CODEОбъединить с ее помощью билеты:
CODEПоменять владельца и права на полученный файл:
CODEПосле всех настроек перезапустить сервис:
CODE- Узел настроен. Далее повторить все действия данного пункта для следующего узла.
Проверка
Для проверки работы отказоустойчивости необходимо проделать следующие шаги:
№ | Действие | Ожидаемый результат |
---|---|---|
1 | Войти в доменную машину с учетной записью brestadmin | Пользователь авторизован в ОС. |
2 | Перейти по адресу http://<floating-ip>.<domain> | Отображается окно входа в систему управления облаком. |
3 | Нажать кнопку Login | Пользователь авторизован. |
4 | Подключиться по ssh к любому узлу кластера и проверить, какой узел является лидером с помощью командыsudo onezone show 0 | Отображается информация о зоне. Имеется один узел в состоянии leader , остальные узлы в состоянии follower . |
5 | Физически выключить узел, являющийся лидером | - |
6 | Подключиться по ssh к любому узлу кластера и проверить, какой узел является лидером с помощью команды | Отображается информация о зоне. Имеется один узел в состоянии leader , один узел в состоянии error , остальные узлы в состоянии follower . При отключении узла (leader ) состояние других узлов (follower ) будет candidate . Спустя некоторое время определяется leader , остальные переходят в статус follower . |
7 | Перейти по ssh на узел, являющийся лидером | - |
8 | Проверить наличие плавающего IP-адреса командой | В информации об интерфейсах присутствует плавающий IP. |
9 | Вернуться в браузер и обновить страницу | Отображается окно входа в систему управления облаком. |
10 | Нажать кнопку Login | Пользователь авторизован. |
11 | Включить отключенный узел | - |
12 | Убедиться, что узел вернулся в кластер командной | Отображается информация о зоне. Имеется один узел в состоянии leader , остальные узлы в состоянии follower . |
Важно
После выполнения данной инструкций вернитесь на предыдущую статью.