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

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

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

Внимание!

Перед началом выполнения инструкции необходимо убедиться, что yum/dnf-репозитории настроены корректно.

Поскольку инструкция является универсальной для standalone и кластерных (cluster) конфигураций, каждый пункт необходимо выполнить на всех узлах экземпляра СУБД. На узле арбитр производить обновление компонентов только по необходимости.

Восстановление выполняется покомпонентно. Шаги, соответствующие компонентам, отсутствующим в конфигурации, следует пропустить.

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

Все команды ниже являются примерами. Их необходимо отредактировать в соответствии с требуемыми параметрами и конфигурациями. В названиях rpm/deb-пакетов и в блоках кода, при необходимости, замените наименование ОС и пакетного менеджера. Также, в данной инструкции, резервная копия файлов компонентов находится в каталоге под названием ~/pangolin/cache/backup, созданная в процессе ручного обновления на «Шаге 1».

Обозначения

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

  • PANGOLIN_FULL_VER_OLD – исходная версия СУБД Pangolin (формат - 0х.00х.0х);
  • PANGOLIN_DBMS_MAJOR - новая мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_DBMS_MAJOR_OLD - исходная мажорная версия СУБД Pangolin (формат - х);
  • PANGOLIN_VER – новая версия СУБД Pangolin (формат - х.х.х);
  • PANGOLIN_TIMESCALEDB_OLD – исходная версия расширения timescaledb (формат - х.х.х);
  • PGDATA – исходный путь до данных СУБД Pangolin (формат - /pgdata/xx);
  • PGHOME – исходный путь до серверной части СУБД Pangolin (формат - /usr/pangolin-x.x.x);
  • PGHOME_CLIENT – исходный путь до клиентской части СУБД Pangolin (формат - /usr/pangolin-x.x.x);
  • PGHOME_NEW – новый путь до серверной части СУБД Pangolin (формат - /usr/pangolin-x.x);
  • PGHOME_CLIENT_NEW – новый путь до клиентской части СУБД Pangolin (формат - /usr/pangolin-dbms-client-x.x);
  • PGPASSWORD - пароль от пользователя БД (по умолчанию пользователь postgres);
  • PGPORT - порт СУБД Pangolin (по умолчанию 5433);
  • CLUSTERNAME - наименование кластера (по умолчанию clustername).
  • OS – операционная система.

Шаг 1. Подготовка

  1. Убедитесь, что все компоненты остановлены:

    sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pg_auth_reencrypt|etcd" | grep -v grep
  2. Если команда вернула результат, то выполните:

    sudo kill -9 <pid>
    примечание

    pid можно получить следующим образом:

    sudo ps aux | grep -E "pgbouncer|pangolin-pooler|pangolin-manager|patroni|postgresql|pangolin-certs-rotate|pg_certs_rotate_agent|pangolin-auth-reencrypt|pg_auth_reencrypt|etcd" | grep -v grep

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-auth-reencrypt
sudo mkdir -p /opt/pangolin-common/bin /etc/postgres
sudo cp -raf ~/pangolin/cache/backup/pangolin_auth_reencrypt/pangolin_reencrypt@.service {path_to_service}/
sudo cp -raf ~/pangolin/cache/backup/pangolin_auth_reencrypt/pg_auth_reencrypt /opt/pangolin-common/bin/
sudo cp -raf ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_util.cfg /etc/postgres/
sudo cp -raf ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.kmadmin_pg /etc/postgres/
sudo cp -raf ~/pangolin/cache/backup/pangolin_auth_reencrypt/enc_params.cfg.postgres /etc/postgres/
sudo chown postgres:kmadmin_pg /etc/postgres /opt/{pangolin-common,pangolin-common/bin}
sudo chmod 771 /etc/postgres
sudo chmod 710 /opt/{pangolin-common,pangolin-common/bin}

Где path_to_service - актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-certs-rotate
sudo mkdir -p /opt/pangolin-common/bin /etc/postgres
sudo cp -raf ~/pangolin/cache/backup/pangolin_certs_rotate/pg_certs_rotate_agent.service {path_to_service}/
sudo cp -raf ~/pangolin/cache/backup/pangolin_certs_rotate/pg_certs_rotate_agent /opt/pangolin-common/bin/
sudo cp -raf ~/pangolin/cache/backup/pangolin_certs_rotate/pg_certs_rotate_agent.yml /etc/postgres/
sudo chown postgres:kmadmin_pg /etc/postgres /opt/{pangolin-common,pangolin-common/bin}
sudo chmod 771 /etc/postgres
sudo chmod 710 /opt/{pangolin-common,pangolin-common/bin}

