Документация Accelera

Рекомендации по резервному копированию БД

Введение

Резервному копированию подлежат следующие компоненты:

  1. Данные операционной БД Redis.
  2. Данные аналитической БД на примере Clickhouse.

Так как образы системы Accelera являются сервисными компонентами, которые не хранят в себе данные, их восстановление состоит в повторной установке образа на целевой хост.
То есть, вне зависимости от типа установки, вы можете скачать эти образы из хранилища артефактов (или загрузить из предоставляемого дистрибутива).

Резервное копирование операционной БД Redis

Если операционная БД находится в зоне ответственности оператора системы (не корпоративный кластер или managed-service) рекомендуется настроить резервное копирование данных.

Такое копирование может быть выполнено несколькими способами, 2 способа, не исключающих друг друга:

Местоположение файла резервной копии

Redis имеет 2 режима сохранения данных - снапшоты (RDB) и журнал запросов (AOF). В зависимости от режима сохранения следует обеспечить резервное копирование соответствующего файла. Узнать расположение файла с данными можно следующим образом:
Войдите в redis-cli, затем выполните команду
**

**

config get dir

Пример вывода

1) "dir"
2) "/var/lib/redis"

В данной директории вы увидите файл dump.rdb, в котором хранятся данные Redis. Если
на сервере включен appendonly, каталог может содержать также файл
appendonly.aof или же другие файлы с расширением .aof, в которых
хранятся логи всех операций записи, полученных сервером.

Если ваш Redis запущен в контейнере Docker обязательно создайте раздел (volume) в файловую систему хоста, чтобы при перезапуске контейнера ваши данные не потерялись.

Файл .rdb – это текущий снапшот, а файл .aof хранит историю Redis.

Теперь нужно создать резервную копию файла .rdb (или .aof) и настроить его автоматическое копирование.

Для этого есть несколько различных инструментов, выберите тот, который используется в вашей компании (или которому вы отдаете предпочтение).

Резервное копирование с помощью redis-cli

redis-cli позволяет подключиться в серверу под видом slave, запросить копию данных и сохранить их в файл, который уже можно безбоязненно сохранить в любое место на удаленной системе. В этом случае вы получаете абсолютно консистентный redis backup, не вмешиваясь в протоколы работы сервера, а используете штатный механизм master-slave. Сделать это можно следующим способом из командной строки:

redis-cli --rdb backup.rdb

Данная команда заставит redis-cli попытаться подключиться в серверу на этой же машине по адресу 127.0.0.1 к порту 6379, запросить копию данных и сохранить их в файл backup.rdb в текущем каталоге. Если вы хотите подключиться к серверу не локально, а по сети, то возможно следующие дополнительный ключи к redis-cli будут для вас полезны:

-h задает IP-адрес сервера
-p задает TCP-порт сервера, если он отличен от 6379
-a задает пароль, если сервер требует таковой

Скрипт резервного копирования

#!/bin/bash
 
REDIS_HOST=${REDIS_HOST:=localhost}
REDIS_PORT=${REDIS_PORT:=6379}
REDIS_PASSWORD=""
DATE=$(date +%Y%m%d)
BACKUP_PATH="/mnt/backup"
DAYS_TO_KEEP="7"
 
if [ ! -e ${BACKUP_PATH} ];
  then mkdir -p ${BACKUP_PATH}
fi
 
rm -f $(find ${BACKUP_PATH} -type f -mtime +${DAYS_TO_KEEP})
 
if [ -f ${BACKUP_PATH}/${DATE}_dump.rdb ];
  then echo "File already exists"
  exit 0
else
  CLI_OPTS="\
    -h ${REDIS_HOST} \
    -p ${REDIS_PORT} \
    --rdb ${BACKUP_PATH}/${DATE}_dump.rdb"
  if [ ! -z ${REDIS_PASSWORD} ]; then
    CLI_OPTS="${CLI_OPTS} -a ${REDIS_PASSWORD}"
  fi
 
  redis-cli $CLI_OPTS
 
  if [ $? -eq 0 ]
    then echo "Backup succsess"
    else echo "Backup error"
  fi
fi

Восстановление из копии

Для восстановления БД из резервной копии копируйте ваш .rdb или .aof файл в место, где он хранится для доступа Redis (в примере это /var/lib/redis). Затем запустите Redis и убедитесь, что копия успешно восстановилась (просмотрите логи на предмет ошибок или выполните команду info и проверьте примерный объем памяти и количества ключей).

Шаг 1. Останавливаем redis

