Резервное копирование и восстановление данных

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

MongoDB

MongoDB - NoSQL-СУБД, которая является основным хранилищем данных о пользователях, объектах и связях, их свойствах, состояниях и авариях.

Резервирование

Для экспорта данных из MongoDB в архив необходимо создать и выполнить следующий скрипт:

$sudo /opt/saymon-scripts/mongodump.sh

Пример текста скрипта (необходимо указать HOST, LOGIN, PASS):

#!/bin/bash
BACKUP=/backups/mongo/mongodump-$(date +%F-%H-%M).gz
HOST='10.130.0.10'
LOGIN='saymon'
PASS='5tr43ewQ21'

# Outputs a log message, prefixed with current date-time.
log() {
    echo "[`date`] $1"
}

# Create MongoDB backup.
mongodump -h"$HOST" -u"$LOGIN" -p"$PASS" --db saymon --gzip --archive > "$BACKUP"

log "MongoDB stored to $BACKUP"

По умолчанию резервная копия создается в директории /backups/mongo в формате gz.

Для периодического автоматического создания новых и удаления старых резервных копий можно добавить соответствующие команды в crontab, например:

$sudo crontab -e

0 */2 * * * /opt/saymon-scripts/mongodump.sh
10 */2 * * * ls -tr /backups/mongo | xargs realpath | head -n -6 | xargs rm

Восстановление

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

$sudo /opt/saymon-scripts/mongorestore.sh

Пример текста скрипта (необходимо указать HOST, LOGIN, PASS):

#!/bin/bash
HOST='10.130.0.10'
LOGIN='saymon'
PASS='5tr43ewQ21'

# Outputs a log message, prefixed with current date-time.
log() {
    echo "[`date`] $1"
}

# Directory for MongoDB backups.
DIR=/backups/mongo

# Ask user to specify dump file.
read  -p "Please specify backup file, e.g. mongodump-2021-04-15-14-10.gz: " BACKUP

# Check if BACKUP exists, remove DIR if ndeeded.
if [[ "$BACKUP" = */backups/mongo/* ]]; then
  BACKUP=$(sed 's/\/backups\/mongo\///' <<< "$BACKUP")
fi

if [ -f $DIR/$BACKUP ]; then
  log "Backup file $DIR/$BACKUP found!"
else
  log "Backup file $DIR/$BACKUP not found!"
  exit 1
fi

# Create MongoDB backup.
mongorestore -h"$HOST" -u"$LOGIN" -p"$PASS" --db saymon --drop --noIndexRestore --gzip --archive="$DIR/$BACKUP"
redis-cli -h 10.130.0.10 -a '$6$9UG8HCr0nqj$bVMZfvDKTobl' flushall

log "MongoDB, database saymon, restored from $DIR/$BACKUP"

OpenTSDB

OpenTSDB — специализированное хранилище временных рядов, в котором хранятся числовые метрики, используемые при построении графиков.

Резервирование

Для экспорта данных из OpenTSDB в архив на существующей инсталляции системы необходимо создать и выполнить следующий скрипт:

$sudo /opt/saymon-scripts/hbasedump.sh

Директория с данными OpenTSDB может отличаться в разных инсталляциях сервера. Перед созданием скрипта убедитесь в наличии данных в директории, указанной в переменной SOURCE.

Данные OpenTSDB могут храниться в следующих директориях:

  • /var/lib/hbase

  • /data

  • /var/lib/docker/volumes/<volume_id>/_data/hbase-root/hbase

Также, папку hbase можно попробовать найти командой:

$ sudo find / -type d -name 'hbase'

Пример текста скрипта:

#!/bin/bash
SOURCE=/var/lib/hbase
BACKUP=/backups/hbase/hbasedump-$(date +%F-%H-%M).tar.gz

# Outputs a log message, prefixed with current date-time.
log() {
    echo "[`date`] $1"
}

# Create HBase backup.
tar zcvf "$BACKUP" "$SOURCE"

log "HBase stored to $BACKUP"

По умолчанию резервная копия создается в директории /backups/hbase в формате .tar.gz.

Директория, в которую сохраняются резервные копии должна существовать перед выполнением скрипта.

Для периодического автоматического создания новых и удаления старых резервных копий можно добавить соответствующие команды в crontab, например:

$sudo crontab -e

0 */2 * * * /opt/saymon-scripts/hbasedump.sh
10 */2 * * * ls -tr /backups/hbase | xargs realpath | head -n -6 | xargs rm

Восстановление

Для восстановления или импорта данных в OpenTSDB на новой инсталляции системы необходимо создать и выполнить следующий скрипт:

$sudo /opt/saymon-scripts/hbaserestore.sh

Директория с данными OpenTSDB может отличаться в разных инсталляциях сервера. Перед созданием скрипта убедитесь в правильности директории, указанной в переменной DEST.

Текст скрипта:

#!/bin/bash
#
# Outputs a log message, prefixed with current date-time.
log() {
    echo "[`date`] $1"
}

# Directory for OpenTSDB backups.
DIR=/backups/hbase

# Where to restore OpenTSDB data.
DEST=/var/lib/hbase

# Ask user to specify dump file.
read  -p "Please specify backup file, e.g. hbasedump-2021-04-15-14-31.tar.gz: " BACKUP

# Check if BACKUP exists, remove DIR if ndeeded.
if [[ "$BACKUP" = */backups/hbase/* ]]; then
  BACKUP=$(sed 's/\/backups\/hbase\///' <<< "$BACKUP")
fi

if [ -f $DIR/$BACKUP ]; then
  log "Backup file $DIR/$BACKUP found!"
else
  log "Backup file $DIR/$BACKUP not found!"
  exit 1
fi

# Restore from BACKUP.
docker stop opentsdb
rm -rf "$DEST"
mkdir -p "$DEST" && tar xvf $DIR/$BACKUP -C /
docker start opentsdb

log "HBase restored from $DIR/$BACKUP"

Конфигурационные файлы

Для экспорта настроек конфигурации необходимо сделать копию директории с конфигурационными файлами /etc/saymon.

Для импорта настроек конфигурации необходимо поместить файлы из ранее сохранённой директории с конфигурационными файлами в директорию /etc/saymon.