В данной статье приведено описание развертывания кластерного исполнения AxelNAC с помощью утилиты Ansible.
Как работает кластерное исполнение AxelNAC
Кластерное исполнение AxelNAC может состоять из нечетного количества узлов и представляет собой отказоустойчивый кластер. Отказоустойчивые кластеры — это группы серверов, которые спроектированы в соответствии с методиками обеспечения высокой доступности и которые гарантируют работу кластера в целом при отказе одного или нескольких его узлов. Без кластеризации, если сервер, на котором запущен AxelNAC, выходит из строя, система будет недоступна до тех пор, пока не будет устранена неполадка на сервере. Отказоустойчивый кластер исправляет эту ситуацию, обнаруживая аппаратные и программные сбои и немедленно перенаправляя трафик на другие узлы, не требуя вмешательства администратора. Кластер AxelNAC может содержать до девяти узлов в разных L2-сегментах, такой кластер называется катастрофоустойчивым.
Кластер AxelNAC может содержать от 3 до 9 узлов.
Данный кластер работает по принципу active/active, т.е. один или несколько узлов выступают в качестве балансировщика, который осуществляет прием и распределение запросов между собой и оставшимися узлами кластера. В случае выхода из строя сервера, он исключается из балансировки. В случае выхода из строя узла, выполняющего роль балансировщика, эта роль и кластерный адрес передаются другому узлу кластера.
Кластер AxelNAC будет сохранять полную работоспособность при соблюдении обязательного кворума — более 50% узлов кластера должны быть доступны. При потере кворума, AxelNAC сохраняет частичную работоспособность:
Аутентификация RADIUS MAC: продолжит работу и будет возвращать атрибуты RADIUS, связанные с ролью, зарегистрированной в базе данных. Если к этому устройству можно применить фильтры VLAN или RADIUS, они будут применены, но любое изменение роли не будет сохранено;
RADIUS 802.1X: продолжит работу, и если включена функция «Перерасчет роли Dot1x с портала», она будет вычислять роль с использованием доступных источников аутентификации, но не будет сохранять ее в базе данных в конце запроса. Если этот параметр отключен, он будет вести себя так же, как аутентификация по MAC-адресу. Фильтры VLAN и RADIUS по-прежнему будут применяться к подключениям, но любое изменение роли не будет сохранено. Если какие-либо из ваших источников аутентификации являются внешними (LDAP, AD, RADIUS, …), они должны быть доступны для успешного выполнения запроса;
Captive-портал: Работа портала будет остановлена. Для пользователей будет отображено сообщение о том, что система в настоящее время наблюдаются неполадки.
Прослушиватели DHCP: Прослушиватели DHCP будут отключены, входящие DHCP-пакеты не будут сохраняться в базе данных. Firewall SSO также будет отключен.
Веб-интерфейс AxelNAC: по-прежнему будет доступен в режиме только для чтения для всех разделов и в режиме чтения-записи для раздела конфигурации.
Для реализации данного способа вам потребуется нечетное количество установленных серверов AxelNAC (от трех до девяти). Серверы должны быть расположены в пределах следующих ограничений задержки (требование для MariaDB Galera):
для небольших развертываний (от трех до пяти узлов) между узлами кластера допускается задержка не более 75 мс;
для больших развертываний (семь узлов) допускается задержка между узлами кластера не более 50 мс.
Подготовка к развертыванию кластерного исполнения
Для того, чтобы произвести автоматическое развертывание кластерного исполнения AxelNAC, необходимо выполнить следующие подготовительные этапы:
Первичная настройка сетевого интерфейса на узлах
Для начала развертывания кластера необходимо настроить сетевые интерфейсы на каждом из узлов. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к узлу через платформу виртуализации и задайте адрес на сетевом интерфейсе:
nano /etc/network/interfaces
Шаг 2. Измените файл конфигурации на каждом узле по данному примеру:
Шаг 3. Для применения конфигурации перезапустите службу сети, используя следующую команду:
systemctl restart networking
Предварительная настройка мастер-узла AxelNAC
Для следующего этапа необходимо сконфигурировать мастер-узел. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к узлу по адресу https://<ip-address>:1443 — откроется веб-конфигуратор AxelNAC.
Шаг 2. Выберите интерфейс, который будет использоваться для управления. На странице его настройки в поле Тип выберите значение Управление и переместите переключатель Высокая доступность в состояние включено.
Шаг 3. Пройдите все оставшиеся этапы настройки в веб-конфигураторе.
Предварительная настройка ведомых узлов AxelNAC
После того как мастер-узел предварительно сконфигурирован, можно приступить к преднастройке ведомых узлов кластера. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к ведомому узлу по адресу https://<ip-address>:1443 — откроется веб-конфигуратор AxelNAC.
Шаг 2. Выберите интерфейс, который будет использоваться для управления. На странице его настройки в поле Тип выберите значение Управление и переместите переключатель Высокая доступность в состояние включено.
Установка и конфигурация утилиты Ansible
Для того, чтобы автоматизировать настройку кластера, необходимо установить утилиту Ansible на виртуальную машину с сетевым доступом ко всем узлам, которая не будет использоваться в кластере и сконфигурировать ее:
Шаг 1. В интерфейсе командной строки выполните следующую команду:
apt install ansible
Шаг 2. Обозначьте переменную конфигурации для совместимости с предустановленным в AxelNAC плейбуком, введя следующую команду:
export ANSIBLE_CONFIG=ansible.cfg
Инструменты для развертывания кластерного исполнения
Все инструменты для развертывания кластерного исполнения расположены в директории /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools:
create-cl.yml — плейбук (набор скриптов) для сборки кластера из готовых узлов AxelNAC;
create-local-upgrade.sh — скрипт для создания docker-anac-update.tar;
upgrade-cl.yml — плейбук для обновление кластера из локального архива с обновлениями;
multizone — пример инвентарного файла для сборки кластера с двумя мастер-узлами;
normal — пример инвентарного файла для сборки кластера с одним мастер-узлом;
files — дополнительные файлы для плейбуков (например архив обновления docker-anac-update.tar);
templates — шаблоны конфигурационных файлов для кластера и hosts для узлов;
roles — роль обновления;
encrypt.sh — пример скрипта для получения файла val.cry;
pass.sh — пример скрипта генерации пароля для шифрования;
val.cry — пример шифрованных данных для плейбука.
Запуск автоматического развертывания кластерного исполнения AxelNAC
Сборка кластера с одним мастер-узлом
Для того, чтобы запустить сборку кластерного исполнения с одним мастер-узлом, выполните следующие шаги:
Шаг 1. Перенесите директорию /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools на виртуальную машину, которая не будет использоваться в кластере.
Шаг 2. В файле normal, в разделе cluster укажите IP-адреса и имена хоста узлов в секциях master и nodes.
Шаг 3. В секции vars укажите от имени какого пользователя производятся действия: ansible_user=root.
Шаг 4. Укажите пароль для доступа к пользователю: ansible_ssh_pass=superpassword.
Для доступа от имени пользователя root требуется настройка службы sshd на всех узлах, т.к. в целях безопасности доступ к пользователю root запрещен;
Для запуска плейбуков от имени обычного пользователя дополнительно нужно указать ключ -bK, при этом дополнительно в командной строке будет запрошен пароль от пользователя root).
Шаг 5. Укажите виртуальный IP-адрес кластера в строке cluster_mng_ip.
Шаг 6. В файле create-cl.yml сконфигурируйте параметры проверки на соответствие.
Для того, чтобы запустить сборку кластерного исполнения с двумя и более мастер-узлами, выполните следующие шаги:
Шаг 1. Перенесите директорию /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools на виртуальную машину, которая не будет использоваться в кластере.
Шаг 2. В файле multizone, в разделе cluster укажите IP-адреса узлов в секциях master и nodes.
Шаг 3. В секции vars укажите от имени какого пользователя производятся действия: ansible_user=root.
Шаг 4. Укажите пароль для доступа к пользователю: ansible_ssh_pass=superpassword.
Для доступа от имени пользователя root требуется настройка службы sshd на всех узлах, т.к. в целях безопасности доступ к пользователю root запрещен;
Для запуска плейбуков от имени обычного пользователя дополнительно нужно указать ключ -bK, при этом дополнительно в командной строке будет запрошен пароль от пользователя root).
Шаг 5. Укажите виртуальные IP-адреса кластера в строке cluster_mng_ip.
Шаг 6. В файле create-cl.yml сконфигурируйте параметры проверки на соответствие.
Плейбук для автоматической сборки кластерного исполнения разделен на стадии, по которым можно запускать/повторять отдельно серию задач при необходимости. Для этого используются теги:
Тег
Описание
check
ansible_memtotal_mb.real | int >= 7944 (проверяется MEM >8Gb);
ansible_devices.sda.size[:-5] | int >= 100 (проверяется HDD > 100Gb);
db_service_status.status.ActiveState == 'active' (проверяется работает ли MariaDB).
init
Вносит необходимые правки в sysctl;
Устанавливает недостающее ПО;
Вносит изменения в hostname согласно инвентарному файлу и обновляет записи /etc/hosts;
Создает пользователя реплики;
Перезапускает узлы.
galera1
Формирует конфигурационные файлы кластера;
Перезапускает сервисы на мастер-узле.
galera2
Переводит мастер-узел в режим создания кластера;
Отключает службу iptables.
galera3
Синхронизирует конфигурационные файлы ведомых узлов с мастер-узлом.
galera4
Скачивает конфигурационные файлы для проверки их идентичности.
galera5
Перезагружает службы на узлах.
galera6
Возвращает мастер-узел в обычный режим;
Включает службу galera-autofix.
galera7
Перезагружает службы на узлах;
Перезагружает ведомые узлы.
Запуск плейбука
Плейбук может быть запущен в различных режимах. Далее приведены примеры.
Стандартный запуск
ansible-playbook -i normal --vault-id ./pass.sh create-cl.yml
Запуск конкретного шага:
ansible-playbook -i normal --vault-id ./pass.sh create-cl.yml -t <ТЕГ_СТАДИИ>
Запуск конкретного шага на конкретном узле:
ansible-playbook -i normal --vault-id ./pass.sh create-cl.yml -t <ТЕГ_СТАДИИ> -l <IP-АДРЕС_УЗЛА>
Запуск нескольких шагов:
ansible-playbook -i normal --vault-id ./pass.sh create-cl.yml -t <ТЕГ_СТАДИИ>,<ТЕГ_СТАДИИ>,<ТЕГ_СТАДИИ>
Обновление кластера с помощью ansible
С помощью утилиты Ansible вы также можете произвести автоматическое обновление узлов кластера. Для этого выполните следующие шаги:
Шаг 1. Сформируйте архив обновления docker-anac-update.tar с помощью скрипта create-local-upgrade.sh и поместите его в директорию /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools/files.
Шаг 2. В файле roles/files/local-upgrade.sh установите/раскомментируйте строку:
export LOCAL_INSTALL='yes' — для установки обновления из локального репозитория;
export DB_UPDATE='yes' — для обновления баз данных.
Шаг 3. Запустите обновление с помощью следующей команды:
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i normal --vault-id ./pass.sh upgrade-cl.yml -vv
Дополнительные команды Ansible
Проверка доступа узлов
ansible -i normal all --vault-id ./pass.sh -m ping
Запуск команд на удаленных узлах
ansible -i normal all --vault-id ./pass.sh -m shell -a "/usr/local/pf/bin/pfcmd service pf restart"
Отображение информации о хосте в виде дерева
ansible -i normal all -m ansible.builtin.gather_facts --tree
Отображение информации о хосте в общем виде
ansible -b -i normal all -m gather_facts
Отображение полной информации о хосте
ansible -i normal all --vault-id ./pass.sh -m setup