Резервное копирование Cold-standby¶
animails предлагает простой способ создания согласованной копии системы для передачи через rsync на удаленный узел без простоя.
Это также можно использовать для переноса вашего animails на новый сервер.
Что следует знать¶
Предоставленный скрипт будет работать в установках по умолчанию.
Он может перестать работать, если вы используете неподдерживаемые переопределения томов (volume overrides). Мы не поддерживаем это и не будем внедрять «хаки» для их поддержки. Пожалуйста, используйте и поддерживайте собственный форк, если планируете сохранять свои изменения.
Скрипт будет использовать те же пути, что и в вашей установке animails по умолчанию. Это базовая директория animails (для большинства пользователей /opt/animails), а также точки монтирования.
Чтобы найти пути к вашим исходным томам, мы используем docker inspect и считываем целевую директорию каждого тома, связанного с вашим проектом animails compose. Это означает, что мы также перенесем тома, которые вы могли добавить в файл переопределения. Локальные монтирования (bind mounts) могут работать, а могут и нет.
Скрипт использует rsync с флагом --delete. Место назначения будет точной копией источника.
mariabackup используется для создания согласованной копии директории данных SQL.
После синхронизации данных через rsync мы запустим команду ниже (в зависимости от типа docker compose, установленного в animails.conf) и удалим старые теги образов в месте назначения:
docker compose pull
docker-compose pull
Ваш исходный сервер не будет изменен ни в какой момент времени.
Вам стоит убедиться, что на удаленном целевом сервере используется тот же /etc/docker/daemon.json.
Не следует запускать создание снимков диска (например, через ZFS, LVM и т. д.) на целевом сервере в то же самое время, когда запущен этот скрипт.
Версионность не является частью этого скрипта, мы полагаемся на целевую сторону (снимки или резервные копии). Вы также можете использовать любой другой инструмент для этих целей.
Подготовка¶
Вам понадобится целевой сервер с включенным SSH и файл ключа для подключения к нему. Ключ не должен быть защищен паролем, чтобы скрипт мог работать в автоматическом режиме.
В базовой директории animails (например, /opt/animails) вы найдете файл create_cold_standby.sh.
Отредактируйте этот файл и измените экспортируемые переменные:
export REMOTE_SSH_KEY=/path/to/keyfile
export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=animails-backup.host.name
Владельцем ключа должен быть root, и он должен быть доступен только для чтения пользователю root.
Как на источнике, так и в месте назначения требуется rsync версии >= 3.1.0.
В месте назначения должны быть доступны Docker и docker compose v2.
Скрипт автоматически обнаружит ошибки и завершит работу.
Вы можете проверить соединение, выполнив команду ssh animails-backup.host.name -p22 -i /путь/к/файлу/ключа.
Важно при переходе на другую архитектуру
Если вы планируете использовать скрипт Cold Standby для миграции с x86 на ARM64 или наоборот, просто запустите скрипт в обычном режиме. Скрипт автоматически распознает наличие различий в архитектуре между источником и целью, поведет себя соответствующим образом и исключит затронутые тома из синхронизации.
Причина в том, что Rspamd компилирует записи регулярных выражений из наших конфигураций под соответствующую платформу, и эти файлы кэша невозможно прочитать при смене платформы. В таком случае Rspamd аварийно завершит работу, что сделает невозможным полноценное использование animails. Поэтому том rspamd-vol-1 будет исключен при использовании скрипта Cold-standby.
Не беспокойтесь! Rspamd будет корректно работать после миграции, так как он автоматически создаст эти файлы кэша для новой платформы.
Резервное копирование и обновление cold-standby¶
Запустите первое резервное копирование, это может занять некоторое время в зависимости от скорости соединения:
bash /opt/animails/create_cold_standby.sh
Это было просто, не так ли?
Обновить ваш cold-standby так же легко:
bash /opt/animails/create_cold_standby.sh
Это та же самая команда.
Автоматическое резервное копирование с помощью cron¶
Сначала убедитесь, что служба cron включена и запущена:
systemctl enable cron.service && systemctl start cron.service
Для автоматизации резервного копирования на сервер cold-standby можно использовать задачу cron. Чтобы отредактировать задачи cron для пользователя root, выполните:
crontab -e
Добавьте следующие строки для ежедневной синхронизации сервера cold standby в 03:00. В этом примере ошибки последнего выполнения записываются в файл лога.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * bash /opt/animails/create_cold_standby.sh 2> /var/log/animails-coldstandby-sync.log
Если задача сохранена правильно, ее можно увидеть, введя:
crontab -l