Перенос базы данных Платформы из docker’а на отдельную машину

В этом разделе описан процесс перемещения базы данных с Платформы, которая работает в контейнере docker, на отдельную физическую или виртуальную машину. Действия, представленные в подзаголовках раздела, нужно выполнять последовательно.

Экспорт базы данных из контейнера docker

Команды, представленные ниже, выполняются на узле, где установлена Платформа:

  1. Зайдите в docker-контейнер, в котором находится база данных:

docker exec -it db bash
  1. Добавьте строку для возможности снятия резервной копии базы данных и обновите настройки:

echo 'local replication all trust' >> /var/lib/postgresql/11/main/pg_hba.conf

su - postgres

/usr/lib/postgresql/11/bin/pg_ctl reload -D /var/lib/postgresql/11/main
  1. Снимите резервную копию БД:

pg_basebackup -U postgres -D - -Ft -X fetch | gzip > /tmp/backup.tar.gz
  1. Выйдите из сессии пользователя postgres:

exit
  1. Извлеките данные из docker-контейнера:

docker cp db:/tmp/backup.tar.gz /tmp
  1. Можно остановить работу Платформы в контейнере с помощью команды:

docker-compose down
  1. Отредактируйте файл docker-compose.yml. Необходимо внести изменения в следующие строки:

  • Было:

PMA_SERVER_OPSPG_HOST=db

Стало:

PMA_SERVER_OPSPG_HOST=X.X.X.X
  • Было:

PMA_KEEPER_OPSPG_HOST=db

Стало:

PMA_KEEPER_OPSPG_HOST=X.X.X.X
  • Было:

POSTGRES_HOST=db

Стало:

POSTGRES_HOST=X.X.X.X

В командах этого шага X.X.X.X – это IP-адрес машины с будущей отдельной базой. Ниже представлен пример:

sed -i -e "s/PMA_SERVER_OPSPG_HOST=db/PMA_SERVER_OPSPG_HOST=192.168.1.84/" "/opt/tantor/eco/docker-compose.yml"

sed -i -e "s/PMA_KEEPER_OPSPG_HOST=db/PMA_KEEPER_OPSPG_HOST=192.168.1.84/" "/opt/tantor/eco/docker-compose.yml"

sed -i -e "s/POSTGRES_HOST=db/POSTGRES_HOST=192.168.1.84/" "/opt/tantor/eco/docker-compose.yml"

Подготовка нового места для базы Платформы

Алгоритм подготовки представляет следующие шаги (представленные ниже команды были выполнены на ОС Astra Linux SE 1.7.3 «Смоленск»/»Орел»):

  1. Добавьте ключ и пропишите репозиторий Tantor. Замените USERNAME и PASSWORD на собственные логин и пароль, выданные вам компанией «Лаборатории Тантор».

wget --quiet -O - https://public.tantorlabs.ru/tantorlabs.ru.asc | apt-key add -

echo "deb [arch=amd64] https://USERNAME:[email protected]/repository/tantorlabs-apt smolensk main" > /etc/apt/sources.list.d/tantorlabs.list
  1. Измените приоритет репозиториев:

echo "Package: *
Pin: origin nexus.tantorlabs.ru
Pin-Priority: 1001

Package: *
Pin: release n=1.7_x86-64
Pin-Priority: 900" > /etc/apt/preferences.d/smolensk
  1. Если у вас не прописаны репозитории Astra Linux, то выполните команды:

echo "# Astra Linux repository description https://wiki.astralinux.ru/x/0oLiC

deb cdrom:[OS Astra Linux 1.7.3 1.7_x86-64 DVD ]/ 1.7_x86-64 contrib main non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free

deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free" > /etc/apt/sources.list

apt-get update
  1. Добавьте локаль EN_US.UTF-8:

dpkg-reconfigure locales
Найдите в списке EN_US.UTF-8 и далее два раза нажмите "Ок".
  1. Установите Postgresql 11 (версия 11.20):

apt install postgresql-11 postgresql-11-cron -y
  1. Установите расширения:

apt install pg-framework pg-store-plans-11 pipelinedb pgsql-http -y
  1. Проведите автозапуск Postgresql:

systemctl enable postgresql
  1. Остановите работу Postgresql:

systemctl stop postgresql
  1. Очистите кластер:

rm -rf /var/lib/postgresql/11/main/*
  1. Разверните копию, снятую с docker’а:

tar xvfz /opt/backup.tar.gz -C /var/lib/postgresql/11/main/
  1. Перенесите настройки на машину:

cp /var/lib/postgresql/11/main/pg_hba.conf /etc/postgresql/11/main
cp /var/lib/postgresql/11/main/postgresql.conf /etc/postgresql/11/main
  1. Отредактируйте настройки в файле postgresql.conf:

sed -i -e "s/var\/lib\/postgresql\/11\/main\/pg_hba.conf/etc\/postgresql\/11\/main\/pg_hba.conf/" "/etc/postgresql/11/main/postgresql.conf"
sed -i -e "s/var\/lib\/postgresql\/11\/main\/pg_ident.conf/etc\/postgresql\/11\/main\/pg_ident.conf/" "/etc/postgresql/11/main/postgresql.conf"
  1. Отредактируйте файл pg_hba.conf (/etc/postgresql/11/main/pg_hba.conf), где Y.Y.Y.Y - IP-адрес Платформы:

echo "local   all             all                                     trust
host    all             all             127.0.0.1/32            md5
host    pma             pmm             Y.Y.Y.Y/32        trust
host    all             all             samenet                 md5
host   all             all             0.0.0.0/0               reject" > /etc/postgresql/11/main/pg_hba.conf
  1. Запустите PostgreSQL:

systemctl start postgresql

Проверить, что PostgreSQL работает, можно с помощью команды:

systemctl status postgresql

А для проверки работы кластера используйте:

pg_lsclusters

15 Внесите необходимые изменения в настройки:
su - postgres
psql -U postgres pma
  1. Обновите значение IP-адреса, подставив вместо Y.Y.Y.Y IP-адрес Платформы:

update sys.base_config set value='Y.Y.Y.Y:5666' where name='backend_rest';

Запуск Платформы

Далее следует вернуться к Платформе:

  1. Запустите Платформу:

cd /opt/tantor/eco/

docker-compose --env-file=platform.env up -d
  1. Проверьте статусы контейнеров:

docker-compose ps
  1. Проверьте, что Платформа работает с новой базой данных с помощью следующей команды (для этого в базе должно быть создано хотя бы одно Пространство):

psql -U postgres -d pma

update core.workspaces set workspace_name = 'Mischief managed' where workspace_id = (select workspace_id from core.workspaces order by workspace_id asc limit 1);

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

  1. Проверьте лицензии.

  2. Зайдите в инстансы и проверьте корректность отображения информации по ним в дашбордах.