Перейти к основному содержимому

Восстановление после неудачного обновления с переносом данных

Данный раздел рассматривает ручное восстановление с переносом данных СУБД Pangolin после неудачного обновления с версии 6.5.2 до 7.1.0.

Внимание!

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

Например, сочетание (master, replica) означает, что действия, указанные в пункте, необходимо выполнить сначала на основном узле, затем на реплике (при этом выполнять действия на арбитре не нужно).

Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres.

Обновление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем postgres.

Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm-пакетов, при необходимости, в блоках кода замените наименование ОС и пакетного менеджера.

Обозначения

В инструкции используются переменные для динамической настройки. Перед выполнением команд эти переменные будут экспортироваться. Скорректируйте значение относительно реализуемого сценария обновления:

  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х/x.x);
  • PANGOLIN_MAJOR_VER - мажорная версия СУБД Pangolin (формат - 0x);
  • PANGOLIN_MAJOR_OLD_VER - исходная мажорная версия СУБД Pangolin (формат - 0x);
  • PANGOLIN_OLD_VER – исходная версия СУБД Pangolin (формат - х.х.х/x.x);
  • PANGOLIN_FULL_OLD_VER – исходная версия СУБД Pangolin (формат - 0х.00х.0х).

Шаг №1. Остановка компонентов СУБД Pangolin

  1. (master) В случае конфигурации с Pangolin Manager переведите компонент в режим паузы:

    sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
  2. (replica, master, arbiter) Остановите все компоненты СУБД Pangolin:

    • Для конфигурации без Pangolin Manager:
    sudo systemctl stop postgresql
    • Для конфигурации с Pangolin Manager:


      sudo -iu postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/07/data
      sudo systemctl stop pangolin-manager
    • Для конфигурации с etcd:

      sudo systemctl stop etcd
    • Для всех конфигураций:

      sudo systemctl stop pgbouncer
      sudo systemctl stop pangolin-pooler
      sudo systemctl stop pg_certs_rotate_agent
      sudo systemctl stop pangolin-certs-rotate
      sudo systemctl stop pangolin_reencrypt@postgres.service
      sudo systemctl stop pangolin_reencrypt@kmadmin_pg.service
      sudo systemctl stop pangolin-auth-reencrypt@postgres.service
      sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg.service
  3. (replica, master, arbiter) Остановите сторонние компоненты:

    sudo systemctl stop crond

Шаг 2. Удаление venv-пакета

  1. (master, replica) Удалите пакет компонента:

    sudo dnf remove -y pangolin-ansible-venv-controlled

Шаг 3. Восстановление компонента pangolin-auth-reencrypt

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-auth-reencrypt
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-auth-reencrypt-6.5.2-sberlinux9.x86_64.rpm
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pangolin-auth-reencrypt@postgres.service            /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@postgres.service 
    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pangolin-auth-reencrypt@kmadmin_pg.service /etc/systemd/system/multi-user.target.wants/pangolin-auth-reencrypt@kmadmin_pg.service
    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/pg_auth_reencrypt /opt/pangolin-auth-reencrypt/bin/pangolin-auth-reencrypt
    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_util.cfg /etc/postgres/enc_util.cfg
    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.kmadmin_pg /etc/pangolin-auth-reencrypt/kmadmin_pg/enc_params.cfg.kmadmin_pg
    sudo cp -ra ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.postgres /etc/pangolin-auth-reencrypt/postgres/enc_params.cfg.postgres

