Данная инструкция является дополнением для выстроенной избыточной многоуровневой системы бэкапирования ВМ Визиона. Предполагается, что в продуктовой среде заказчика уже существует своя штатная система бэкапирования:
- Штатными средствами виртуализации, где развёрнута ВМ Визиона
- Клиент-серверная система бэкапирования (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 шаре.
- Установите чистую ОС из золотого сертифицированного образа и отключите SELINUX (если это требуется в ОС) - установите
SELINUX=disabled
в файле/etc/sysconfig/selinux
и перезагрузите систему. Для примера RED OS: - Установите пустой сервис Визион на эту ВМ согласно руководству пользователя. Важно устанавливать именно тот релиз, который был у отбекапленной потерянной машины Визион. Рассмотрим для примера вариант установки для ОС 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 адрес ВМ, где будет разворачиваться ВИЗИОН. При удачной установке увидем положительный отчёт: и запуск пустого сервиса в браузере: При необходимости по руководству пользователя можно доставить дополнительные плагины и экспортеры. В инструкции это не будет рассмотрено.
- Остановите сервисы:
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
- Скопируйте с перезаписыванием файлы бэкапов Скопируйте с присоединённой предварительно к новой ВМ 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/*
- Удалите старые БД и убедитесь, что ничего лишнего нет
systemctl start postgresql.service
psql -U postgres
postgres=# DROP DATABASE vision_db;
DROP DATABASE
postgres=# /l
postgres-# \q
- Восстановите БД
Найдите место расположения конфигов БД с помощью команды:
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
- Запустите сервисы
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 данные будут отсутствовать в машине Визион. Это нужно иметь в виду при восстановлении.
Также нужно понимать что на период создания по скрипту бэкапа у нас также будут отсутствовать метрики из-за остановки сервиса и БД. В зависимости от размера данных в машине, скорости сети этот период может варьироваться от нескольких минут до нескольких десятков минут. Поэтому, настоятельно рекомендуется иметь многоуровневую и избыточную систему бэкапирования ВМ, включающим штатные средства виртуализации и клиент-серверной системы бэкапа, а не ограничиваться исключительно предложенным вариантом.