Backup и восстановление ВМ Визион

Данная инструкция является дополнением для выстроенной избыточной многоуровневой системы бэкапирования ВМ Визиона. Предполагается, что в продуктовой среде заказчика уже существует своя штатная система бэкапирования:

  • Штатными средствами виртуализации, где развёрнута ВМ Визиона
  • Клиент-серверная система бэкапирования (VEEM, UrBackup, Bacula и т.п.)

1. Создание резервной копии (бэкапа)#

1.1 Предварительная подготовка на ВМ#

Создайте папки для складирования бэкапов с помощью команд: mkdir /opt/db_dump/ && mkdir /opt/db_dump_nfs/ && mkdir /opt/backup_nfs/ && mkdir /opt/backup/

Настоятельно рекомендуется не хранить локально бэкапы в ВМ, а примонтировать по nfs созданные папки для складирования по расписанию бэкапов вне самой ВМ, на внешнее блочное устройство во избежания фризов и потери данных из-за повреждения ВМ.

Установите клиентские пакеты для nfs, rsync или smb (если эти пакеты не установлены). Рекомендуется родной для Linux nfs, а не smb. RedOS, CentOS, Fedora, RedHat like: dnf install -y nfs-utils samba-client rsync rsync-daemon Ubuntu, Debian, LinuxMint like: apt-get install -y samba-client nfs-common rsync Alt Linux: apt-get install -y samba-client nfs-clients rsync

Смонтируйте по nfs (как пример, в вашем случае пути и адрес сервера nfs будет свой) директории с помощью команд: mount -t nfs 10.6.66.7:/mnt/data1/backup/vm_vision/db_dump/ /opt/db_dump_nfs/ && mount -t nfs 10.6.66.7:/mnt/data1/backup/vm_vision/backup/ /opt/backup_nfs/ Для постоянного монтирования после перезагрузки необходимо отредактировать файл /etc/fstab, где указать точки монтирования:

10.6.66.7:/mnt/data1/backup/vm_spectrum/db_dump/ /opt/db_dump_nfs/     nfs     defaults        0 0
10.6.66.7:/mnt/data1/backup/vm_spectrum/backup/ /opt/backup_nfs/       nfs     defaults        0 0

и проверить правильность синтаксиса: mount -a

  • Для теста необходимо перейти в смонтированную папку и создать какой-либо файл.
  • Возможно потребуется перегрузить демона для перезаписи точек монтирования, если были ранее шары и ошибки подключения: systemctl daemon-reload

1.2 Файловый бэкап и дамп БД#

