В статье будет рассмотрена настройка резервирования 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.
...