Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Установка Wimark One - HA

Предустановка

Для установки платформы Wimark One необходимо 2 сервера с предустановленной ОС на базе Linux.
В случае L2 связности - схема Intra DC, в случае L3 связности - Inter DC.

...

  • Включить Forwarding трафика (sysctl):

Блок кода
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf # sysctl -p
  • Выполнить настройку перенаправления трафика:

Блок кода
iptables -P FORWARD ACCEPT
  • Установить пакет keepalived:

Блок кода
sudo apt update && sudo apt install keepalived
  • Настроить канал между серверами и выделить отдельный адрес из подсети для VIP


Информация

VIP - виртуальный IP.

Используется keepalived. К этому адресу должны будут подключаться ТД, и по данному IP всегда будет доступен Master/Active сервер.

Установка Docker

Примечание
Для установки Docker необходимы права суперпользователя/root
  1. Войти под пользователем root следующей командой:

Блок кода
sudo su

2. Установить Docker на сервер:

Блок кода
curl -sSl https://get.docker.com | sh

Можно выполнить установку через apt-репозиторий. Далее, в качестве примера, приведена установка через apt-репозиторий для Ubuntu 22.04.

Раскрыть
titleУстановка через apt-репозиторий
  1. Обновить список для актуализации установочных пакетов:

Блок кода
sudo apt-get update

2. Установить набор пакетов, который необходим для доступа к репозиторию docker:

Блок кода
sudo apt-get install ca-certificates curl gnupg

...

3. Добавить GPG-key для работы с официальным репозиторием Docker:

Блок кода
sudo install -m 0755 -d /etc/apt/keyrings 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

...

 sudo chmod a+r /etc/apt/keyrings/docker.gpg

4. Добавить официальный репозиторий Docker в локальный список (копировать эту команду необходимо полностью):

Блок кода
echo \

...

 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

...

 $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \

...

 sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. Обновить список и установить пакеты и запустить Docker:

Блок кода
sudo apt-get update 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 
systemctl start docker



Информация
При необходимости установки каким-либо другим способом, либо на другую ОС, на сайте https://docs.docker.com/engine/install/ есть подробные инструкции для установки.

Настройка беспарольного доступа между серверами

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!
  1. Необходимо создать нового пользователя - one

Блок кода
adduser one

2. Добавить пользователя one в суперпользователей:

Блок кода
sudo usermod -a -G sudo one

3. Войти в систему под этим пользователем:

Блок кода
su one

4. Сгенерировать ssh ключ:

Блок кода
ssh-keygen -t rsa


Информация

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

Запрос о введении кодовой фразы можно пропустить (может помешать автоматизации некоторых процессов).

Далее в выводе указывается место, где хранятся ID и открытый ключ.


Image Added

Рисунок 1 - Пример вывода команды ssh-keygen

5. Скопировать ssh-ключ на указанный сервер:

Блок кода
ssh-copy-id one@{IP}


Информация

{IP} - IP сервера, куда будет скопирован ключ.

После завершения, следует убедиться, что действительно получилось сделать беспарольный доступ между двумя серверами.
Для этого необходимо под пользователем one с одного сервера подключиться ко второму.
Тоже самое и со второго сервера на первый.
ssh one@{IP}

Если при подключении запрос пароля не поступил, то всё работает правильно.

Настройка /etc/hosts для работы БД

Необходимо настроить /etc/hosts таким образом, чтобы резолвились хосты для работы базы данных.

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!
  • Войти в режим редактирования файла /etc/hosts:

Блок кода
sudo nano /etc/hosts


Информация

CTRL + S - сохранить изменения в файле.

CTRL + X - выйти из редактора.


  • Выполнить настройки:

Блок кода
# Настройки для 1-й машины:
127.0.0.1 localhost mongo-rs-1 
{IP-2} mongo-rs-2 
{VIP} mongo-rs-3 

# Настройки для 2-й машины: 
127.0.0.1 localhost mongo-rs-2 
{IP-1} mongo-rs-1 
{VIP} mongo-rs-3


Информация

{IP-1/2} - адрес машины.

{VIP} - виртуальный IP, используемый сервисом keepalived.


Image Added

Рисунок 2 - Пример настроенного файла /etc/hosts

Установка ПО Wimark One

Необходимо загрузить дистрибутив Wimark One на сервера, где планируется установка ПО.

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!

Загрузить дистрибутив Wimark One на сервер (при наличии доступа в Интернет):

Блок кода
wget https://storage.wimark.com/api/public/dl/XZqjHaJe \
 