Найти, где находится data БД и содержимое конфига pg_hba.conf с помощью команды systemctl status postgresql.service Проверьте, чтобы флаг в строке “local replication all” БЫЛ trust cat /var/lib/pgsql/data/pg_hba.conf Если в текущем релизе его нет и стоит md5, то замените на trust и перегрузите демона БД: systemctl restart postgresql.service Для файлового бэкапа сервиса и дампа БД предлагается использовать простой Bash скрипт, который можно встроить в планировщик и бэкапить по расписанию или вручную. Создать скрипт: mkdir /opt/scripts/ && vim /opt/scripts/backup_vision.sh Содержание скрипта:

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  
pathA=/opt/db_dump
pathA1=/opt/db_dump/*
pathB=/opt/db_dump_nfs
pathC=/opt/backup_nfs
pathD=/opt/skala-r
pathE=/etc/systemd/system
pathF=/etc/nginx
pathG=/opt/backup
pathG1=/opt/backup/*
 
  
# Остановка сервисов Визион
systemctl stop vision_core.service
systemctl stop vision_taskdaemon.service
systemctl stop vision_alertcollector.service
systemctl stop plagent.service
systemctl stop vision_ha_cluster_exporter.service
systemctl stop alertmanager.service
systemctl stop snmp_notifier.service
systemctl stop vision_ipmi_exporter.service
systemctl stop vision_node_exporter.service
systemctl stop vision_one_exporter.service
systemctl stop vision_snmp_exporter.service
systemctl stop vision_utlz_exporter.service
systemctl stop vision_postgres_exporter_multi.service
systemctl stop vision_sql_exporter.service
systemctl stop vision_vmagent_agent.service
systemctl stop vision_vmagent_proxy.service
systemctl stop vmalert_st.service
systemctl stop victoriametrics_st.service
systemctl stop grafana.service
systemctl stop nginx.service
  
# Полный дамп БД Визион со всеми конфигами
pg_basebackup -U postgres -D /opt/postgre_bak/ && tar -cvf $pathA/vision_db-$(date "+%Y-%m-%d").tar.gz /opt/postgre_bak/ && rm -rf /opt/postgre_bak/
systemctl stop postgresql.service
  
# Архивируем содержимое директорий
cd $pathG/
tar -czvf /opt/backup/vision_skala-r-$(date "+%Y-%m-%d").tar.gz $pathD/
tar -czvf /opt/backup/vision_system-$(date "+%Y-%m-%d").tar.gz $pathE/
tar -czvf /opt/backup/vision_nginx-$(date "+%Y-%m-%d").tar.gz $pathF/
 
# Копирование содержимого рабочей папки Визиона, конфигов и дампов БД в бэкап папку (nfs сервер).
# Cинтаксис cp: cp -options <source> <destination>
# Опция cp -n, --no-clobber - не перезаписывать существующие файлы;
# Опция cp -R, --recursive - копировать папку Linux рекурсивно;
# Опция cp -u, --upgrade - скопировать файл, только если он был изменён;
cp -Run $pathG1 $pathC/
cp -Run $pathA1 $pathB/
  
# Запуск сервисов Визион
systemctl start postgresql.service
systemctl start vision_core.service
systemctl start vision_taskdaemon.service
systemctl start vision_alertcollector.service
systemctl start plagent.service
systemctl start vision_ha_cluster_exporter.service
systemctl start alertmanager.service
systemctl start snmp_notifier.service
systemctl start vision_ipmi_exporter.service
systemctl start vision_node_exporter.service
systemctl start vision_one_exporter.service
systemctl start vision_snmp_exporter.service
systemctl start vision_utlz_exporter.service
systemctl start vision_postgres_exporter_multi.service
systemctl start vision_sql_exporter.service
systemctl start vision_vmagent_agent.service
systemctl start vision_vmagent_proxy.service
systemctl start vmalert_st.service
systemctl start victoriametrics_st.service
systemctl start grafana.service
systemctl start nginx.service
  
# Удаление/ротация файлов дампа БД старше 1 дня в ВМ и 7 дней на nfs шаре
find $pathA/ -type f -mtime +1 -delete
find $pathG/ -type f -mtime +1 -delete
find $pathB/ -type f -mtime +7 -delete
find $pathC/ -type f -mtime +7 -delete

для вашего случая в скрипте могут быть свои пути до папок. Сделайте скрипт исполняемым и запустите ручной бэкап: chmod +x /opt/scripts/backup_vision.sh && /opt/scripts/backup_vision.sh На вашей шаре появятся бэкапы:

Существует возможность через дефолтный планировщик назначить задачу ночного бэкапа ВМ, запуская предложенный скрипт. Для этого запустите crontab: crontab -e Внесите необходимый период запуска и сохраните изменения. Для примера взят запуск в 4-30 минут каждую ночь: 30 4 * * * /opt/scripts/backup_vision.sh

2. Восстановление из бэкапа#

Рассматривается вариант восстановления с учетом полного уничтожения или серьезных фризов в текущей ВМ Визион при имеющихся в неприкосновенности бэкапов на удалённой nfs шаре.

  1. Установите чистую ОС из золотого сертифицированного образа и отключите SELINUX (если это требуется в ОС) - установите SELINUX=disabled в файле /etc/sysconfig/selinux и перезагрузите систему. Для примера RED OS:
  2. Установите пустой сервис Визион на эту ВМ согласно руководству пользователя. Важно устанавливать именно тот релиз, который был у отбекапленной потерянной машины Визион. Рассмотрим для примера вариант установки для ОС RED OS MUROM (7.3) и релизной версии Визион v1.4.0-289. Необходимо скачать с репозитория, перенести с флэшки или через scp. В примере разобран вариант скачивания с репозитория Sonatype Nexus repository. Далее необходимо разархивировать дистрибутив и запустить скрипт установки:
cd /opt/ && mkdir -p vision-dist && cd vision-dist/
wget "http://nexus-repo.int.skala-r.tech:8081/repository/vision-artifacts/vision_distrib/1.4/vision-distrib-1.4-289.tar.gz"
tar -xvf vision-distrib-1.4-289.tar.gz
cd vision-distrib-1.4-289/ && ./setup.sh -s 192.168.186.200

где 192.168.186.200 - IP адрес ВМ, где будет разворачиваться ВИЗИОН. При удачной установке увидем положительный отчёт: и запуск пустого сервиса в браузере: При необходимости по руководству пользователя можно доставить дополнительные плагины и экспортеры. В инструкции это не будет рассмотрено.

  1. Остановите сервисы:
systemctl stop vision_core.service
systemctl stop vision_taskdaemon.service
systemctl stop vision_alertcollector.service
systemctl stop plagent.service
systemctl stop vision_ha_cluster_exporter.service
systemctl stop alertmanager.service
systemctl stop snmp_notifier.service
systemctl stop vision_ipmi_exporter.service
systemctl stop vision_node_exporter.service
systemctl stop vision_one_exporter.service
systemctl stop vision_snmp_exporter.service
systemctl stop vision_utlz_exporter.service
systemctl stop vision_postgres_exporter_multi.service
systemctl stop vision_sql_exporter.service
systemctl stop vision_vmagent_agent.service
systemctl stop vision_vmagent_proxy.service
systemctl stop vmalert_st.service
systemctl stop victoriametrics_st.service
systemctl stop grafana.service
systemctl stop nginx.service
systemctl stop postgresql.service
  1. Скопируйте с перезаписыванием файлы бэкапов Скопируйте с присоединённой предварительно к новой ВМ nfs шары файлы с бэкапами и назначьте права на папки. Пример:
cp -Run /opt/backup_nfs/* /opt/backup/
tar -C /etc/nginx/ -xvf /opt/backup/vision_nginx-2024-09-02.tar.gz --strip-components 2 --same-owner
tar -C /opt/skala-r/ -xvf /opt/backup/vision_skala-r-2024-09-02.tar.gz --strip-components 2 --same-owner
tar -C /etc/systemd/system/ -xvf /opt/backup/vision_system-2024-09-02.tar.gz --strip-components 3 --same-owner
rm -rf /opt/backup/*
  1. Удалите старые БД и убедитесь, что ничего лишнего нет
systemctl start postgresql.service
psql -U postgres
postgres=# DROP DATABASE vision_db;
DROP DATABASE
postgres=# /l
postgres-# \q
  1. Восстановите БД

Найдите место расположения конфигов БД с помощью команды: systemctl status postgresql.service В нашем случае это: /var/lib/pgsql/data/. В этот каталог нам будет нужно восстановить наш бэкап БД

Остановите БД, скопируйте бэкап БД (в нашем примере с nfs шары), вычистите data БД и разархивируйте туда бэкап БД.

systemctl stop postgresql.service
cp -Run /opt/db_dump_nfs/* /opt/db_dump/
tar -C /var/lib/pgsql/data/ -xvf /opt/db_dump/vision-2024-09-02.tar.gz --strip-components 2 --same-owner
chown -R postgres:postgres /var/lib/pgsql/data/*
rm -rf /opt/db_dump/vision-2024-09-02.tar.gz
  1. Запустите сервисы
systemctl daemon-reload
systemctl start postgresql.service
systemctl start vision_core.service
systemctl start vision_taskdaemon.service
systemctl start vision_alertcollector.service
systemctl start plagent.service
systemctl start vision_ha_cluster_exporter.service
systemctl start alertmanager.service
systemctl start snmp_notifier.service
systemctl start vision_ipmi_exporter.service
systemctl start vision_node_exporter.service
systemctl start vision_one_exporter.service
systemctl start vision_snmp_exporter.service
systemctl start vision_utlz_exporter.service
systemctl start vision_postgres_exporter_multi.service
systemctl start vision_sql_exporter.service
systemctl start vision_vmagent_agent.service
systemctl start vision_vmagent_proxy.service
systemctl start vmalert_st.service
systemctl start victoriametrics_st.service
systemctl start grafana.service
systemctl start nginx.service
systemctl daemon-reload && systemctl reboot

Если виден нормально работающий инстанс, демоны, работающие штатно сервисы Визион с данными, которые были до этого, то восстановление прошло удачно.

ВНИМАНИЕ! Нужно понимать, что в предложенном варианте бэкапа ВМ Визион метрики, на период простоя ВМ и восстановления, будут отсутствовать. Если делался бэкап по расписанию, допустим в 4-30 утра, а других бэкапов нет, восстановлена ВМ, допустим, в 10-00, то период с 4-30 до 10-00 данные будут отсутствовать в машине Визион. Это нужно иметь в виду при восстановлении.

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