Help:Migration: Difference between revisions

From Svacer Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 113: Line 113:




==== Если PostgreSQL запущен в docker-контейнере ====
==== Если PostgreSQL запущен в docker-контейнере ====
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду
docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql
docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db > svacer.sql
где:
где:
    • svacer_postgres — имя docker-контейнера
* svacer_postgres — имя docker-контейнера
    • postgres — имя пользователя, под учётной записью которого создана БД
* postgres — имя пользователя, под учётной записью которого создана БД
    • svacer_db — имя БД
* svacer_db — имя БД


Для восстановления БД используйте команду
Для восстановления БД используйте команду
cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db


            4.3.3 Создание резервной копии svacer object store через command line API
    cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db
 
 
==== Создание резервной копии svacer object store через command line API ====
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)


svacer server backup --user admin --password <password> --file <filename>.kvbak
    svacer server backup --user admin --password <password> --file <filename>.kvbak


В результате object store будет сохранен в файл <filename>.kvbak
В результате object store будет сохранен в файл '''<filename>.kvbak'''


Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции --load-from-backup.
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''.


svacer server --pg <postgres_url> —store /home/svacer/new-store --load-from-backup <filename>.kvbak
    svacer server --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''' должна быть пустой.


            4.3.4 Создание резервной копии svacer object store в сервере PostgreSQL
 
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является рекомендуемой стратегией по бэкапу object store.  
=== Создание резервной копии svacer object store в сервере PostgreSQL ===
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является '''рекомендуемой стратегией''' по бэкапу object store.  


Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.
Line 144: Line 149:
Создание бэкапа:
Создание бэкапа:


svacer server backup --user admin --password <password> --pg
    svacer server backup --user admin --password <password> --pg


Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout
Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout


ID = 23 CREATE_TS = 2022-10-06T06:04:33Z  
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z  


Для печати списка существующих бэкапов используется команда:
Для печати списка существующих бэкапов используется команда:


svacer server backup --user admin --password <password> --list-pg
    svacer server backup --user admin --password <password> --list-pg


Результат печатается в stdout и включает ID и время создания бэкапа
Результат печатается в 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.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.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.939+0300    info    Logged by user admin
2022-10-06T09:04:36.941+0300    info    Backups:
    2022-10-06T09:04:36.941+0300    info    Backups:
ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z
 
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:


svacer server --load-from-pg-backup=<id>
    svacer server --load-from-pg-backup=<id>


где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
где <id> — ID бэкапа или 0, для использования последнего доступного бэкапа.
Line 169: Line 175:
Для очистки старых бэкапов используется следующая команда:
Для очистки старых бэкапов используется следующая команда:


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 бэкапов.
Line 175: Line 181:
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.


            4.3.5 Создание резервной копии svacer object store вручную
 
==== Создание резервной копии svacer object store вручную ====
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.


Если директория, где хранить object store не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:
    • ~/.cache/svacer — в OC Linux
 
    • %LocalAppData%\svacer — в ОС Windows
* ~/.cache/svacer — в OC Linux
* %LocalAppData%\svacer — в ОС Windows
 
(например, С:\Users\myusername\AppData\Local\svacer)
(например, С:\Users\myusername\AppData\Local\svacer)


При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:
    1. Перед запуском Svacer установить переменную окружения  SVACER_OBJECT_STORE, например:  
 
# Перед запуском Svacer установить переменную окружения  SVACER_OBJECT_STORE, например:  
export SVACER_OBJECT_STORE=/home/user/data/object_store
export SVACER_OBJECT_STORE=/home/user/data/object_store
    2. При запуске 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'''. В таком случае параметры нужно указать следующим образом  


     volumes:
     volumes:

Revision as of 18:47, 7 December 2022

Category:Help

Введение

[Перейти]

Установка

[Перейти]

Использование

[Перейти]

Миграция

Миграция со старого сервера

В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:

  1. Экспорт информации со старого сервера.
  2. Импорт данных в новый.

Для экспорта информации со старого 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 указать путь к ней одним из способов:

  1. Перед запуском Svacer установить переменную окружения SVACER_OBJECT_STORE, например:

export SVACER_OBJECT_STORE=/home/user/data/object_store

  1. При запуске 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
       4.4 Перенос снимков

Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса. Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных. Внимание: в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.

           4.4.1 Перенос из веб интерфейса

Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:


либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):


Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки


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



           4.4.2 Перенос из командной строки

Экспорт и импорт снимков из командной строки доступен пользователям с ролями 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 создаст проект и ветку, если их не было на сервере.

       4.5 Перенос Svacer с одного сервера на другой
   1. Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе Создание и восстановление резервной копии.
   2. Перенесите созданные файлы резервных копий на нужный сервер
   3. Восстановите данные из резервной копии на новом сервере


[#Top|Вверх]