...

-O /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run 
sudo chmod +x /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run

Для запуска установки необходимо выполнить:

Блок кода
# Команды для 1-й машины: 
sudo FIRST_IP={IP-1} SECOND_IP={IP-2} VIP={VIP} NEIGHBOR_IP={IP-2} bash /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run 

# Команды для 2-й машины: 
sudo FIRST_IP={IP-1} SECOND_IP={IP-2} VIP={VIP} NEIGHBOR_IP={IP-1} bash /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run


Информация

/tmp/ - каталог в котором хранятся временные файлы. Файлы удаляются спустя определенное время и после перезагрузки сервера.

{IP-1/2} - адрес машины.

{VIP} - виртуальный IP используемый сервисом keepalived.

https://storage.wimark.com/api/public/dl/XZqjHaJe - пример ссылки на прошивку.

WiMark-ha-1.11.0-2023-10-30-qtech-installer.run - пример имени файла, может отличаться в зависимости от сборки и версии ПО.


Во время установки будет предложено заполнить FQDN (рисунок 3).

Image Added

Рисунок 3 - Запрос FQDN

Следует указать FQDN. Если FQDN использоваться не будет, то можно указать любое доменное имя, например: one.mydomain.com.

Информация
FQDN (Fully Qualified Domain Name) полное доменное имя определяющее узел в сети Интернет (имя домена, на которое будет реагировать веб-сервер).

После установки основных компонентов будет предложено установить SMTP (рисунок 4).

Image Added

Рисунок 4 - Запрос установки SMTP

Следует указать: y - для запуска установки, N - для отказа от установки.

Информация
Simple Mail Transfer Protocol (SMTP) - простой протокол передачи почты, применяемый для пересылки электронных писем с сервера отправителя на сервер получателя.

Image Added

Рисунок 5 - Пример заполнения установщика SMTP


Примечание

SMTP_HOST - имя хоста или IP-адрес SMTP-сервера, который будет отправлять сообщения.

SMTP_PORT - номер порта для подключения к SMTP-серверу, по умолчанию 25.

SMTP_USER - логин УЗ для SMTP.

SMTP_PASS - пароль УЗ для SMTP.


После завершения установки, необходимо создать скрипты для keepalived.

Настройка keepalived

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!
  1. Создать скрипт: /opt/wimark/checker.sh

Блок кода
sudo nano /opt/wimark/checker.sh


Информация

CTRL + S - сохранить изменения в файле.

CTRL + X - выйти из редактора.

2. Вставить содержимое в файл:

Блок кода
linenumberstrue
#!/bin/bash
STATE="$(cat /opt/wimark/ha_state)"
LOG_STR="$(date) $STATE"
WORKDIR="/opt/wimark"
case $STATE in
    "MASTER")
        cd $WORKDIR/master
        bash start.sh
        LOG_STR="$LOG_STR: start master"
        ;;
    "BACKUP")
        cd $WORKDIR/backup
	bash start.sh
        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

3. Создать скрипт: /opt/wimark/set_state.sh

Блок кода
linenumberstrue
sudo nano /opt/wimark/set_state.sh


Информация

CTRL + S - сохранить изменения в файле.

CTRL + X - выйти из редактора.

4. Вставить содержимое в файл:

Блок кода
linenumberstrue
#!/bin/bash
TYPE=$1 NAME=$2 STATE=$3
LOG_STR="$(date) $STATE"
WORKDIR="/opt/wimark"
LOCK_FILE="ha_state"

case $STATE in
    "MASTER")
        echo "$STATE" > $WORKDIR/$LOCK_FILE
        LOG_STR="$LOG_STR: start primary"
        ;;
    "BACKUP")
        echo "$STATE" > $WORKDIR/$LOCK_FILE
	    LOG_STR="$LOG_STR: start secondary"
        ;;
    *)
	    echo "$STATE" > $WORKDIR/$LOCK_FILE
        LOG_STR="$LOG_STR: nothing"
        ;;
esac

5. Сделать эти скрипты исполняемыми:

Блок кода
sudo chmod +x /opt/wimark/checker.sh
sudo chmod +x /opt/wimark/set_state.sh

keepalived.conf для MASTER (первая машина)

Блок кода
sudo nano /etc/keepalived/keepalived.conf


Примечание
ВАЖНО! Переменные в данном файле необходимо заполнить самостоятельно.


Информация

Необходимо изменить:

{VIP} - виртуальный IP для keepalived
{PASSWORD} - пароль.
{INTERFACE} - интерфейс соединяющий 2 машины между собой.