systemctl stop redis-server

Шаг 2. Перемещаем файл резервной копии в директорию

sudo mv /path/to/dump.rdb /var/lib/redis/

По умолчанию место хранения .rdb файла Redis - /var/lib/redis. Если в настройке redis назначена другая директория - укажите ее.

Шаг 3. Запуск процесса Redis

systemctl start redis-server

Шаг 4. Проверка работоспособности

systemctl status redis-server

Убедитесь, что служба находится в активном режиме.

Также для того, чтобы убедиться в полном восстановлении из копии выполните команду

redis-cli get 1

Если вы получите (nil) или другое значение - вы справились, резервная копия была загружена из файла. Если в консоли отобразилось сообщение ERROR: LOADING Redis is loading the dataset in memory - значит датасет еще находится на стадии загрузки и Redis будет выдавать ошибку на любую команду.

Реплика в реальном времени

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

Более полная информация о репликации данных и инструкция по подключению доступна в документации Redis.

Резервное копирование аналитической БД Clickhouse

Для предотвращения потери аналитических данных (например аудиторского следа или логов работы сценариев) рекомендуется выполнять резервное копирование данных Clickhouse.

Основные способы:

  1. Дублирование данных
  2. Снимки файловой системы
  3. clickhouse-copier

Полная инструкция по каждому способу доступна на странице документации Clickhouse.

В Clickhouse нет возможности использования классических инструментов mysqldump или pg_dump, знакомых по реляционным СУБД MySQL или PostgreSQL. Физически база данных в Clickhouse оперирует не таблицами, а партициями – частями таблиц, которые объединены по одному из критериев. Например, по дням или месяцам. Таким образом, при выборке используется лишь необходимая партиция. На основе этого и выполняется резервное копирование.

Автоматизированное резервное копирование

Для автоматизированного бэкапа официальная документация clickhouse рекомендует инструмент от сторонних разработчиков clickhouse-backup.

Это инструмент с открытым исходным кодом, который имеет следующий функционал:

  • Простое создание и восстановление резервных копий всех или определенных таблиц
  • Эффективное хранение нескольких резервных копий в файловой системе
  • Загрузка и скачивание с потоковым сжатием
  • Работает с AWS, GCS, Azure, Tencent COS, FTP, SFTP.
  • Поддержка ядра атомарной базы данных
  • Поддержка многодисковых установок
  • Поддержка любого пользовательского удаленного хранилища, такого как **rclone**, **kopia**,**restic**
  • Поддержка инкрементных резервных копий на удаленных хранилищах

Выполнение копирования

Установите утилиту согласно инструкции из репозитория.

Затем создайте файл конфигурации _/etc/clickhouse-backup/_config.yml с таким содержимым:

clickhouse:
	username: default
	password: "password"
	host: localhost
	port: 9000
	data_path: "/var/lib/clickhouse"
	general:
	remote_storage: none
	backups_to_keep_local: 7
	backups_to_keep_remote: 31

Сохраните настройку, убедитесь, что можно подключиться к СУБД:

clickhouse-backup tables

Команда выше выведет список таблиц из clickhouse. Если список есть, значит конфиг корректный.

В примере, мы настраиваем локальное резервное копирование, для этого в конфиге /etc/clickhouse-backup/config.yml
указана строка:
remote_storage: none

Clickhouse-backup поддерживает загрузку и загрузку резервных копий из хранилища удаленных объектов (например, FTP/SFTP, S3, GCS или IBM COS). Детально с конфигурации выгрузки на удаленное хранилище можно ознакомиться в репозитории проекта.

Итак, создаем копию командой

clickhouse-backup create

Резервная копия хранится в каталоге /var/lib/clickhouse/backup. По умолчанию имя резервной копии - это временная метка. Вы можете вручную указать имя резервной копии. Например

clickhouse-backup create test.backup-19072021

Резервная копия содержит два каталога:

  • Каталог 'metadata': содержит DDL SQL, необходимый для воссоздания
  • 'shadow' каталог: содержит данные, полученные в результате операций ALTER TABLE ... FREEZE.

Восстановление данных

Для восстановления данных выполните команду

clickhouse-backup restore "name_backup"

Добавление в cron задачи резервного копирования:

vi /var/lib/clickhouse/scripts/backup-clickhouse.sh #!/bin/bash BACKUP_NAME=backup-clickhouse-$(date +%Y-%m-%d) clickhouse-backup create $BACKUP_NAME``# /usr/bin/clickhouse-backup upload $BACKUP_NAME

На этой странице