В данной статье приведено описание развертывания кластерного исполнения AxelNAC с помощью утилиты Ansible.
Кластерное исполнение AxelNAC может состоять из нечетного количества узлов и представляет собой отказоустойчивый кластер. Отказоустойчивые кластеры — это группы серверов, которые спроектированы в соответствии с методиками обеспечения высокой доступности и которые гарантируют работу кластера в целом при отказе одного или нескольких его узлов. Без кластеризации, если сервер, на котором запущен AxelNAC, выходит из строя, система будет недоступна до тех пор, пока не будет устранена неполадка на сервере. Отказоустойчивый кластер исправляет эту ситуацию, обнаруживая аппаратные и программные сбои и немедленно перенаправляя трафик на другие узлы, не требуя вмешательства администратора. Кластер AxelNAC может содержать до девяти узлов в разных L2-сегментах, такой кластер называется катастрофоустойчивым.
Кластер AxelNAC может содержать от 3 до 9 узлов.
Данный кластер работает по принципу active/active, т.е. один или несколько узлов выступают в качестве балансировщика, который осуществляет прием и распределение запросов между собой и оставшимися узлами кластера. В случае выхода из строя сервера, он исключается из балансировки. В случае выхода из строя узла, выполняющего роль балансировщика, эта роль и кластерный адрес передаются другому узлу кластера.
Кластер AxelNAC будет сохранять полную работоспособность при соблюдении обязательного кворума — более 50% узлов кластера должны быть доступны. При потере кворума, AxelNAC сохраняет частичную работоспособность:
Для реализации данного способа вам потребуется нечетное количество установленных серверов AxelNAC (от трех до девяти). Серверы должны быть расположены в пределах следующих ограничений задержки (требование для MariaDB Galera):
Для того, чтобы произвести автоматическое развертывание кластерного исполнения AxelNAC, необходимо выполнить следующие подготовительные этапы:
Для начала развертывания кластера необходимо настроить сетевые интерфейсы на каждом из узлов. Для этого выполните следующие шаги:
Шаг 1. Подключитесь к узлу через платформу виртуализации и задайте адрес на сетевом интерфейсе:
nano /etc/network/interfaces
Шаг 2. Измените файл конфигурации на каждом узле по данному примеру:
auto eth0
iface eth0 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. Выберите интерфейс, который будет использоваться для управления. На странице его настройки в поле Тип выберите значение Управление и переместите переключатель Высокая доступность в состояние включено.
Для того, чтобы автоматизировать настройку кластера, необходимо установить утилиту Ansible на виртуальную машину с сетевым доступом ко всем узлам, которая не будет использоваться в кластере и сконфигурировать ее:
Шаг 1. В интерфейсе командной строки выполните следующую команду:
apt install ansible
Шаг 2. Обозначьте переменную конфигурации для совместимости с предустановленным в AxelNAC плейбуком, введя следующую команду:
export ANSIBLE_CONFIG=ansible.cfg
Все инструменты для развертывания кластерного исполнения расположены в директории /usr/local/pf/addons/tech-support-utils/ansible-cluster-tools:
Для того, чтобы запустить сборку кластерного исполнения с одним мастер-узлом, выполните следующие шаги:
Шаг 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.
Шаг 5. Укажите виртуальный IP-адрес кластера в строке cluster_mng_ip.
Шаг 6. В файле create-cl.yml сконфигурируйте параметры проверки на соответствие.
[cluster:children]
dc1
[dc1]
dc1-anac3-n1 ansible_host=10.31.205.87 vip=10.31.205.111 master=true
dc1-anac3-n2 ansible_host=10.31.205.119
dc1-anac3-n3 ansible_host=10.31.205.120
[cluster:vars]
####### !!!!!!!!!!!! type = 'normal' or 'l3' !!!!!!!!!!! #######
type=normal
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o PasswordAuthentication=yes'
ansible_user=root/user
ansible_ssh_pass=root_pass
#ansible_ssh_pass=123123
ansible_python_interpreter="/usr/bin/python3"
# mem >= 8 Gb
mem=7944
# cpu >= 4
cpu=4
# sda.size >= 200 Gb
hdd=100
Для того, чтобы запустить сборку кластерного исполнения с двумя и более мастер-узлами, выполните следующие шаги:
Шаг 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.
Шаг 5. Укажите виртуальные IP-адреса кластера в строке cluster_mng_ip.
Шаг 6. В файле create-cl.yml сконфигурируйте параметры проверки на соответствие.
[cluster:children]
dc1
dc2
[dc1]
dc1-anac5-n1 ansible_host=10.31.205.87 vip=10.31.205.111 master=true
dc1-anac5-n2 ansible_host=10.31.205.119
dc1-anac5-n3 ansible_host=10.31.205.120
[dc2]
dc2-anac5-n1 ansible_host=10.31.205.121 vip=10.31.205.112
dc2-anac5-n2 ansible_host=10.31.205.122
[cluster:vars]
####### !!!!!!!!!!!! type = 'normal' or 'l3' !!!!!!!!!!! #######
type=l3
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o PasswordAuthentication=yes'
ansible_user=root/user
ansible_ssh_pass=root_pass
#ansible_ssh_pass=123123
ansible_python_interpreter="/usr/bin/python3"
# mem >= 8 Gb
mem=7944
# cpu >= 4
cpu=4
# sda.size >= 200 Gb
hdd=100
Плейбук для автоматической сборки кластерного исполнения разделен на стадии, по которым можно запускать/повторять отдельно серию задач при необходимости. Для этого используются теги:
| Тег | Описание |
|---|---|
| check |
|
| init |
|
| galera1 |
|
| galera2 |
|
| galera3 |
|
| galera4 |
|
| galera5 |
|
| galera6 |
|
| 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 вы также можете произвести автоматическое обновление узлов кластера. Для этого выполните следующие шаги:
Шаг 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 установите/раскомментируйте строку:
Шаг 3. Запустите обновление с помощью следующей команды:
ANSIBLE_CONFIG=./ansible.cfg ansible-playbook -i normal --vault-id ./pass.sh upgrade-cl.yml -vv
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
ansible-playbook -i normal --vault-id ./pass.sh create-cl.yml -t init -l dc1-anac5-n1 -vvv