Шаг 4. Восстановление компонента pg-certs-rotate-agent

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-certs-rotate
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-certs-rotate-6.5.2-sberlinux9.x86_64.rpm
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /pgerrorlogs/06/pangolin-certs-rotate
    sudo chown postgres:kmadmin_pg /etc/pangolin-certs-rotate /opt/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin
    sudo chmod 0700 /pgerrorlogs/06 /pgerrorlogs/06/pangolin-certs-rotate
    sudo chown postgres:postgres /pgerrorlogs/06 /pgerrorlogs/06/pangolin-certs-rotate
    sudo chmod 0771 /etc/pangolin-certs-rotate
    sudo chmod 0710 /opt/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin/
    sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate.service /usr/lib/systemd/system/pangolin-certs-rotate.service
    sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate /opt/pangolin-certs-rotate/bin/pangolin-certs-rotate
    sudo cp -ra ~/pangolin/cache/backup/pangolin-certs-rotate/pangolin-certs-rotate.yml /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml

Шаг 5. Удаление компонента pangolin-diagnostic-tool

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-diagnostic-tool
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-diagnostic-tool-6.5.2-sberlinux9.x86_64.rpm

Шаг 6. Удаление компонентов пакета pangolin-security-utilities

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-security-utilities
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-security-utilities-6.5.2-sberlinux9.x86_64.rpm

Шаг 7. Восстановление компонентов пакета pangolin-backup-tools

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-backup-tools-venv
    sudo dnf remove -y pangolin-backup-tools
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-backup-tools-venv-1.1.0-sberlinux9.x86_64.rpm
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-backup-tools-1.2.5-sberlinux9.x86_64.rpm
  2. (master, replica) Приведите в исходное состояние файл backup-tools-env, находящийся в директории /etc/pangolin-backup-tools/backup-tools-env:

    # PATH, used for access to required executable files, default value: "${PATH}:{PGHOME}/bin/"
    PATH="${PATH}:/usr/pangolin-6.5/bin/"
    # path to PGHOME, default value: "/opt/pangolin-backup-tools/bin"
    PGHOME="/opt/pangolin-backup-tools"
    # path to python libraries, required for manage_backup.bin, default value: "/opt/pangolin-backup-tools/lib/python3/site-packages"
    PYTHONPATH="/opt/pangolin-backup-tools/lib/python3/site-packages"
    # path to libraries, required for executable files, default value: "/opt/pangolin-backup-tools/lib"
    LD_LIBRARY_PATH="/opt/pangolin-backup-tools/lib"
    # path to plugins libraries, default value: "/opt/pangolin-backup-tools/lib"
    PG_PLUGINS_PATH="/opt/pangolin-backup-tools/lib"

    # Pangolin DBMS server IP, default value: "127.0.0.1"
    ARG_KEY_DBMS_SERVER_IP="127.0.0.1"
    # Pangolin DBMS port, default value: "5433"
    ARG_KEY_DBMS_SERVER_PORT="5433"
    # user used for access to database, default value: "backup_user"
    ARG_KEY_DBMS_CONNECT_USER="backup_user"
    # database to connect, default value: "postgres"
    ARG_KEY_DBMS_CONNECT_DATA_BASE="postgres"
    # path to backup storage, default value: "/pgarclogs"
    ARG_KEY_DBMS_CONNECT_BACKUP_DIR="/pgarclogs/06"
    # password to connect to Pangolin DBMS, default value: 'sample_password'
    # cluster name, default value: "clustername"
    PGINSTANCE="clustername"
    # WAL archives list
    WALSTATE_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/wals_to_delete"
    # Log file
    LOG_FILE="$ARG_KEY_DBMS_CONNECT_BACKUP_DIR/archive.log"
    # path to script, used for creating backup files, default value: "/opt/pangolin-backup-tools/bin/manage_backup.sh"
    MANAGE_BACKUP_SCRIPT="/opt/pangolin-backup-tools/bin/manage_backup.sh"

    # setting up of connection string
    PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS --host $ARG_KEY_DBMS_SERVER_IP"
    PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -p $ARG_KEY_DBMS_SERVER_PORT"
    PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -U $ARG_KEY_DBMS_CONNECT_USER"
    PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -d $ARG_KEY_DBMS_CONNECT_DATA_BASE"
    PANGOLIN_BACKUP_TOOLS_ARGS="$PANGOLIN_BACKUP_TOOLS_ARGS -B $ARG_KEY_DBMS_CONNECT_BACKUP_DIR"

    # environment variables to launch manage backup
    export PATH
    export PGHOME
    export PYTHONPATH
    export LD_LIBRARY_PATH
    export PG_PLUGINS_PATH

