Help:Backup: Difference between revisions
(move backups info to the separate page) |
(change SVACER_OBJECT_STORE to SVACER_OBJECTS) |
||
(8 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Создание и восстановление резервной копии == | == Создание и восстановление резервной копии == | ||
Для переноса Svacer на другой сервер создайте резервные копии БД PostgreSQL и object store как описано ниже и восстановите их на новом сервере. | |||
{{Note|text=Для бэкапов PostgreSQL можно использовать более продвинутые решения, чем входящий в состав PostgreSQL pg_dump, например [https://github.com/postgrespro/pg_probackup pg_probackup]. В нем поддерживаются инкрементальные бэкапы, валидация бэкапа после создания, и прочие полезные возможности. Описание его настройки и использования смотрите в их [https://postgrespro.github.io/pg_probackup/ документации]}} | |||
=== Если PostgreSQL запущен в виде сервиса === | === Если PostgreSQL запущен в виде сервиса === | ||
Если PostgreSQL запущен в виде сервиса | Если PostgreSQL запущен в виде сервиса, то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа: | ||
sudo su -l postgres | sudo su -l postgres | ||
Line 10: | Line 13: | ||
В результате дамп БД будет создан в файле svacer.sql | В результате дамп БД будет создан в файле svacer.sql | ||
Для восстановления БД из дампа | Для восстановления БД из дампа перейдите в пользователя postgres и запустите восстановление | ||
sudo su -l postgres | sudo su -l postgres | ||
psql -f svacer.sql svacer_db | psql -f svacer.sql svacer_db | ||
Line 28: | Line 32: | ||
cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db | cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db | ||
=== Бэкап object store | === Бэкап object store в файле === | ||
Этот способ хорошо подходит | Этот способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и не желательно останавливать сервер Svacer. | ||
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin) | Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin) | ||
Line 38: | Line 42: | ||
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''. | Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''. | ||
svacer server --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak | svacer-server run --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak | ||
Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой. | Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой. | ||
=== Бэкап object store в сервере PostgreSQL === | === Бэкап object store в сервере PostgreSQL === | ||
Резервную копию object store можно сохранить в | Резервную копию object store можно сохранить в PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит, если object store не очень большой, в пределах нескольких гигабайт. | ||
Создание бэкапа: | Создание бэкапа: | ||
Line 71: | Line 73: | ||
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте: | Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте: | ||
svacer server --load-from-pg-backup=<id> | svacer-server run --load-from-pg-backup=<id> | ||
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа. | где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа. | ||
Line 79: | Line 81: | ||
svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper> | svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper> | ||
где <lower> и <upper> нижняя и верхняя граница ID бэкапов. | где <lower> и <upper> — нижняя и верхняя граница ID бэкапов. | ||
При запуске сервера можно указать в переменной окружения SVACER_KV_BACKUP_MAX_AGE время хранения таких бэкапов. Задается в формате [https://pkg.go.dev/time#ParseDuration duration], к примеру 24h, 2h30m, 5m30s. По умолчанию 30 дней (720h). Очистка проводится как часть сборки мусора (т. е. периодичность проверки задается через переменную SVACER_GC_PERIOD). | |||
SVACER_GC_PERIOD=2h SVACER_KV_BACKUP_MAX_AGE=720h svacer-server run | |||
=== Бэкап object store вручную === | === Бэкап object store вручную === | ||
Создать | Создать бэкап object store можно вручную, просто скопировав директорию object store. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Такой способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и возможно остановить сервер Svacer. Для инкрементального бэкапа можно использовать '''rsync'''. | ||
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он | Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он создается в следующей директории: | ||
* ~/.cache/svacer — в OC Linux | * ~/.cache/svacer — в OC Linux | ||
* %LocalAppData%\svacer — в ОС Windows | * %LocalAppData%\svacer — в ОС Windows (например, С:\Users\myusername\AppData\Local\svacer) | ||
(например, С:\Users\myusername\AppData\Local\svacer) | |||
При восстановлении из резервной копии | При восстановлении из резервной копии поместите файлы object store в директорию по умолчанию (см. выше), либо в другую директорию и при запуске сервера Svacer укажите путь к ней одним из способов: | ||
* В переменной окружения SVACER_OBJECTS: | |||
export SVACER_OBJECTS=/home/user/data/object_store | |||
svacer-server run | |||
* В параметре --store: | |||
svacer-server run --store /home/user/data/object_store | |||
При запуске Svacer в docker-контейнере | При запуске Svacer в docker-контейнере смонтируйте директорию с object store в контейнер как volume и укажите путь к ней в переменной '''STORE''' в файле '''docker-compose.yml''' | ||
volumes: | volumes: | ||
Line 104: | Line 109: | ||
environment: | environment: | ||
- STORE=/data/object_store | - STORE=/data/object_store | ||
Revision as of 11:15, 12 July 2024
Создание и восстановление резервной копии
Для переноса Svacer на другой сервер создайте резервные копии БД PostgreSQL и object store как описано ниже и восстановите их на новом сервере.
Если PostgreSQL запущен в виде сервиса
Если PostgreSQL запущен в виде сервиса, то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:
sudo su -l postgres pg_dump --clean -T tmp_diff* svacer_db > svacer.sql
где svacer_db — имя БД.
В результате дамп БД будет создан в файле svacer.sql
Для восстановления БД из дампа перейдите в пользователя postgres и запустите восстановление
sudo su -l postgres psql -f svacer.sql svacer_db
Если PostgreSQL запущен в docker-контейнере
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду
docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql
где:
- svacer_postgres — имя docker-контейнера
- postgres — имя пользователя, под учётной записью которого создана БД
- svacer_db — имя БД
Для восстановления БД используйте команду
cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db
Бэкап object store в файле
Этот способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и не желательно останавливать сервер Svacer. Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)
svacer server backup --user admin --password <password> --file <filename>.kvbak
В результате object store будет сохранен в файл <filename>.kvbak
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.
svacer-server run --pg <postgres_url> --store /home/svacer/new-store --load-from-backup <filename>.kvbak
Восстановление возможно только в пустой object store. То есть в данном примере директория /home/svacer/new-store должна быть пустой.
Бэкап object store в сервере PostgreSQL
Резервную копию object store можно сохранить в PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит, если object store не очень большой, в пределах нескольких гигабайт.
Создание бэкапа:
svacer server backup --user admin --password <password> --pg
Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout
ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
Для печати списка существующих бэкапов используется команда:
svacer server backup --user admin --password <password> --list-pg
Результат печатается в stdout и включает ID и время создания бэкапа
2022-10-06T09:04:36.929+0300 info Quering server configuration from http://localhost:8080/api/public/server/info 2022-10-06T09:04:36.930+0300 info Server configuration grpc = 3002, rest = 8080 2022-10-06T09:04:36.939+0300 info Logged by user admin 2022-10-06T09:04:36.941+0300 info Backups: ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:
svacer-server run --load-from-pg-backup=<id>
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
Для очистки старых бэкапов используется следующая команда:
svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>
где <lower> и <upper> — нижняя и верхняя граница ID бэкапов.
При запуске сервера можно указать в переменной окружения SVACER_KV_BACKUP_MAX_AGE время хранения таких бэкапов. Задается в формате duration, к примеру 24h, 2h30m, 5m30s. По умолчанию 30 дней (720h). Очистка проводится как часть сборки мусора (т. е. периодичность проверки задается через переменную SVACER_GC_PERIOD).
SVACER_GC_PERIOD=2h SVACER_KV_BACKUP_MAX_AGE=720h svacer-server run
Бэкап object store вручную
Создать бэкап object store можно вручную, просто скопировав директорию object store. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Такой способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и возможно остановить сервер Svacer. Для инкрементального бэкапа можно использовать rsync.
Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он создается в следующей директории:
- ~/.cache/svacer — в OC Linux
- %LocalAppData%\svacer — в ОС Windows (например, С:\Users\myusername\AppData\Local\svacer)
При восстановлении из резервной копии поместите файлы object store в директорию по умолчанию (см. выше), либо в другую директорию и при запуске сервера Svacer укажите путь к ней одним из способов:
- В переменной окружения SVACER_OBJECTS:
export SVACER_OBJECTS=/home/user/data/object_store svacer-server run
- В параметре --store:
svacer-server run --store /home/user/data/object_store
При запуске Svacer в docker-контейнере смонтируйте директорию с object store в контейнер как volume и укажите путь к ней в переменной STORE в файле docker-compose.yml
volumes: - /home/user/data:/data environment: - STORE=/data/object_store