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

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

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

Внимание!

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

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

Восстановление СУБД может осуществляться пользователем с правами суперпользователя, а также пользователем 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) В случае конфигурации с Patroni/Pangolin Manager переведите компонент в режим паузы:

    sudo -iu postgres
    /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml edit-config --set 'pause=true' --force
    exit
    примечание

    Используйте оба варианта остановки (команды в примере выше) для новой и старой версии компонента. Поскольку инструкция рассчитана на любой момент падения, необходимо убедиться в том, что ни одна версия не активна.

  2. (replica, master, arbiter) Остановите все компоненты СУБД Pangolin:

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

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

      sudo -iu postgres
      /usr/pangolin/bin/pg_ctl stop -D /pgdata/05/data
      exit
      sudo systemctl stop patroni
      # или
      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. Удаление компонента pangolin-ansible-venv-controlled

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

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

Шаг 3. Восстановление компонента pangolin_reencrypt

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

    sudo dnf remove -y pangolin-auth-reencrypt
    sudo rm -rf /opt/pangolin-auth-reencrypt
    sudo rm -rf /etc/pangolin-auth-reencrypt
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /opt/pangolin-common/bin /etc/postgres
    sudo chown postgres:kmadmin_pg /etc/postgres /opt/pangolin-common /opt/pangolin-common/bin
    sudo chmod 0771 /etc/postgres
    sudo chmod 0710 /opt/pangolin-common /opt/pangolin-common/bin
    sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/pangolin_reencrypt@.service /etc/systemd/system/pangolin_reencrypt@.service
    sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/pg_auth_reencrypt /opt/pangolin-common/bin/pg_auth_reencrypt
    sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_util.cfg /etc/postgres/enc_util.cfg
    sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_params.cfg.kmadmin_pg /etc/postgres/enc_params.cfg.kmadmin_pg
    sudo cp -ra ~/pangolin/cache/backup/pangolin_reencrypt/enc_params.cfg.postgres /etc/postgres/enc_params.cfg.postgres

Шаг 4. Восстановление компонента pg_certs_rotate_agent

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

    sudo dnf remove -y pangolin-certs-rotate
    sudo rm -rf /opt/pangolin-certs-rotate
    sudo rm -rf /etc/pangolin-certs-rotate
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /opt/pangolin-common/bin /etc/postgres /pgerrorlogs/05/pg_certs_rotate_agent
    sudo chown postgres:kmadmin_pg /etc/postgres /opt/pangolin-common /opt/pangolin-common/bin
    sudo chmod 0700 /pgerrorlogs/05 /pgerrorlogs/05/pg_certs_rotate_agent
    sudo chown postgres:postgres /pgerrorlogs/05 /pgerrorlogs/05/pg_certs_rotate_agent
    sudo chmod 0771 /etc/postgres
    sudo chmod 0710 /opt/pangolin-common /opt/pangolin-common/bin
    sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent.service /etc/systemd/system/pg_certs_rotate_agent.service
    sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent /opt/pangolin-common/bin/pg_certs_rotate_agent
    sudo cp -ra ~/pangolin/cache/backup/pg_certs_rotate_agent/pg_certs_rotate_agent.yml /etc/postgres/pg_certs_rotate_agent.yml

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

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

    sudo dnf remove -y pangolin-diagnostic-tool
    sudo rm -rf /opt/pangolin-diagnostic-tool

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

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

    sudo dnf remove -y pangolin-security-utilities
    sudo rm -rf /opt/pangolin-security-utilities
    sudo rm -rf /etc/pangolin-security-utilities
    sudo mkdir -p /etc/postgres
    sudo chown postgres:kmadmin_pg /etc/postgres
    sudo chmod 0771 /etc/postgres
    sudo cp -ra ~/pangolin/cache/backup/general/enc_connection_settings_cert.cfg /etc/postgres/enc_connection_settings_cert.cfg
    sudo cp -ra ~/pangolin/cache/backup/general/enc_connection_settings.cfg /etc/postgres/enc_connection_settings.cfg

