Перенос базы данных Платформы из docker’а на отдельную машину
В этом разделе описан процесс перемещения базы данных с Платформы, которая работает в контейнере docker, на отдельную физическую или виртуальную машину. Действия, представленные в подзаголовках раздела, нужно выполнять последовательно.
Экспорт базы данных из контейнера docker
Команды, представленные ниже, выполняются на узле, где установлена Платформа:
Зайдите в docker-контейнер, в котором находится база данных:
docker exec -it db bash
Добавьте строку для возможности снятия резервной копии базы данных и обновите настройки:
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
Снимите резервную копию БД:
pg_basebackup -U postgres -D - -Ft -X fetch | gzip > /tmp/backup.tar.gz
Выйдите из сессии пользователя postgres:
exit
Извлеките данные из docker-контейнера:
docker cp db:/tmp/backup.tar.gz /tmp
Можно остановить работу Платформы в контейнере с помощью команды:
docker-compose down
Отредактируйте файл 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 «Смоленск»/»Орел»):
Добавьте ключ и пропишите репозиторий 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
Измените приоритет репозиториев:
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
Если у вас не прописаны репозитории 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
Добавьте локаль EN_US.UTF-8:
dpkg-reconfigure locales
Найдите в списке EN_US.UTF-8 и далее два раза нажмите "Ок".
Установите Postgresql 11 (версия 11.20):
apt install postgresql-11 postgresql-11-cron -y
Установите расширения:
apt install pg-framework pg-store-plans-11 pipelinedb pgsql-http -y
Проведите автозапуск Postgresql:
systemctl enable postgresql
Остановите работу Postgresql:
systemctl stop postgresql
Очистите кластер:
rm -rf /var/lib/postgresql/11/main/*
Разверните копию, снятую с docker’а:
tar xvfz /opt/backup.tar.gz -C /var/lib/postgresql/11/main/
Перенесите настройки на машину:
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
Отредактируйте настройки в файле 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"
Отредактируйте файл 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
Запустите PostgreSQL:
systemctl start postgresql
Проверить, что PostgreSQL работает, можно с помощью команды:
systemctl status postgresql
А для проверки работы кластера используйте:
pg_lsclusters
15 Внесите необходимые изменения в настройки:
su - postgres
psql -U postgres pma
Обновите значение IP-адреса, подставив вместо Y.Y.Y.Y IP-адрес Платформы:
update sys.base_config set value='Y.Y.Y.Y:5666' where name='backend_rest';
Запуск Платформы
Далее следует вернуться к Платформе:
Запустите Платформу:
cd /opt/tantor/eco/
docker-compose --env-file=platform.env up -d
Проверьте статусы контейнеров:
docker-compose ps
Проверьте, что Платформа работает с новой базой данных с помощью следующей команды (для этого в базе должно быть создано хотя бы одно Пространство):
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);
Эта команда меняет имя Пространства в вашей базе данных. Проверьте, что она сработала и Пространство переименовалось. Далее можно вернуть ему старое наименование.
Проверьте лицензии.
Зайдите в инстансы и проверьте корректность отображения информации по ним в дашбордах.