Блок кода
linenumberstrue
global_defs {
    script_user root
    #enable_script_security
}

# Имя VRRP - WIM1
vrrp_instance WIM1 {

    # Имя интерфейса на котором работает VRRP: eth0 
    # ПОМЕНЯТЬ ИМЯ ИНТЕРФЕЙСА НА ТОТ, КОТОРЫМ СОЕДЕНИНЫ МАШИНЫ!!!
    interface {INTERFACE} 

    # Изначальное состояние текущей машины: MASTER или BACKUP
    state MASTER

    # уникального сегмента VRRP
    # Если в вашей сети уже используется VRRP, то проверьте, чтобы ID был уникальным (должен совпадать с backup!)
    virtual_router_id 120

    # preempt - Всегда назначать MASTER ту машину, которая имеет более высокий приоритет (если возможно)
    # nopreempt - Не изменять состояние после выхода из аварийного состояния
    # nopreempt

    garp_master_delay 1
    priority 200
    advert_int 1

    # Метод аутентификации и пароль (пароль может содержать максимум 8 символов)
    authentication {
        auth_type PASS
        auth_pass {PASSWORD}
    }

    # Виртуальный IP (VIP)
    virtual_ipaddress {
        # ПОМЕНЯТЬ IP И ИМЯ ИНТЕРФЕЙСА НА ТЕ, КОТОРЫЕ БЫЛИ УКАЗАННЫ КАК VIP ПРИ УСТАНОВКЕ!!!
        {VIP}/24 dev {INTERFACE} 
    }

    # Скрипт, который будет запускаться при изменении STATE - НЕ ТРОГАТЬ!
    notify /opt/wimark/set_state.sh
}

keepalived.conf для BACKUP (вторая машина)

Блок кода
sudo nano /etc/keepalived/keepalived.conf


Примечание
ВАЖНО! Переменные в данном файле необходимо заполнить самостоятельно.


Информация

Необходимо изменить:

{VIP} - виртуальный IP для keepalived
{PASSWORD} - пароль.
{INTERFACE} - интерфейс соединяющий 2 машины между собой.


Блок кода
linenumberstrue
global_defs {
    script_user root
    #enable_script_security
}

# Имя VRRP - WIM2
vrrp_instance WIM2 {

    # Имя интерфейса на котором работает VRRP: eth0
    # ПОМЕНЯТЬ ИМЯ ИНТЕРФЕЙСА НА ТОТ, КОТОРЫМ СОЕДЕНИНЫ МАШИНЫ!!!
    interface {INTERFACE}

    # Изначальное состояние текущей машины: MASTER или BACKUP
    state BACKUP

    # ID уникального сегмента VRRP
    # Если в вашей сети уже используется VRRP, то проверьте, чтобы ID был уникальным (должен совпадать с master!)
    virtual_router_id 120

    # preempt - Всегда назначать MASTER ту машину, которая имеет более высокий приоритет (если возможно)
    # nopreempt - Не изменять состояние после выхода из аварийного состояния
    # nopreempt

    garp_master_delay 1
    priority 200
    advert_int 1

    # Метод аутентификации и пароль (пароль может содержать максимум 8 символов)
    authentication {
        auth_type PASS
        auth_pass {PASSWORD}
    }

    # Виртуальный IP (VIP)
    virtual_ipaddress {
        # ПОМЕНЯТЬ IP И ИМЯ ИНТЕРФЕЙСА НА ТЕ, КОТОРЫЕ БЫЛИ УКАЗАННЫ КАК VIP ПРИ УСТАНОВКЕ!!!
        {VIP}/24 dev {INTERFACE} 
    }

    # Скрипт, который будет запускаться при изменении STATE - НЕ ТРОГАТЬ!
    notify /opt/wimark/set_state.sh
}

Запуск платформы

  1. Запустить платформу через скрипты:

Блок кода
# Для 1-й машины - MASTER
cd /opt/wimark/master/; sudo bash start.sh

# Для 2-й машины - BACKUP
cd /opt/wimark/backup/; sudo bash start.sh

2. Создать crontab для периодического запуска

...

checker

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!

3. Открыть список задач cron для пользователя root:

Блок кода
sudo crontab -u root -e

Если будет выбор редактора для редактирования, то выбрать редактор nano (1).

Информация

CTRL + S - сохранить изменения в файле.

CTRL + X - выйти из редактора.

4. Записать в список задачи для запуска - /opt/wimark/checker.sh

