Установка на свои сервера с резервированием 1+1 (Active - Standby)
Резервирование Master-Backup 1 DC
Как работает резервирование
Типовая схема Active-Standby представлена выше (Требует правок).
Требуется 2 сервера с идентичной конфигурацией, но работающих по разному. Резервирование Wimark One предполагает резервирование следующего:
- БД
- Статических и графических файлов
Для резервирования БД используется встроенное в БД средство, а именно Active-Backup схема развертывания.
Для резервирования статических файлов используется пакет lsyncd.
Важную функцию выполняет keepalived - это демон VRRP, позволяющий использовать виртуальный IP для серверов. Тем самым, в один момент времени по VIP фактически доступен только 1 сервер - и он же является Master в данный момент.
Подготовка
Для развертывания платформы Wimark в режиме Active-Standby необходимо 2 сервера с предустановленной ОС семества Debian (Debian 9/10, Ubuntu 18.04 LTS +). Между серверами должно быть настроено резервное выделенное подключение, а также одно по одному интерфейсу в сторону точек доступа.
Далее необходимо проверить и выполнить следующие правила:
- В настройках Firewall необходимо разрешить трафик с портов:
- 500/udp, 4500/udp для подключения точек доступа посредством L3 туннеля
- 1883/tcp для резервного подключения
- 80/tcp, 443/tcp для Web NMS
- 22/tcp для удаленного управления посредством SSH
- Включить Forwarding трафика:
- Выполните настройку sysctl для форвардинга:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf # sysctl -p
- В настройках Iptables:
iptables -P FORWARD ACCEPT
- Установить keepalived:
sudo apt update && sudo apt install keepalived
- Установить docker & docker-compose:
curl -sSl https://get.docker.com | sh sudo curl -L "https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64"\ -o /usr/local/bin/docker-compose; sudo chmod +x /usr/local/bin/docker-compose
- Настроить канал между серверами:
- Прописать IP адреса, либо получить по DHCP
- Выделить отдельный адрес из подсети для VIP
- Сгенерировать ssh ключи на серверах:
ssh-keygen
- Прописать в
~/.ssh/authorized_keys
содержимое файла~/.ssh/id_rsa.pub
соседнего сервера - Проверить чтобы ssh между серверами был без пароля
Развертывание (для версии 1.1) - не актуально
Для развертывания необходимо знать/указать следующие параметры через параметры кружения командной строки:
- IFACE - имя интерфейса, связывающего оба сервера
- FIRST_IP - адрес текущего сервера на интерфейсе IFACE
- SECOND_IP - адрес соседнего сервера на интерфейсе IFACE
- VIRTUAL_IP - выделенный IP адрес в сети, связывающей сервера
- VIRTUAL_SUBNET - подсеть для выделенного IP (в формате от 1 до 32, например 24)
- USER - имя пользователя, с которым настраивался безпарольный ssh доступ между серверами
Затем после загрузки бинарного файла на каждый из серверов запустить установку. Пример команды запуска:
# выполняем под суперпользователем
sudo su
IFACE=eth1 FIRST_IP=192.168.1.1 SECOND_IP=192.168.1.2 VIRTUAL_IP=192.168.1.3 VIRTUAL_SUBNET=24 USER=wimark ./Wimark-Platform-installer.binC
На второй машине отличие только в параметрах FIRST_IP и SECOND_IP.
После установки на обоих машинах, необходимо последовательно перезапустить сервис keepalived сначала на Active сервере, потом на сервере Standby.
sudo service keepalived restart
Для последующего подключения точек необходимо указывать оба адреса как адрес брокера через Web точки доступа (доступ осуществляется без пароля с пользователем root).
Развертывание (начиная с версии 1.2)
Резервирование по схеме 1+1 основано на использовании протокола VRRP и плавающего сетевого адреса (VIP). В качестве программного обеспечения используется keepalived.
Keepalived осуществляет следующие функции:
- Проверку состояния серверов;
- Автоматическое переключение ресурсов в случае отказа основного сервера с выполнением скриптов пользователя.
В случае резервирования платформы управления, мониторинга и авторизации Keepalived опускает или поднимает сервисы, необходимые для работы.
Также для зеркалирования статических данных (таких как изображения карт, файлы веб страниц авторизации, рекламные материалы) используется lsyncd, входящий в комплект поставки.
Предоставленный бинарник загружает docker образы, размещает необходимые статические файлы в /usr/share/wimark, а также создает размещает конфигурации master и backup вариантов работы в /etc/wimark.
В директориях /etc/wimark/master и /etc/wimark/backup необходимо создать файлы .env и прописать валидные для текущей инсталляции переменные окружения для compose файлов:
$ cat /etc/wimark/master/.env
VIP=10.10.10.3 # Общий для инсталляции адрес
SECOND_IP=10.10.10.2 # Адрес второй машины в связывающей подсети
HOSTNAME=wifi-controller #hostname сервера
HOST_UUID=a73a766996734421994f2bfd4e00afd1 #machine id
USERNAME=username # имя пользователя с которым можно ходить по ssh на SECOND_IP
$ cat /etc/wimark/backup/.env
VIP=10.10.10.3
HOSTNAME=wifi-controller #hostname сервера
HOST_UUID=a73a766996734421994f2bfd4e00afd1 #machine id
$ cat /etc/hostname
wifi-controller
$ cat /etc/machine-id
a73a766996734421994f2bfd4e00afd1
$ echo $USER
username
Необходимо настроить ssh на обоих машинах так, чтобы по id_rsa ключу пользователя, указанного выше в .env можно было иметь доступы на соседнюю машину (cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
)
После установки платформы необходимо настроить работу keepalived. Для этого необходимо создать и проверить правильность находящихся внутри адресов и путей файлы, шаблоны которых приведены в конце. Чтобы протестировать работу master-backup.sh:
cd /etc/wimark; ./master-backup.sh 1 1 MASTER
docker ps
cd /etc/wimark; ./master-backup.sh 1 1 BACKUP
docker ps
Чтобы протестировать работу keepalived (не забыв включить сервис можно просто сделать ребут на обоих машинах):
Примеры конфигурационных файлов:
#!/bin/bash
TYPE=$1 NAME=$2 STATE=$3
LOG_STR="$(date) $STATE"
case $STATE in
"MASTER")
echo "MASTER" > ./pa.lock
rm -f /usr/share/wimark/volumes/mongo/*.lock
cd /etc/wimark/backup
docker-compose down
cd /etc/wimark/master
docker-compose up -d
LOG_STR="$LOG_STR: start master"
;;
"BACKUP")
ls
echo "BACKUP" > ./pa.lock
sleep 10
[ $(cat ./pa.lock) != "BACKUP" ] && exit 0 rm -f /usr/share/wimark/volumes/mongo/*.lock
cd /etc/wimark/master
docker-compose down
cd /etc/wimark/backup
docker-compose up -d
LOG_STR="$LOG_STR: start backup"
;;
"FAULT")
LOG_STR="$LOG_STR: fault"
;;
*)
LOG_STR="$LOG_STR: unknown"
;;
esac
echo $LOG_STR >> /var/log/wimark-keepalived.log
global_defs {
script_user root
#enable_script_security
}
# VRRP instance name WIM1
vrrp_instance WIM1 {
# iface for listeting interface: eth0
interface l2tpeth0
# state of current server: MASTER or BACKUP
state MASTER
# id for unique VRRP segment
virtual_router_id 67
# preempt - for change MASTER always to first node (if up)
# nopreempt - stay in position after reconnecting
#nopreempt
# some other needed parameters
garp_master_delay 1
priority 200
advert_int 1
# authentication method and password to use
authentication {
auth_type PASS
auth_pass wimark123
}
# virtual address to promote
virtual_ipaddress {
10.10.10.3/24 dev l2tpeth0
}
# script to run when STATE is changing -- main logic, DO NOT change
notify /etc/wimark/master-backup.sh
}
global_defs {
script_user root
#enable_script_security
}
# VRRP instance name WI2
vrrp_instance WIM2 {
# iface for listeting interface: eth0
interface l2tpeth0
# state of current server: MASTER or BACKUP
state BACKUP
# id for unique VRRP segment
virtual_router_id 67
# preempt - for change MASTER always to first node (if up)
# nopreempt - stay in position after reconnecting
# nopreempt
# some other needed parameters
garp_master_delay 1
priority 200
advert_int 1
# authentication method and password to use
authentication {
auth_type PASS
auth_pass wimark123
}
# virtual address to promote
virtual_ipaddress {
10.10.10.3/24 dev l2tpeth0
}
# script to run when STATE is changing -- main logic, DO NOT change
notify /etc/wimark/master-backup.sh
}
Работоспособность системы определяется следующим образом:
-
Web NMS доступен по внешнему IP адресу любого сервера (логин/пароль по-умолчанию wimark/wimark)
-
Точки доступа извне могут подключиться по любому из адресов серверов
Настройка точек доступа:
- Точку доступа следует подключить к платформе по VIP