Шаг 7. Восстановление компонента manage_backup

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

    sudo dnf remove -y pangolin-backup-tools
    sudo rm -rf /opt/pangolin-backup-tools
    sudo rm -rf /etc/pangolin-backup-tools
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /opt/omni/lbin/
    sudo chown root:root /opt/omni/lbin/
    sudo chmod 0755 /opt/omni/lbin/
    sudo cp -ra ~/pangolin/cache/backup/manage_backup/* /opt/omni/lbin/

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

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

    sudo dnf remove -y pangolin-pooler
    sudo rm -rf /opt/pangolin-pooler
    sudo rm -rf /etc/pangolin-pooler
  2. (master, replica) Восстановите рабочие файлы компонента:

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

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

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

    sudo dnf remove -y pangolin-manager
    sudo rm -rf /opt/pangolin-manager
    sudo rm -rf /etc/pangolin-manager
  2. (master, replica) Восстановите рабочие файлы компонента:

    sudo mkdir -p /etc/patroni/ /usr/patroni
    sudo chown postgres:postgres /etc/patroni/ /usr/patroni
    sudo chmod 0700 /etc/patroni/ /usr/patroni
    sudo cp -ra ~/pangolin/cache/backup/patroni/patroni.service /etc/systemd/system/patroni.service
    sudo cp -ra ~/pangolin/cache/backup/patroni/postgres.yml /etc/patroni/postgres.yml
    sudo cp -ra ~/pangolin/cache/backup/patroni/reload_pgbouncer.sh /etc/patroni/reload_pgbouncer.sh
    sudo cp -ra ~/pangolin/cache/backup/patroni/patroni/* /usr/patroni/

Шаг 10. Удаление pangolin-license

  1. (master, replica) Удалите pangolin-license:

    sudo rm -rf /opt/pangolin_license

Шаг 11. Восстановление компонента pangolin-dbms

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

    export PANGOLIN_VER=6.x
    export PANGOLIN_MAJOR_VER=0x
    sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER
    sudo dnf remove -y pangolin-dbms-$PANGOLIN_VER-client
    sudo rm -rf /usr/pangolin-$PANGOLIN_VER /usr/pangolin-dbms-$PANGOLIN_VER-client
    sudo rm -rf /pgdata/$PANGOLIN_MAJOR_VER /pgerrorlogs/$PANGOLIN_MAJOR_VER /pgarclogs/$PANGOLIN_MAJOR_VER

    #при необходимости
    sudo dnf remove -y pangolin-timescaledb-$PANGOLIN_VER
  2. (master, replica) Восстановите рабочие файлы компонента:

    export PANGOLIN_OLD_VER=5.x.x
    export PANGOLIN_FULL_OLD_VER=05.00x.0x
    export PANGOLIN_MAJOR_OLD_VER=0x
    sudo mkdir -p /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/
    sudo chmod -R 0700 /pgdata
    sudo chown -R postgres:postgres /pgdata
    sudo dnf install -y /home/<user>/pangolin/cache/backup/pangolin_dbms/platform-v-pangolin-dbms-$PANGOLIN_FULL_OLD_VER-sberlinux8.x86_64.rpm
    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 rm -rf /etc/pangolin-auth-encryption
    sudo cp -ra ~/pangolin/cache/backup/general/enc_utils_auth_settings.cfg /etc/postgres/enc_utils_auth_settings.cfg
    • Для конфигурации без Pangolin Manager:

      sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/postgresql.service /etc/systemd/system/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=0x
    sudo cp -r ~/pangolin/cache/backup/pangolin_dbms/*.conf /pgdata/$PANGOLIN_MAJOR_OLD_VER/data/
    • Дополнительно для конфигурации с Pangolin Manager:

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

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

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

    export PANGOLIN_MAJOR_OLD_VER=0x
    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 patroni
    • Для конфигурации с 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 (Patroni) выведите компонент из режима паузы:

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