Перенос односерверной системы на другой сервер

Описание задачи

Исходная точка:
Есть установленный экземпляр платформы на сервере (возможно виртуальном) с Debian.
Платформа установлена на локальный адрес виртуального сервера (допустим, 172.27.1.121).
Основная доменная СУБД postgresql установлена здесь же посредством инсталлятора платформы.
СУБД установлена в docker-контейнере.

Необходимо перенести платформу на другой сервер, у которого другой адрес (допустим 172.27.5.122).
Необходимо сохранить данные, в том числе лицензию, конфигурацию, настройки.

Подходы

1. Через экспорт/импорт.

Этот вариант применим, если установка стандартная, количество доменов небольшое, и исторические данные не важны.

2. Через резервную копию БД (pg_basebackup)

Производится установка новой системы, а затем вместо пустой доменной БД postgres производится подключение к ранее зарезервированной копии.
Это может быть произведено путем подмены каталога СУБД с конфигурацией и данными, либо путем настройки нового инстанса СУБД на базе резервной копии и последующей подмены строки подключения в конфигурации.

Из предыдущей системы в этом случае потребуется также скопировать:

  • Каталог syncroot с данными доменов (в т.ч. файлы сценариев).

  • Каталог recpath с записями разговоров, если запись не была настроена на внешние хранилища.

  • Лицензия.

  • Конфигурация (ее предстоит дополнительно адаптировать под новые адреса сервера).

Если система при этом подключалась к внешним СУБД и файловым хранилищам, то при наличии доступа к ним с теми же параметрами подключение произойдет автоматически.
Исключение составляют NFS и другие монтируемые файловые системы, которые следует предварительно подключить к серверу.
Если же внешние хранилища становятся доступны под другими адресами или учетными данными, то предстоит в доменах скорректировать настройки подключений к хранилищам.

3. Через скрипт БД (pg_dump)

В отличие от предыдущего пункта БД не резервировать и подключается, а с помощью утилиты pg_dump создается скрипт, который затем применяется к новой БД.
Скрипт создается отдельно для каждой БД в рамках СУБД, то есть 1-2 раза под каждый домен.

Этот способ следует использовать, если необходимо перенести данные под управление другой версии сервера СУБД, либо обогатить существующий инстанс postgres базами данных и данными платформы, оставив прочие имеющиеся объекты без изменений.

Что понадобится

1. Строка установки с параметрами

При установке основной системы была использована следующая строка запуска инсталлятора с параметрами:

bash install_ssh.sh \
  -u era \
  -p 22 \
  --host=188.1.1.1 \
  --ipaddress=172.27.1.121 \
  --postfix=_myinstance \
  --master=y \
  --masterdomain=era.test \
  --srvname=mysrv1 \
  --dopginstall=y \
  --usereplic=n \
  --pgmode=d \
  --pgport=5432 \
  --pgpostgrespwd=MyPwd1234 \
  --pskcookie=123456 \
  --usedefaults

Если такой строки не использовалось, необходимо скомпоновать ее, восстановив все используемые значения, в том числе значения по умолчанию.

2. Активная конфигурация

Авторизовавшись в мастер домене, открыть на редактирование конфигурацию и скопировать ее содержимое.

Альтернативный путь - достать ее с диска, она размещена в файле cfgv3.json в рабочем каталоге ноды с ролью mic, например в контейнере это

/var/lib/era/_workdir/mic1@172.27.1.121/cfgv3.json

а в хосте по умолчанию

/opt/era_myinstance/lib/_workdir/mic1@172.27.1.121/cfgv3.json

3. Лицензия

Авторизовавшись в мастер домене, открыть в адресной строке браузера страницу /api/admin/v1/lic/download.

Альтернативный путь - достать ее с диска, она размещена в файле r.lic в рабочем каталоге ноды с ролью mdc, например в контейнере это:

/var/lib/era/_workdir/mdc1@172.27.1.121/lic/r.lic

а в хосте по умолчанию

/opt/era_myinstance/lib/_workdir/mdc1@172.27.1.121/lic/r.lic

4. Файлы

Каталог syncroot содержит файлы доменов, доступные всем серверам развернутой платформы. Например, файлы сценариев.
Каталог следует целиком скопировать на новую систему.

5. Пакеты продуктового слоя

Если в системе использовался продуктовый слой и были установлены внешние пакеты, то пакеты следует обнаружить.

Варианты установки платформы в режиме с подключением резервной БД.

Существуют два варианта действий:

1. Установка платформы с новой БД и последующая подмена БД.

1.1. Ставим новый экземпляр платформы на актуальный локальный адрес с теми же параметрами установки (преимущественно пароли к БД). Корректируем те параметры, что необходимо (например установки адрес, привязку к каталогам волюмов). Важно чтобы БД ставилась той же версии.
1.2. Готовим БД на источнике к бэкапу.
1.3. Подменяем БД. То есть производим бэкап БД, отключаем состояние резервирования, подменяем каталог целевой БД. Либо бэкапим прям в точку установки постгреса, предыдущую папку данных предварительно переименовав.

2. Установка платформы с подключением к новой заранее подготовленной БД.

2.1. Ставим вручную БД на новом сервере (только postgresql) той же версии, что и на сервере источника.
2.2. Производим бэкап БД с сервера источника в новую папку на сервере назначения /var/lib/postgresql/14/era.
2.3. Устанавливаем новый экземпляр платформы, в разделе про установку сервера БД выбирая пункт "подключиться к существующей БД", и введя адрес своего сервера БД и его порт. Если всё локально - вплоть до 127.0.0.1

Дальнейшие операции

*.4. Загружаем лицензию.
*.5. Авторизуемся в мастер домен под админом, открываем конфигурации, находим последнюю, корректируем ее при необходимости, изменяя адреса (и, маловероятно, пути).
*.6. Копируем с прошлого сервера каталог syncroot.
*.7. Копируем с прошлого сервера каталог era_recpath.
*.8. Устанавливаем продуктовый слой и кастомные пакеты.