Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Code Block
! 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> - шлюз по умолчанию для этого сервера аналогично записи;.

Code Block
#!/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

Code Block
#!/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

...

sudo chmod +x /etc/keepalived/check_mysql.sh
sudo chmod +x /etc/keepalived/keep_notify.sh

Шаг 4:Выделение лога в отдельный файл

По умолчанию keepalived записывает лог в файл /var/log/syslog . Для удобства отладки, мониторинга и контроля работы keepalived, можно настроить ведение собственного, отдельного лог-файла.

...

Теперь сообщения от демона keepalived попадут только в лог-файл /var/log/keepalived.log и не попадут в /var/log/syslog .

4.1 Способ запуска/остановки keepalived

Для запуска сервиса воспользуйтесь командой:

...

sudo service keepalived status

Шаг 5: Настройка репликации MariaDB

Резервирование данных, хранящихся СУБД MySQL, осуществляется путём встречной репликации по принципу master-master (ведущий-ведущий). То есть, каждый из серверов одновременно является и master и slave. При такой схеме работы, все изменения в БД на одном сервере записываются в специальный бинарный лог, который в реальном времени вычитывает второй сервер и применяет изменения. Второй сервер реплицирует данные с первого, а первый со второго. Это позволяет получить актуальную копию БД на двух хостах одновременно. При разрыве связи, изменения накапливаются, после восстановления происходит синхронизация.

5.1 Перенос дампа данных и перенос на второй сервер

При настройке резервирования в процессе эксплуатации (то есть если в MySQL на действующем сервере уже имеются данные), необходимо перенести эти данные на второй сервер. Это можно сделать при помощи утилиты mysqldump.

...

1) sudo mysql -uroot -proot -e "FLUSH TABLES WITH READ LOCK;"
2) sudo mysqldump -uroot -proot --databases ELTEX_PORTAL eltex_alert eltex_auth_service eltex_bruce eltex_doors eltex_ems eltex_jobs eltex_ngw eltex_ont radius wireless eltex_pcrf  pcrf eltex_wids eltex_wifi_customer_cab eltex_sorm2 eltex_ott eltex_jerry> jerry > mysqldump_master.sql
3) sudo mysql -uroot -proot -e "UNLOCK TABLES;"
4) sudo scp mysqldump_master.sql <username>@<ip_server2>:/home/<username>/

Затем, развернуть dump на втором сервере:

sudo mysql -uroot -proot < /home/<username>/mysqldump_master.sql

5.2 Настройка конфигурациионного файла MariaDB

Конфигурация самого демона mysqld заключается в настройке параметров ведения бинарных логов. Обозначения первый сервер и второй сервер далее условны, и применяются лишь для обозначения различий в конфигурации серверов.

...

sudo service mysql restart

5.3 Создание учетных записей

Для работы репликации необходима служебная учетная запись на каждом из серверов. Под этой учетной записью, сервер будет подключаться к master-серверу и получать изменения в данных.

...


Привилегия SELECT необходима для работы проверки репликации из GUI EMS

5.4 Выдача прав сервисным пользователям

Открыть /usr/lib/eltex-ems/conf/config.txt, посмотреть какие username / password используются (по умолчанию - javauser / javapassword)

...

GRANT ALL PRIVILEGES ON *.* TO 'javauser'@'%' IDENTIFIED BY 'javapassword';
GRANT ALL PRIVILEGES ON `wireless`.* TO 'javauser'@'%';          
GRANT ALL PRIVILEGES ON `Syslog`.* TO 'javauser'@'%';            
GRANT ALL PRIVILEGES ON `eltex_ems`.* TO 'javauser'@'%';         
GRANT ALL PRIVILEGES ON `eltex_alert`.* TO 'javauser'@'%';       
GRANT ALL PRIVILEGES ON `eltex_bruce`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_pcrf`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_wids`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_wifi_customer_cab`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_jobs`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_sorm2`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ott`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_jerry`.* TO 'javauser'@'%';
GRANT ALL PRIVILEGES ON `eltex_ont`.* TO 'javauser'@'%';
FLUSH PRIVILEGES;

5.5 Включение репликации

Настроить и запустить репликацию второго сервера с первого (выполнить действия на втором сервере):

...

После сохранения изменений, состояние репликации можно отслеживать в GUI EMS в разделе Информация → Состояние системы резервирования → MySQL.

Шаг 6: Проверка корректной настройки MariaDB 

Проверить что реплиакация работает можно как через GUI ems перейдя на вкладку Информация >> состояние системы резервирования >> MySQL.

...