Блок кода
linenumberstrue
* * * * * bash /opt/wimark/checker.sh
* * * * * sleep 10 && bash /opt/wimark/checker.sh
* * * * * sleep 20 && bash /opt/wimark/checker.sh
* * * * * sleep 30 && bash /opt/wimark/checker.sh
* * * * * sleep 40 && bash /opt/wimark/checker.sh
* * * * * sleep 50 && bash /opt/wimark/checker.sh

5. Сохранить изменения и проверить:

Блок кода
sudo crontab -u root -l


Image Added

Рисунок 6 - Пример готового crontab

6. Перезапустить keepalived:

Примечание

ВАЖНО! Это необходимо выполнить на двух машинах!

При первом запуске контейнеры на MASTER машине не будут корректно работать до тех пор, пока не запустятся контейнеры на BACKUP машине.


Блок кода
service keepalived restart


Проверка работоспособности

Для контроля работоспособности Wimark One пользователю следует перейти на web интерфейс платформы. При успешном завершении установки отобразится форма авторизации в соответствии с рисунком 47.

Информация
Логин/пароль по умолчанию: wimark/wimark

Image Added

Рисунок 7 - Форма авторизации

Обновление Wimark One - HA

Процесс обновления Wimark One представляет собой: удаление старых компонентов и установку новой версии платформы.
Если нет необходимости в переносе старых данных (статистики, SSID, настроек ТД и т.д.), то необходимо только удалить старую версию платформы, а затем установить новую версию в соответствии с инструкцией.

Создание резервных копий

Перед созданием резервной копии БД необходимо убедиться в том, что на сервере достаточно свободного места.
Для создания резервной копии платформы Wimark One рекомендуется иметь минимум 6G свободного места.

...

При создании полной резервной копии БД копируются все данные, т.е. статистика, конфигурация, static, ключ и т.д. Использование данного метода гарантирует полное копирование данных, но значительно замедляет процесс восстановление БД, и сама резервная копия БД занимает довольно много места.

Создания полной резервной копии

  1. Создать резервную копию БД:

Примечание
Достаточно выполнить только на одной машине!


Блок кода
docker exec -it  $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
 awk '{ print $1;}') mongodump --port 30001 --db=test --gzip --archive=/tmp/backup_wimark.gz


Предупреждение

Failed: error creating intents to dump: error getting collections for database test: (NotPrimaryOrSecondary) node is not in primary or recovering state

БД должна быть PRIMARY, данное состояние может не совпадать с MASTER/BACKUP самой машины.
Поэтому при получении данной ошибки, следует повторить этот шаг на другой машине.


Информация
Если имя контейнера с MongoDB отличается от того, что указано в команде, то можно использовать docker ps для поиска нужного контейнера.

2. Создать папку для резервной копии:

Блок кода
sudo mkdir /opt/wimark_backup/

3. Копировать архив с резервной копией БД из контейнера в систему:

Блок кода
docker cp $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
 awk '{ print $1;}'):/tmp/backup_wimark.gz /opt/wimark_backup/

4. Создать резервную копию static файлов, которые находятся в папке /opt/wimark/static:

Блок кода
cp -r /opt/wimark/static /opt/wimark_backup/static


Информация
Если версия Wimark One ниже 1.10, то файлы будут находится каталоге /usr/share/wimark/static

Создание частичной резервной копии

  1. Создать резервную копию БД без коллекций со статистикой:

Блок кода
linenumberstrue
docker exec -it $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
 awk '{ print $1;}') bash

...


mongodump --port 30001 --db=test --excludeCollection=bss_stat_info \
 --excludeCollection=client_stat_info --excludeCollection=client_stats \
 --excludeCollection=cpe_stat_info --excludeCollection=stats \
 --excludeCollection=wlan_stat_info --gzip --archive=/tmp/backup_wimark.gz; exit


Предупреждение

Failed: error creating intents to dump: error getting collections for database test: (NotPrimaryOrSecondary) node is not in primary or recovering state

БД должна быть PRIMARY, данное состояние может не совпадать с MASTER/BACKUP самой машины.
Поэтому при получении данной ошибки, следует повторить этот шаг на другой машине.


2. Копировать архив с резервной копией БД из контейнера в систему:

Блок кода
docker cp $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
 awk '{ print $1;}'):/tmp/backup_wimark.gz /opt/wimark_backup/

3. Создать резервную копию static файлов, которые находятся в папке /opt/wimark/static:

Блок кода
cp -r /opt/wimark/static /opt/wimark_backup/static

Обновление ПО и перенос БД

