В данной статье приведено описание развертывания кластерного исполнения AxelNAC с помощью утилиты Ansible.
Кластерное исполнение AxelNAC может состоять из нечетного количества узлов и представляет собой отказоустойчивый кластер. Отказоустойчивые кластеры — это группы серверов, которые спроектированы в соответствии с методиками обеспечения высокой доступности и которые гарантируют работу кластера в целом при отказе одного или нескольких его узлов. Без кластеризации, если сервер, на котором запущен AxelNAC, выходит из строя, система будет недоступна до тех пор, пока не будет устранена неполадка на сервере. Отказоустойчивый кластер исправляет эту ситуацию, обнаруживая аппаратные и программные сбои и немедленно перенаправляя трафик на другие узлы, не требуя вмешательства администратора. Кластер AxelNAC может содержать до 9 узлов в разных L2-сегментах, такой кластер называется катастрофоустойчивым.
Данный кластер работает по принципу active-active, т.е. один или несколько узлов выступают в качестве балансировщика, который осуществляет прием и распределение запросов между собой и оставшимися узлами кластера. В случае выхода из строя сервера, он исключается из балансировки. В случае выхода из строя узла, выполняющего роль балансировщика, эта роль и кластерный адрес передаются другому узлу кластера.
Кластер AxelNAC будет сохранять полную работоспособность при соблюдении обязательного кворума — более 50% узлов кластера должны быть доступны. При потере кворума, AxelNAC сохраняет частичную работоспособность, переходя в режим только для чтения. В данном режиме изменяется логика основных элементов системы:
Для реализации данного способа вам потребуется нечетное количество установленных серверов AxelNAC (от трех до девяти). Серверы должны быть расположены в пределах следующих ограничений задержки (требование для MariaDB Galera — службы синхронизации БД кластера):
Для того чтобы произвести автоматическое развертывание кластерного исполнения AxelNAC, необходимо выполнить следующие подготовительные этапы:
Для начала развертывания кластера необходимо настроить сетевые интерфейсы на каждом из узлов. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к узлу через платформу виртуализации и задайте адрес на сетевом интерфейсе:
nano /etc/network/interfaces
Шаг 2. Измените файл конфигурации на каждом узле по данному примеру:
auto <имя_сетевого_интерфейса>
iface <имя_сетевого_интерфейса> inet static
address <ip-address>
netmask <net mask>
gateway <gateway ip-address>
Шаг 3. Для применения конфигурации перезапустите службу сети, используя следующую команду:
systemctl restart networking
Для следующего этапа необходимо сконфигурировать мастер-узел. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к узлу по адресу https://<ip-address>:1443 — откроется веб-конфигуратор AxelNAC.
Шаг 2. Выберите интерфейс, который будет использоваться для управления. На странице его настройки в поле Тип выберите значение Управление и переместите переключатель Высокая доступность в состояние включено.
Шаг 3. Пройдите все оставшиеся этапы настройки в веб-конфигураторе.
После того как мастер-узел предварительно сконфигурирован, можно приступить к преднастройке ведомых узлов кластера. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к ведомому узлу по адресу https://<ip-address>:1443 — откроется веб-конфигуратор AxelNAC.
Шаг 2. Выберите интерфейс, который будет использоваться для управления. На странице его настройки в поле Тип выберите значение Управление и переместите переключатель Высокая доступность в состояние включено.
Шаг 1. Перейдите в каталог /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools/. Запустите скрипт генерации шифрованных паролей для Ansible с помощью указанной ниже команды и введите пароли, которые вы будете использовать для работы с кластером:
/usr/local/pf/conf/pf.conf;/usr/local/pf/conf/pf.conf.
bash init-env.sh
Для упрощения процесса обновления кластера в будущем, рекомендуется сохранить эти пароли.
Шаг 2. Откройте конфигурационный файл /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools/inventory/group_vars/all.yml и для переменной type укажите тип инсталляции (может принимать значения normal и l3 (для multizone)).
Шаг 3. Заполните инвентарный файл для запуска развертывания. Для этого в директории /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools/inventory отредактируйте:
Пример заполненного инвентарного файла normal:
[cluster:children]
dc1
[dc1]
hostname_узла_1 ansible_host=IP-адрес_узла_1 vip=VIP-адрес_кластера master=true
hostname_узла_2 ansible_host=IP-адрес_узла_2
hostname_узла_3 ansible_host=IP-адрес_узла_3
Пример заполненного инвентарного файла multizone:
[cluster:children]
dc1
dc2
[dc1]
hostname_узла_1 ansible_host=IP-адрес_узла_1 vip=VIP-адрес_dc1 master=true
hostname_узла_2 ansible_host=IP-адрес_узла_2
hostname_узла_3 ansible_host=IP-адрес_узла_3
[dc2]
hostname_узла_4 ansible_host=IP-адрес_узла_4 vip=VIP-адрес_dc2
hostname_узла_5 ansible_host=IP-адрес_узла_5
Шаг 4. Выполните проверку доступности узлов будущего кластера. Для этого перейдите в директорию /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools/ и выполните команду:
ansible -i inventory/normal all -m ping
Шаг 5. Запустите сборку кластера из этой же директории, выполнив следующую команду:
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i inventory/<normal|multizone> playbooks/create-cl.yml -vv -Kb
При выполнении команды система запросит пароль от пользователя root. Данный пароль в открытом виде не поставляется. Он вводится сетевыми инженерами Axel PRO или партнерами, выполняющими развертывание кластерной инсталляции.
Плейбук для автоматической сборки кластерного исполнения разделен на стадии, по которым можно запускать/повторять отдельно серию задач при необходимости. Для этого используются теги:
| Тег | Описание |
|---|---|
| init |
|
| galera1 |
|
| galera2 |
|
| galera3 |
|
| galera4 |
|
| galera5 |
|
| galera6 |
|
| galera7 |
|
Плейбук может быть запущен в различных режимах. Ниже приведено описание каждого из дополнительных режимов с примерами:
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i inventory/<normal|multizone> playbooks/create-cl.yml -t <ТЕГ_СТАДИИ>
Такой командой вы можете запустить определенную стадию плейбука (например, если во время исполнения плейбука произошла остановка операций, или пришлось прервать его работу вручную).
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i inventory/<normal|multizone> playbooks/create-cl.yml -t <ТЕГ_СТАДИИ> -l <IP-АДРЕС_УЗЛА>
Такой командой вы можете запустить определенную стадию плейбука на определенном узле.
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i inventory/<normal|multizone> playbooks/create-cl.yml -t <ТЕГ_СТАДИИ>,<ТЕГ_СТАДИИ>,<ТЕГ_СТАДИИ>
Такой командой вы можете запустить определенные стадии плейбука.
Для того чтобы проверить работоспособность кластера необходимо открыть веб-интерфейс AxelNAC. После ввода учетных данных откроется раздел Статус → Система, в котором можно будет увидеть подключенные узлы.
IP-адреса всех узлов кластера также должны быть отображены в файле /usr/local/pf/conf/cluster.conf и соответствовать содержимому, указанному в файле create-cl.yml.
Пример файла для кластера с двумя VIP-адресами из 5 узлов:
# MULTI ZONE CLUSTER CFG
[general]
multi_zone=enabled
[dc1 CLUSTER]
management_ip=10.21.209.41
[dc1 CLUSTER interface <имя_сетевого_интерфейса>]
ip=10.21.209.41
[dc1 deb-to-astra-dc1-1]
management_ip=10.21.209.36
[dc1 deb-to-astra-dc1-1 interface <имя_сетевого_интерфейса>]
ip=10.21.209.36
[dc1 deb-to-astra-dc1-2]
management_ip=10.21.209.37
[dc1 deb-to-astra-dc1-2 interface <имя_сетевого_интерфейса>]
ip=10.21.209.37
[dc1 deb-to-astra-dc1-3]
management_ip=10.21.209.38
[dc1 deb-to-astra-dc1-3 interface <имя_сетевого_интерфейса>]
ip=10.21.209.38
[dc2 CLUSTER]
management_ip=10.21.209.42
[dc2 CLUSTER interface <имя_сетевого_интерфейса>]
ip=10.21.209.42
[dc2 deb-to-astra-dc2-1]
management_ip=10.21.209.39
[dc2 deb-to-astra-dc2-1 interface <имя_сетевого_интерфейса>]
ip=10.21.209.39
[dc2 deb-to-astra-dc2-2]
management_ip=10.21.209.40
[dc2 deb-to-astra-dc2-2 interface <имя_сетевого_интерфейса>]
ip=10.21.209.40
Также статусы можно проверить с помощью консоли управления. Для этого подключитесь по SSH к любому узлу и выполните следующую команду:
/usr/local/pf/bin/pfcmd service pf status
Еще один способ проверки — проверка статусов через MySQL. Чтобы просмотреть все активные узлы в кластере перейдите в оболочку SQL и выполните следующую команду:
show status like '%wsrep%';
Активные узлы кластера будут перечислены в строке wsrep_incoming_addresses.