Шаг 8. Восстановление компонента Pangolin Pooler

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-pooler
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-pooler-1.5.2-sberlinux9.x86_64.rpm
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /etc/pangolin-pooler/
    sudo chown postgres:postgres /etc/pangolin-pooler/
    sudo chmod 0700 /etc/pangolin-pooler/
    sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.service /usr/lib/systemd/system/pangolin-pooler.service
    sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.ini /etc/pangolin-pooler/pangolin-pooler.ini
    sudo cp -ra ~/pangolin/cache/backup/pooler/userlist.txt /etc/pangolin-pooler/userlist.txt
    sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler /opt/pangolin-pooler/bin/pangolin-pooler
    sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.1 /opt/pangolin-pooler/share/man/man1/pangolin-pooler.1
    sudo cp -ra ~/pangolin/cache/backup/pooler/pangolin-pooler.5 /opt/pangolin-pooler/share/man/man5/pangolin-pooler.5

Шаг 9. Восстановление компонента Pangolin Manager

  1. (master, replica) Удалите новый пакет компонента и установите старый:

    sudo dnf remove -y pangolin-manager
    sudo dnf remove -y pangolin-manager-venv
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-manager-venv-1.1.0-sberlinux9.x86_64.rpm
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-manager-2.1.8-sberlinux9.x86_64.rpm
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo chown postgres:postgres /etc/pangolin-manager/ /usr/pangolin-manager
    sudo chmod 0700 /etc/pangolin-manager/ /usr/pangolin-manager
    sudo cp -ra ~/pangolin/cache/backup/manager/pangolin-manager.service /usr/lib/systemd/system/pangolin-manager.service
    sudo cp -ra ~/pangolin/cache/backup/manager/postgres.yml /etc/pangolin-manager/postgres.yml
    sudo cp -ra ~/pangolin/cache/backup/manager/ /opt/pangolin-pooler/bin/pangolin-pooler-restart.sh
    sudo cp -ra ~/pangolin/cache/backup/manager/ /opt/pangolin-manager/bin/pangolin-manager

Шаг 10. Удаление pangolin_license

  1. (master, replica) Восстановите исходное состояние директории с лицензией:

    sudo mv /opt/pangolin-license /opt/pangolin_license
    # Восстановите прежнюю лицезнию