Где path_to_service - актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

Шаг 4. Восстановление компонента pangolin-security-utilities

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-security-utilities
sudo mkdir -p /etc/postgres
sudo cp -raf ~/pangolin/cache/backup/pangolin_security_utilities/enc_connection_settings_cert.cfg /etc/postgres/
sudo cp -raf ~/pangolin/cache/backup/pangolin_security_utilities/enc_connection_settings.cfg /etc/postgres/
sudo chown postgres:kmadmin_pg /etc/postgres
sudo chmod 771 /etc/postgres

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-backup-tools pangolin-backup-tools-venv
sudo mkdir -p /opt/omni/lbin
sudo cp -raf ~/pangolin/cache/backup/pangolin_backup_tools/* /opt/omni/lbin/

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

Произведите восстановление пакета компонента:

dnf remove -y pangolin-pooler
sudo mkdir -p /etc/pgbouncer
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/pgbouncer.service {path_to_service}/
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/pgbouncer /usr/local/bin/
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/pgbouncer.ini /etc/pgbouncer/
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/userlist.txt /etc/pgbouncer/
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/pgbouncer.1 /usr/local/share/man/man1/
sudo cp -raf ~/pangolin/cache/backup/pangolin_pooler/pgbouncer.5 /usr/local/share/man/man5/
sudo chown postgres:postgres /etc/pgbouncer
sudo chmod 700 /etc/pgbouncer

Где path_to_service - актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-manager pangolin-manager-venv
sudo cp -raf ~/pangolin/cache/backup/pangolin_manager/patroni.service {path_to_service}/
sudo cp -raf ~/pangolin/cache/backup/pangolin_manager/postgres.yml /etc/patroni/
sudo cp -raf ~/pangolin/cache/backup/pangolin_manager/reload_pgbouncer.sh /etc/patroni/
sudo cp -raf ~/pangolin/cache/backup/pangolin_manager/patroni /usr/

Где path_to_service - актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

Шаг 8. Восстановление компонента серверной части СУБД Pangolin

  1. Произведите восстановление пакета компонента:

    export PANGOLIN_FULL_VER_OLD=x.x.x
    export PGHOME=/usr/pangolin-x.x.x
    export PANGOLIN_DBMS_MAJOR_OLD=x
    sudo dnf remove -y pangolin-dbms* platform-v-pangolin-dbms
    sudo dnf install -y ~/pangolin/cache/backup/pangolin_dbms/platform-v-pangolin-dbms-$PANGOLIN_FULL_VER_OLD-sberlinux9.x86_64.rpm
    sudo mkdir -p /etc/postgres
    sudo cp -raf ~/pangolin/cache/backup/pangolin_dbms/postgresql.service {path_to_service}/ # для конфигурации без Pangolin Manager
    sudo cp -raf ~/pangolin/cache/backup/pangolin_dbms/enc_utils_auth_settings.cfg /etc/postgres/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_dbms/pangolin* /usr/
    sudo chown postgres:kmadmin_pg /etc/postgres
    sudo chmod 771 /etc/postgres
    sudo ln -sfnv $PGHOME /usr/pangolin
    sudo ln -sfnv $PGHOME /usr/pgsql-se-0$PANGOLIN_DBMS_MAJOR_OLD

    Где path_to_service - актуальный путь до service-файла компонента. В случае наличия функциональности «Отказ от root» это может быть путь /home/postgres/.config/systemd/user/. В случае отсутствия такой функциональности это может быть /usr/lib/systemd/system/, /lib/systemd/system/ или /etc/systemd/system/.

  2. Восстановите локальную резервную копию (РК) на мастере:

    sudo -iu postgres
    export PGPASSWORD=<password_postgres>
    export PGPORT=<port DBMS>
    export PGDATA=/pgdata/xx
    export CLUSTERNAME=clustername
    export PGHOME=/usr/pangolin-x.x.x
    rm -rf $PGDATA
    $PGHOME/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
    ln -sfnv $PGDATA /pgdata/data
    exit
  3. Произведите чистку $PGDATA на реплике:

    sudo -iu postgres
    export PGDATA=/pgdata/xx
    rm -rf $PGDATA
    ln -sfnv $PGDATA /pgdata/data
    exit

Шаг 9. Восстановление компонента клиентской части СУБД Pangolin

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-dbms-client

Шаг 10. Восстановление расширения pangolin-timescaledb

Произведите восстановление пакета расширения:

export PANGOLIN_TIMESCALEDB_OLD=x.x.x
sudo dnf remove -y pangolin-timescaledb*
sudo dnf install -y ~/pangolin/cache/backup/pangolin_timescaledb/pangolin-timescaledb-$PANGOLIN_TIMESCALEDB_OLD-sberlinux9.x86_64.rpm

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-auth-password

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

Произведите восстановление пакета компонента:

sudo dnf remove -y pangolin-tuner

Шаг 13. Восстановление компонента pangolin-diagnostic-tool

Внимание!

Восстановление компонента производится нашаге 8 во время восстановления из РК.

sudo dnf remove -y pangolin-diagnostic-tool

Шаг 14. Восстановление пакетов pangolin-untrusted расширений

Внимание!

Восстановление расширений производится нашаге 8 во время восстановления из РК.

export PANGOLIN_VER=x.x.x
export PANGOLIN_DBMS_MAJOR=x
sudo dnf remove -y pangolin-dbms-$PANGOLIN_DBMS_MAJOR-{ext_name}-$PANGOLIN_VER

Где ext_name - название untrusted-расширения.

Шаг 15. Восстановление пакетов сторонних расширений

Внимание!

Восстановление расширений производится нашаге 8 во время восстановления из РК.

export PANGOLIN_DBMS_MAJOR=x
sudo dnf remove -y pangolin-pgrouting-$PANGOLIN_DBMS_MAJOR pangolin-postgis-$PANGOLIN_DBMS_MAJOR pangolin-pg-background-$PANGOLIN_DBMS_MAJOR

Шаг 16. Дополнительный действия

  1. Произведите восстановление исходных файлов .bash_profile, .bashrc, dynmotd.sh для пользователей postgres и kmadmin_pg:

    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/postgres/.bash_profile   /home/postgres/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/postgres/.bashrc /home/postgres/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/kmadmin_pg/.bash_profile /home/kmadmin_pg/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/kmadmin_pg/.bashrc /home/kmadmin_pg/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/dynmotd.sh /usr/local/sbin/
    sudo cp -raf ~/pangolin/cache/backup/pangolin_general/profile /etc/
    Внимание!

    Дополнительно произведите восстановление на узле арбитр.

  2. Произведите удаление следов обновления:

    export PGHOME_CLIENT_NEW=/usr/pangolin-dbms-client-x.x
    export PGHOME_NEW=/usr/pangolin-x.x
    sudo rm -rf /opt/pangolin_license
    sudo rm -rf /etc/pangolin-auth-encryption
    sudo rm -rf $PGHOME_CLIENT_NEW $PGHOME_NEW

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

  1. Запустите компоненты СУБД Pangolin. Для конфигурации с Pangolin Manager действия по запуску произведите сначала на мастере, затем на реплике, после на арбитре:

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

      • на мастере и реплике:

        sudo systemctl daemon-reload
        sudo systemctl start pgbouncer
        sudo systemctl start pg_certs_rotate_agent
        sudo systemctl start pangolin_reencrypt@postgres
        sudo systemctl start pangolin_reencrypt@kmadmin_pg
        sudo systemctl start patroni
        sudo systemctl start etcd
        sudo -iu postgres
        export PGHOME_CLIENT=/usr/pangolin-x.x.x
        export PGDATA=/pgdata/xx
        $PGHOME_CLIENT/bin/pg_ctl start -D $PGDATA/data
        exit
      • на арбитре:

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

      • на мастере:

        sudo systemctl daemon-reload
        sudo systemctl start pgbouncer
        sudo systemctl start pg_certs_rotate_agent
        sudo systemctl start pangolin_reencrypt@postgres
        sudo systemctl start pangolin_reencrypt@kmadmin_pg
        # в случае наличия файла `postgresql.service`:
        sudo systemctl start postgresql
        # в случае отсутствия файла `postgresql.service`:
        sudo -iu postgres
        export PGHOME_CLIENT=/usr/pangolin-x.x.x
        export PGDATA=/pgdata/xx
        $PGHOME_CLIENT/bin/pg_ctl start -D $PGDATA/data
        exit
  2. Запустите сторонние сервисы:

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

    sudo -iu postgres
    export CLUSTERNAME=clustername
    /usr/patroni/patroni_venv/bin/patronictl -c /etc/patroni/postgres.yml remove $CLUSTERNAME
    exit
    sudo systemctl restart patroni # Дополнительно выполните на узле replica
    sudo -iu postgres
    export CLUSTERNAME=clustername
    /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