В статье будет рассмотрена настройка резервирования 2 серверов EMS при помощи протокола vrrp и репликации баз данных.
Предварительная подготовка:
Для начала потребуется 2 сервера с Ubuntu 20 или более новой и установленными на них EMS одинаковой версии, в примере будет использоваться версия 3.35.
...
Шаг 1: Установка и настройка keepalived
Описание пакет
Пакет keepalived - это open source программное обеспечение, предназначенное для обеспечения функций высокой надежности (high availabilitty) и балансировки нагрузки (load-balancing). За первую функцию отвечает реализация протокола VRRP, а вторая основывается на модуле ядра Linux Vitrual Server (IPVS). Keepalived не разрабатывается сотрудниками Eltex и не включает доработок, за исключением конфигурации. Keepalived используется для организации резервирования контроллеров SoftWLC, при этом используется только функционал VRRP.
...
<ip_адрес другого сервера> - ip-адрес другого сервера;
Шаг 2: Создание и настройка конфигурационного файла:
Создать файл конфигурации для keepalived в папке /etc/keepalived/keepalived.conf
Блок кода |
---|
! Configuration File for keepalived global_defs { script_user root enable_script_security } vrrp_script check_network { script "/etc/keepalived/check_mysql.sh" interval 5 weight 50 fall 3 rise 3 init_fail user root } vrrp_instance VI_SWLC { # state MASTER interface <interface> virtual_router_id 1 track_script { check_network } track_interface { <interface> weight 50 } priority 150 advert_int 1 nopreempt # Uncomment and comment "nopreempt" if preemption needed #preempt_delay 180 authentication { auth_type PASS auth_pass eltex } virtual_ipaddress { <virtual ip> dev <interface> label <interface>:1 } notify_master "/etc/keepalived/keep_notify.sh master" notify_backup "/etc/keepalived/keep_notify.sh backup" notify_fault "/etc/keepalived/keep_notify.sh fault" unicast_peer { <ip address 2 server> } } |
...
Шаг 3 Настройка скриптов проверки состояния 2 сервера и изменения мастера при помощи скриптов:
Скрипт проверяет активность mysql server соседней машины и возвращает код результата. Таким образом, при успешном выполнении скрипта, гарантируется, что SoftWLC достижим для внешних клиентов.
...
где <default_ip> - шлюз по умолчанию для этого сервера аналогично записи;.
Блок кода |
---|
#!/bin/bash # host to ping # there - default gw HOST=<default_ip> # -q quiet # -c nb of pings to perform mysqladmin -ujavauser -pjavapassword ping -h $HOST > /dev/null # $? var keeping result of execution # previous command if [ $? -eq 0 ] then echo `date +"%T %F"` "OK mysql reachable" EXIT_CODE=0 else echo `date +"%T %F"` "ERROR mysql unreacheble!" EXIT_CODE=1 fi exit $EXIT_CODE |
...
При смене состояния сервера, выполняется скрипт keep_notify.sh.
/etc/keepalived/keep_notify.sh
Блок кода |
---|
#!/bin/bash
MYSQL_USER="javauser"
MYSQL_PASSWORD="javapassword"
if ! lockfile-create --use-pid -r 5 /tmp/keep.mode.lock; then
echo "Unable to lock"
echo "Unable to lock" > /tmp/keep.mode.lock.fail
exit 0
fi
case "$1" in
master)
echo "MASTER" > /tmp/keep.mode
service eltex-ems restart
;;
backup)
echo "BACKUP" > /tmp/keep.mode
service eltex-ems stop
;;
fault)
echo "FAULT" > /tmp/keep.mode
;;
*)
echo "Usage: $0 {master|backup|fault}"
exit 1
esac
lockfile-remove /tmp/keep.mode.lock;
exit 0
|
...
|
Шаг 4:Выделение лога в отдельный файл
По умолчанию keepalived записывает лог в файл /var/log/syslog . Для удобства отладки, мониторинга и контроля работы keepalived, можно настроить ведение собственного, отдельного лог-файла.
...
Теперь сообщения от демона keepalived попадут только в лог-файл /var/log/keepalived.log и не попадут в /var/log/syslog .
4.1 Способ запуска/остановки keepalived
Для запуска сервиса воспользуйтесь командой:
...
|
Шаг 5: Настройка репликации MariaDB
Резервирование данных, хранящихся СУБД MySQL, осуществляется путём встречной репликации по принципу master-master (ведущий-ведущий). То есть, каждый из серверов одновременно является и master и slave. При такой схеме работы, все изменения в БД на одном сервере записываются в специальный бинарный лог, который в реальном времени вычитывает второй сервер и применяет изменения. Второй сервер реплицирует данные с первого, а первый со второго. Это позволяет получить актуальную копию БД на двух хостах одновременно. При разрыве связи, изменения накапливаются, после восстановления происходит синхронизация.
5.1 Перенос дампа данных и перенос на второй сервер
При настройке резервирования в процессе эксплуатации (то есть если в MySQL на действующем сервере уже имеются данные), необходимо перенести эти данные на второй сервер. Это можно сделать при помощи утилиты mysqldump.
...
|
Затем, развернуть dump на втором сервере:
|
5.2 Настройка конфигурациионного файла MariaDB
Конфигурация самого демона mysqld заключается в настройке параметров ведения бинарных логов. Обозначения первый сервер и второй сервер далее условны, и применяются лишь для обозначения различий в конфигурации серверов.
...
|
5.3 Создание учетных записей
Для работы репликации необходима служебная учетная запись на каждом из серверов. Под этой учетной записью, сервер будет подключаться к master-серверу и получать изменения в данных.
...
Привилегия SELECT необходима для работы проверки репликации из GUI EMS
5.4 Выдача прав сервисным пользователям
Открыть /usr/lib/eltex-ems/conf/config.txt, посмотреть какие username / password используются (по умолчанию - javauser / javapassword)
...
|
5.5 Включение репликации
Настроить и запустить репликацию второго сервера с первого (выполнить действия на втором сервере):
...
После сохранения изменений, состояние репликации можно отслеживать в GUI EMS в разделе Информация → Состояние системы резервирования → MySQL.
Шаг 6: Проверка корректной настройки MariaDB
Проверить что реплиакация работает можно как через GUI ems перейдя на вкладку Информация >> состояние системы резервирования >> MySQL.
...