...
Войти под пользователем root следующей командой:
Блок кода |
---|
sudo su |
Установить Docker на сервер:
...
Необходимо создать нового пользователя - one
Блок кода |
---|
adduser one |
2. Добавить пользователя one в суперпользователей:
Блок кода |
---|
sudo usermod -a -G sudo one |
3. Войти в систему под этим пользователем:
Блок кода |
---|
su one |
4. Сгенерировать ssh ключ:
Блок кода |
---|
ssh-keygen |
Информация |
---|
После ввода данной команды, следует указать место хранения ключей или нажать Enter для того, чтобы принять путь по умолчанию. Запрос о введении кодовой фразы можно пропустить (может помешать автоматизации некоторых процессов). Далее в выводе указывается место, где хранятся ID и открытый ключ. |
...
5. Скопировать ssh-ключ на указанный сервер:
Блок кода |
---|
ssh-copy-id one@{IP} |
Информация |
---|
{IP} - IP сервера, куда будет скопирован ключ. После завершения, следует убедиться, что действительно получилось сделать беспарольный доступ между двумя серверами. Если при подключении запрос пароля не поступил, то всё работает правильно. |
...
Войти в режим редактирования файла /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. |
...
Загрузить дистрибутив 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 - пример имени файла, может отличаться в зависимости от сборки и версии ПО. |
...
Создать скрипт: /opt/wimark/checker.sh
Блок кода |
---|
sudo nano /opt/wimark/checker.sh |
Информация |
---|
CTRL + S - сохранить изменения в файле. CTRL + X - выйти из редактора. |
...
Блок кода |
---|
sudo nano /etc/keepalived/keepalived.conf |
Примечание |
---|
ВАЖНО! Переменные в данном файле необходимо заполнить самостоятельно. |
Информация |
---|
Необходимо изменить: {VIP} - виртуальный IP для keepalived |
...
keepalived.conf для BACKUP (вторая машина)
Блок кода |
---|
sudo nano /etc/keepalived/keepalived.conf |
Примечание |
---|
ВАЖНО! Переменные в данном файле необходимо заполнить самостоятельно. |
Информация |
---|
Необходимо изменить: {VIP} - виртуальный IP для keepalived |
Блок кода | ||
---|---|---|
| ||
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-й машины - 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
* * * * * 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 |
Рисунок 6 - Пример готового crontab
6. Перезапустить keepalived:
Примечание |
---|
ВАЖНО! Это необходимо выполнить на двух машинах! |
При первом запуске контейнеры на MASTER машине не будут корректно работать до тех пор, пока не запустятся контейнеры на BACKUP машине.
Блок кода |
---|
service keepalived restart |
Проверка работоспособности
Для контроля работоспособности Wimark One пользователю следует перейти на web интерфейс платформы. При успешном завершении установки отобразится форма авторизации в соответствии с рисунком 47.
Информация |
---|
Логин/пароль по умолчанию: wimark/wimark |
Рисунок 7 - Форма авторизации
Обновление Wimark One - HA
...
Если имя контейнера с 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
...
Создать резервную копию БД без коллекций со статистикой:
Блок кода | ||
---|---|---|
| ||
docker exec -it $(docker ps | grep 'one-mongo-1\|one-mongo-ha-1' | \
awk '{ print $1;}') bash |
...
mongodump --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 |
Обновление ПО и перенос БД
...
Перед удалением старой версии ПО необходимо скопировать скрипты и остановить сервис cron:
Примечание |
---|
ВАЖНО! Это необходимо выполнить на двух машинах! |
Блок кода | ||
---|---|---|
| ||
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/ - каталог в котором хранятся временные файлы. Файлы удаляются спустя определенное время и после перезагрузки сервера.
...
WiMark-ha-1.11.0-2023-10-30-qtech-installer.run - пример имени файла, может отличаться в зависимости от сборки и версии ПО.
6. Запускаем сервис cron:
Блок кода |
---|
sudo service cron start |
Перенос БД
- После того, как платформа завершила инициализацию и полноценно работает, необходимо принудительно остановить контейнер 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 |
Проверить работоспособность платформы в соответствии с разделом Проверка работоспособности