Обновление ПО

  1. Перед удалением старой версии ПО необходимо скопировать скрипты и остановить сервис cron:

Примечание
ВАЖНО! Это необходимо выполнить на двух машинах!


Блок кода
linenumberstrue
sudo mkdir /opt/wimark_backup/
cp /opt/wimark/set_state.sh /opt/wimark_backup/set_state.sh
cp /opt/wimark/checker.sh /opt/wimark_backup/checker.sh
sudo service cron stop

2. Затем полностью удалить старую платформу:

Блок кода
sudo su
rm -r /opt/wimark; docker rm -f $(docker ps -qaf "name=one-|master|backup|one_")


Информация
Если версия Wimark One ниже 1.10, то файлы будут находится в каталоге /etc/wimark

Если на сервере в docker используется только Wimark One, то можно дополнительно выполнить эту команду:

Блок кода
docker system prune --all --volumes


Примечание
Данная команда удалит все остановленные контейнеры, “висящие” (неиспользуемые) Docker-образы, неиспользуемые сети и тома. Поэтому следует использовать данную команду только в том случае, если в Docker устанавливалось только ПО Wimark One.

3. Скачать новую версию ПО на сервер и запустить установку:

Блок кода
wget https://storage.wimark.com/api/public/dl/XZqjHaJe \
  -O /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run
sudo chmod +x /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run

4. Для запуска установки необходимо выполнить:

4.1. Запустить установку на 1-й машине:

Блок кода
sudo FIRST_IP={IP-1} SECOND_IP={IP-2} VIP={VIP} NEIGHBOR_IP={IP-2} /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run

4.2. После окончания переустановки, необходимо будет полностью перезагрузить сервер:

Блок кода
reboot

4.3. Запустить установку на 2-й машине:

Блок кода
sudo FIRST_IP={IP-1} SECOND_IP={IP-2} VIP={VIP} NEIGHBOR_IP={IP-1} /tmp/WiMark-ha-1.11.0-2023-10-30-qtech-installer.run

4.4 После окончания переустановки, необходимо будет полностью перезагрузить сервер:

Блок кода
reboot

5. Перенести ранее скопированные скрипты:

Блок кода
cp /opt/wimark_backup/set_state.sh /opt/wimark/set_state.sh
cp /opt/wimark_backup/checker.sh /opt/wimark/checker.sh



Информация

/tmp/ - каталог в котором хранятся временные файлы. Файлы удаляются спустя определенное время и после перезагрузки сервера.

{IP-1/2} - адрес машины.

{VIP} - виртуальный IP используемый сервисом keepalived.

https://storage.wimark.com/api/public/dl/XZqjHaJe - пример ссылки на прошивку.

WiMark-ha-1.11.0-2023-10-30-qtech-installer.run - пример имени файла, может отличаться в зависимости от сборки и версии ПО.


6. Запускаем сервис cron:

Блок кода
sudo service cron start

Перенос БД

  1. После того, как платформа завершила инициализацию и полноценно работает, необходимо принудительно остановить контейнер backend на MASTER ноде. Остановить cron для того, чтобы контейнер не смог переподняться по скрипту:
Блок кода
sudo service cron stop

2. Остановить контейнер:

Блок кода
docker stop $(docker ps | grep 'backend-golang-1' | awk '{ print $1;}')

3. Копировать ранее

...

созданную резервную копию БД в контейнер mongo:

Блок кода
docker cp /opt/wimark_backup/backup_wimark.gz $(docker ps | \
 grep 'one-mongo-1\|one-mongo-ha-1' | awk '{ print $1;}'):/tmp/

4. Запустить процесс восстановления из резервной копии:

Блок кода
docker exec -it $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
 awk '{ print $1;}') mongorestore --port 30001 --drop --nsInclude='test.*' \
 --gzip --archive=/tmp/backup_wimark.gz



Примечание

--drop - перезаписывает текущие данные в БД.

В зависимости от размеров коллекций и технических характеристик машины, этот процесс может занять от нескольких минут до нескольких часов!


5. Удалить новые и перенести старые файлы static:

Блок кода
rm -r /opt/wimark/static
cp -r /opt/wimark_backup/static /opt/wimark/

6. Запустить контейнер отвечающий за backend:

Блок кода
docker start $(docker ps | docker ps -a | grep 'backend-golang-1' | \
 awk '{ print $12;}')

7. Запускаем сервис cron:

Блок кода
sudo service cron start


Проверить работоспособность платформы в соответствии с разделом Проверка работоспособности