Help:Migration: Difference between revisions
No edit summary |
No edit summary |
||
Line 5: | Line 5: | ||
# Экспорт информации со старого сервера. | # Экспорт информации со старого сервера. | ||
# Импорт данных в новый. | # Импорт данных в новый. | ||
Для экспорта информации со старого Svace сервера используется утилита '''svace-migration.jar''' | Для экспорта информации со старого Svace сервера используется утилита '''svace-migration.jar''' | ||
java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir> | java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir> | ||
'''Параметры, используемые при экспорте данных''' | '''Параметры, используемые при экспорте данных''' | ||
Line 31: | Line 29: | ||
| Директория, в которую будут записаны экспортируемые данные | | Директория, в которую будут записаны экспортируемые данные | ||
|} | |} | ||
Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся. | Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся. | ||
Line 39: | Line 36: | ||
* информацию о размещении исходного кода; | * информацию о размещении исходного кода; | ||
* сопутствующую информацию в директории старого сервера. | * сопутствующую информацию в директории старого сервера. | ||
ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM: | ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM: | ||
Line 73: | Line 69: | ||
| Путь к директории, в которую были экспортированы результаты | | Путь к директории, в которую были экспортированы результаты | ||
|} | |} | ||
После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload: | После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload: | ||
svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store> | svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store> | ||
=== Миграция между версиями Svacer === | === Миграция между версиями Svacer === | ||
Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]]). | Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]]). | ||
Ниже описаны существенные изменения при переходе на определенную версию с более старой | Ниже описаны существенные изменения при переходе на определенную версию с более старой | ||
* 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями | * 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями | ||
* 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями. | * 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями. | ||
=== Создание и восстановление резервной копии === | === Создание и восстановление резервной копии === | ||
Line 99: | Line 91: | ||
В результате дамп БД будет создан в файле svacer.sql | В результате дамп БД будет создан в файле svacer.sql | ||
Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление | Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление | ||
sudo su -l postgres | sudo su -l postgres | ||
psql -f svacer.sql svacer_db | psql -f svacer.sql svacer_db | ||
==== Если PostgreSQL запущен в docker-контейнере ==== | ==== Если PostgreSQL запущен в docker-контейнере ==== | ||
Line 115: | Line 105: | ||
* postgres — имя пользователя, под учётной записью которого создана БД | * postgres — имя пользователя, под учётной записью которого создана БД | ||
* svacer_db — имя БД | * svacer_db — имя БД | ||
Для восстановления БД используйте команду | Для восстановления БД используйте команду | ||
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 | ||
==== Создание резервной копии svacer object store через command line API ==== | ==== Создание резервной копии svacer object store через command line API ==== | ||
Line 128: | Line 116: | ||
В результате object store будет сохранен в файл '''<filename>.kvbak''' | В результате object store будет сохранен в файл '''<filename>.kvbak''' | ||
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''. | Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''. | ||
Line 135: | Line 122: | ||
Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой. | Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой. | ||
==== Создание резервной копии svacer object store в сервере PostgreSQL ==== | ==== Создание резервной копии svacer object store в сервере PostgreSQL ==== | ||
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является '''рекомендуемой стратегией''' по бэкапу object store. | Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является '''рекомендуемой стратегией''' по бэкапу object store. | ||
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции. | Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции. | ||
Создание бэкапа: | Создание бэкапа: | ||
Line 169: | Line 153: | ||
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа. | где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа. | ||
Для очистки старых бэкапов используется следующая команда: | Для очистки старых бэкапов используется следующая команда: | ||
Line 176: | Line 159: | ||
где <lower> и <upper> нижняя и верхняя граница ID бэкапов. | где <lower> и <upper> нижняя и верхняя граница ID бэкапов. | ||
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL. | Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL. | ||
==== Создание резервной копии svacer object store вручную ==== | ==== Создание резервной копии svacer object store вручную ==== | ||
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных. | Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных. | ||
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории: | Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории: | ||
Line 191: | Line 171: | ||
(например, С:\Users\myusername\AppData\Local\svacer) | (например, С:\Users\myusername\AppData\Local\svacer) | ||
При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов: | При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов: | ||
Line 199: | Line 178: | ||
# При запуске Svacer передать путь к object store в параметре --store, например: | # При запуске Svacer передать путь к object store в параметре --store, например: | ||
#: svacer --store /home/user/data/object_store | #: svacer --store /home/user/data/object_store | ||
При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной '''STORE''' в файле '''docker-compose.yml'''. Допустим, директория с object store была скопирована в '''/home/user/data/object_store'''. В таком случае параметры нужно указать следующим образом | При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной '''STORE''' в файле '''docker-compose.yml'''. Допустим, директория с object store была скопирована в '''/home/user/data/object_store'''. В таком случае параметры нужно указать следующим образом | ||
Line 207: | Line 185: | ||
environment: | environment: | ||
- STORE=/data/object_store | - STORE=/data/object_store | ||
=== Перенос снимков === | === Перенос снимков === | ||
Line 214: | Line 191: | ||
'''Внимание''': в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки. | '''Внимание''': в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки. | ||
==== Перенос из веб интерфейса ==== | ==== Перенос из веб интерфейса ==== | ||
Line 220: | Line 196: | ||
[[File:SnapshotInfo2.png|none|left|alt=SnapshotInfo window]] | [[File:SnapshotInfo2.png|none|left|alt=SnapshotInfo window]] | ||
либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin): | либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin): | ||
[[File:CreateNewProject.png|none|left|alt=CreateNewProject window]] | [[File:CreateNewProject.png|none|left|alt=CreateNewProject window]] | ||
Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки | Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки | ||
[[File:BranchMenu.png|none|left|alt=BranchMenu windows]] | [[File:BranchMenu.png|none|left|alt=BranchMenu windows]] | ||
Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели а так же будет доступно в панели нотификаций: | Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели а так же будет доступно в панели нотификаций: | ||
[[File:Notifications.png|none|left|alt=Notifications window]] | [[File:Notifications.png|none|left|alt=Notifications window]] | ||
[[File:NotificationsClearAll.png|none|left|alt=NotificationsClearAll window]] | [[File:NotificationsClearAll.png|none|left|alt=NotificationsClearAll window]] | ||
==== Перенос из командной строки ==== | ==== Перенос из командной строки ==== | ||
Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке. | Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке. | ||
Экспорт снимков: | Экспорт снимков: | ||
Line 270: | Line 240: | ||
Опция '''--force''' создаст проект и ветку, если их не было на сервере. | Опция '''--force''' создаст проект и ветку, если их не было на сервере. | ||
=== Перенос Svacer с одного сервера на другой === | === Перенос Svacer с одного сервера на другой === |
Revision as of 17:54, 11 January 2023
Миграция
Миграция со старого сервера
В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:
- Экспорт информации со старого сервера.
- Импорт данных в новый.
Для экспорта информации со старого Svace сервера используется утилита svace-migration.jar
java -jar svace-migration.jar <user> <password> <path to svace> <path to server dir> <path to output dir>
Параметры, используемые при экспорте данных
Параметр | Описание |
---|---|
<user> | Имя пользователя на старом сервере |
<password> | Пароль пользователя на старом сервере |
<path to svace> | Путь к директории, где находится Svace |
<path server dir> | Директория, из которой запущен старый сервер |
<path to output dir> | Директория, в которую будут записаны экспортируемые данные |
Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся. При экспорте утилита svace-migration.jar извлекает:
- все снимки в виде *.svres;
- информацию о размещении исходного кода;
- сопутствующую информацию в директории старого сервера.
ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM:
--add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED
Для импорта экспортированных данных используется следующая команда:
svacer migrate [--skip-dxr-errors] --distr <path to svace distr> --temp <path to temp folder> --store <intermediate store> <path to exported data>
Параметры, используемые при импорте данных
Параметр | Описание |
---|---|
--skip-dxr-errors | Опциональный параметр для игнорирования ошибок в DXR-данных. Рекомендуется к использованию |
--distr | Путь к дистрибутиву Svace |
--temp | Директория для хранения временных файлов в ходе конверсии |
--store | Путь к промежуточному хранилищу |
<path to exported data> | Путь к директории, в которую были экспортированы результаты |
После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload:
svacer upload --user <user> --password <pwd> --host <host> --port <rest port> --grpc <grpc port> <path to store>
Миграция между версиями Svacer
Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел Создание и восстановление резервной копии).
Ниже описаны существенные изменения при переходе на определенную версию с более старой
- 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями
- 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями.
Создание и восстановление резервной копии
Если 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
Создание резервной копии svacer object store через command line API
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)
svacer server backup --user admin --password <password> --file <filename>.kvbak
В результате object store будет сохранен в файл <filename>.kvbak
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.
svacer server --pg <postgres_url> —store /home/svacer/new-store --load-from-backup <filename>.kvbak
Восстановление возможно только в пустой object store. То есть в данном примере директория /home/svacer/new-store должна быть пустой.
Создание резервной копии svacer object store в сервере PostgreSQL
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является рекомендуемой стратегией по бэкапу object store.
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.
Создание бэкапа:
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 --load-from-pg-backup=<id>
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
Для очистки старых бэкапов используется следующая команда:
svacer server backup --user admin --password <password> --drop-pg=<lower>:<upper>
где <lower> и <upper> нижняя и верхняя граница ID бэкапов.
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.
Создание резервной копии svacer object store вручную
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.
Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
- ~/.cache/svacer — в OC Linux
- %LocalAppData%\svacer — в ОС Windows
(например, С:\Users\myusername\AppData\Local\svacer)
При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
- Перед запуском Svacer установить переменную окружения SVACER_OBJECT_STORE, например:
- export SVACER_OBJECT_STORE=/home/user/data/object_store
- При запуске Svacer передать путь к object store в параметре --store, например:
- svacer --store /home/user/data/object_store
При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной STORE в файле docker-compose.yml. Допустим, директория с object store была скопирована в /home/user/data/object_store. В таком случае параметры нужно указать следующим образом
volumes: - /home/user/data:/data environment: - STORE=/data/object_store
Перенос снимков
Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса. Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.
Внимание: в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.
Перенос из веб интерфейса
Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:
либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):
Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки
Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели а так же будет доступно в панели нотификаций:
Перенос из командной строки
Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке.
Экспорт снимков:
svacer server export --user <user> --password <pwd> --host <host> --port <port> --grpc <grpc port> --project <project name or id> --branch <branch name or id> --snapshot <snapshot name or id> <output file name>
Импорт снимков:
svacer server import --user <user> --password <pwd> --host <host> --port <port> --grpc <grpc port> --project <project name or id> --branch <branch name or id> --name <new name for snapshot> [--force] <input file name>
Опция --force создаст проект и ветку, если их не было на сервере.
Перенос Svacer с одного сервера на другой
- Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе Создание и восстановление резервной копии.
- Перенесите созданные файлы резервных копий на нужный сервер
- Восстановите данные из резервной копии на новом сервере