Шаг 11. Восстановление серверной и клиентской части (pangolin-dbms)

  1. (master, replica) Удалите новый пакет компонента и установите старый

    export PANGOLIN_VER=7.1
    export PANGOLIN_MAJOR_VER=07
    sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER
    sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER-client
    sudo dnf install -y ~/pangolin/cache/backup/pangolin_dbms/pangolin-dbms-6.5-6.5.2-sberlinux9.x86_64.rpm
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-dbms-6.5-client-6.5.2-sberlinux9.x86_64.rpm
    sudo rm -rf /opt/pangolin-dbms-server-7 /opt/pangolin-dbms-client-7
    sudo rm -rf /pgdata/$PANGOLIN_MAJOR_VER /pangolinlogs /pgarclogs/$PANGOLIN_MAJOR_VER

    При необходимости удалите новый пакет компонента timescaledb и установите старый:

    sudo dnf remove -y pangolin-timescaledb-$PANGOLIN_VER
    sudo dnf install -y ~/pangolin/cache/backup/rpms/pangolin-timescaledb-6.5-apache-2.19.3-sberlinux9-x86_64.rpm
  2. (master, replica) Восстановите рабочие файлы компонента:

    export PANGOLIN_OLD_VER=6.x
    export PANGOLIN_FULL_OLD_VER=06.00x.0x
    export PANGOLIN_MAJOR_OLD_VER=06
    sudo mkdir -p /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/
    sudo chmod -R 0700 /pgdata
    sudo chown -R postgres:postgres /pgdata
    sudo cp -ra ~/pangolin/cache/backup/pangolin_dbms/pangolin-$PANGOLIN_OLD_VER/* /usr/pangolin-$PANGOLIN_OLD_VER/
    sudo chmod 0701 /usr/pangolin-$PANGOLIN_OLD_VER
    sudo ln -sfnv /usr/pangolin-$PANGOLIN_OLD_VER /usr/pangolin
    sudo cp -ra ~/pangolin/cache/backup/general/enc_utils_auth_settings.cfg /etc/pangolin-auth-encryption/enc_utils_auth_settings.cfg

    Для конфигурации без Pangolin Manager:

    export PANGOLIN_OLD_VER=6.x
    sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/postgresql.service /usr/pangolin-$PANGOLIN_OLD_VER/share/postgresql.service
  3. (master) Восстановите локальную резервную копию:

    sudo -iu postgres
    PGPASSWORD=<пароль пользователя postgres> /opt/pangolin-backup-tools/bin/pg_probackup restore -B /pgarclogs/cache/backup/pangolin_dbms --instance clustername -j 14 --progress --restore-command=cp /pgarclogs/cache/backup/pangolin_dbms/wal/clustername/%f %p -w
    exit
    export PANGOLIN_MAJOR_OLD_VER=06
    sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/*.conf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/

    Дополнительно для конфигурации с Pangolin Manager:

    export PANGOLIN_MAJOR_OLD_VER=06
    sudo cp -ra ~/pangolin/cache/backup/manager/patroni.dynamic.json /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/patroni.dynamic.json

Шаг 12. Завершающие действия

  1. (master, replica) Восстановите сторонние файлы:

    export PANGOLIN_MAJOR_OLD_VER=06
    sudo cp -ra ~/pangolin/cache/backup/general/.bash_profile /home/postgres/.bash_profile
    sudo cp -ra ~/pangolin/cache/backup/general/10-kmadmin_pg /etc/sudoers.d/10-kmadmin_pg
    sudo cp -ra ~/pangolin/cache/backup/general/10-postgres /etc/sudoers.d/10-postgres
    sudo cp -ra ~/pangolin/cache/backup/general/dynmotd.sh /usr/local/sbin/dynmotd.sh
    sudo ln -sfnv /pgdata/$PANGOLIN_MAJOR_OLD_VER /pgdata/data
    sudo rm -rf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/recovery.signal

    Дополнительно восстановить на узле arbiter:

    sudo cp -ra ~/pangolin/cache/backup/general/dynmotd.sh     /usr/local/sbin/dynmotd.sh

Шаг 13. Запуск компонентов СУБД Pangolin

  1. (master, replica, arbiter) Запустите компоненты Pangolin:

    • Для всех конфигураций:

      sudo systemctl daemon-reload
    • Для конфигурации без Pangolin Manager:

      sudo systemctl restart postgresql
    • Для конфигурации с Pangolin Manager:

      sudo systemctl restart pangolin-manager
    • Для конфигурации с etcd:

      sudo systemctl restart etcd
    • Для всех конфигураций:

      sudo systemctl restart pangolin-pooler
      sudo systemctl restart pangolin-certs-rotate
      sudo systemctl restart pangolin-auth-reencrypt@postgres
      sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
  2. (replica, master, arbiter) Запустите сторонние сервисы:

    sudo systemctl restart crond
  3. (master) В случае конфигурации с Pangolin Manager выведите компонент из режима паузы:

    sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml remove clustername
    sudo systemctl restart pangolin-manager # Дополнительно выполнить на узле replica
    sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
    sudo -iu postgres /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername