Резервное копирование и восстановление данных
Система предусматривает возможность создания резервных копий, восстановления и переноса основных данных между различными инсталляциями.
MongoDB
MongoDB – NoSQL-СУБД, которая является основным хранилищем данных о пользователях, объектах и связях, их свойствах, состояниях и авариях.
Резервирование
Для экспорта данных из MongoDB в архив необходимо создать и выполнить следующий скрипт:
console
$ sudo /opt/saymon-scripts/mongodump.shПример текста скрипта (необходимо указать HOST, LOGIN, PASS):
shell
#!/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, например:
console
$ sudo crontab -e
0 */2 * * * /opt/saymon-scripts/mongodump.sh
10 */2 * * * ls -tr /backups/mongo | xargs realpath | head -n -6 | xargs rmВосстановление
Для восстановления или импорта данных в MongoDB необходимо создать и выполнить следующий скрипт:
console
$ sudo /opt/saymon-scripts/mongorestore.shПример текста скрипта (необходимо указать HOST, LOGIN, PASS):
shell
#!/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 в архив на существующей инсталляции системы необходимо создать и выполнить следующий скрипт:
console
$ sudo /opt/saymon-scripts/hbasedump.shNOTE
Директория с данными OpenTSDB может отличаться в разных инсталляциях сервера. Перед созданием скрипта убедитесь в наличии данных в директории, указанной в переменной
SOURCE. Данные OpenTSDB могут храниться в следующих директориях:/var/lib/hbase/data/var/lib/docker/volumes/<volume_id>/_data/hbase-root/hbaseТакже, папкуhbaseможно попробовать найти командой:
Пример текста скрипта:
shell
#!/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.
NOTE
Директория, в которую сохраняются резервные копии должна существовать перед выполнением скрипта.
Для периодического автоматического создания новых и удаления старых резервных копий можно добавить соответствующие команды в crontab, например:
console
$ sudo crontab -e
0 */2 * * * /opt/saymon-scripts/hbasedump.sh
10 */2 * * * ls -tr /backups/hbase | xargs realpath | head -n -6 | xargs rmВосстановление
Для восстановления или импорта данных в OpenTSDB на новой инсталляции системы необходимо создать и выполнить следующий скрипт:
console
$ sudo /opt/saymon-scripts/hbaserestore.shNOTE
Директория с данными OpenTSDB может отличаться в разных инсталляциях сервера. Перед созданием скрипта убедитесь в правильности директории, указанной в переменной
DEST.
Текст скрипта:
shell
#!/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.