Откат#
Внимание!
Действия, которые будут производиться ниже, нужно выполнять от привилегированного пользователя, имеющего права на
sudo.
Перед процессом восстановления версии Pangolin, важно понять на каком этапе в процессе обновления произошла ошибка. В случае возникновения проблем с обновлением, Pangolin изначально попытается откатить изменения, но если сбой произошел после автоматического восстановления, то будет сгенерирован файл в корневой папке пользователя postgres с названием .process_work_statuses. Внутри него будет описана ошибка, например:
«В процессе обновления возникла ошибка»;
«Восстановление СУБД Pangolin в автоматическом режиме недоступно для этого типа ошибки»;
«Восстановление СУБД Pangolin запущено».
Примечание:
Восстанавливать СУБД не нужно, если последней строкой записи является:
«Обновление СУБД Pangolin успешно завершено»;
«Восстановление СУБД Pangolin успешно завершено».
Описание ключей файла .process_work_statuses при различных ошибках:
{'aggregate': False,
'components': {'configuration': False,
'etcd': False,
'patroni': False,
'pg': False,
'pgbouncer': False},
'hosts': {'etcd': False, 'master': False, 'replica': False},
'types': {'pg': {'bootstrap': False,
'not_started_db': False,
'remove_pgaudit': False,
'role_switched': False,
'started_db': False}}}
Если ошибка произошла при работе механизма обновления, то ключ
aggregateдолжен иметь значениеtrue.В секции
componentsтолько один ключ должен иметь значениеtrue:Если
components.pgравенtrue, то ошибка произошла в момент обновления самого компонента PostgreSQL, а обновление компонент etcd, Pangolin Manager, Pangolin Pooler, не было начато и восстанавливать необходимо только компоненту PostgreSQL.Если
components.etcdравенtrue, то ошибка произошла в момент обновления компоненты etcd, а обновление компонент Pangolin Manager, Pangolin Pooler, не было начато и восстанавливать необходимо только компоненты PostgreSQL и etcd.Если
components.patroniравенtrue, то ошибка произошла в момент обновления компоненты Pangolin Manager, а обновление компонент Pangolin Pooler, не было начато и восстанавливать необходимо только компоненты PostgreSQL, etcd и Pangolin Manager.Если
components.pgbouncerравенtrue, то ошибка произошла в момент обновления компоненты Pangolin Pooler, а обновление компоненты не было начато и восстанавливать необходимо только компоненты PostgreSQL, etcd, Pangolin Manager и Pangolin Pooler.
Откат вручную к исходной версии и состоянию кластера#
Внимание!
Данные действия должны быть произведены на всех узлах СУБД, независимо от того, является решение односерверным или кластерным.
В случае, если обновление закончилось неудачей и автоматический откат тоже привел к ошибке, ниже описаны шаги для выполнения ручного отката:
Разблокируйте трафик:
Проверьте, заблокирован ли трафик:
sudo iptables -LЕсли есть строки в выводе, выполните:
sudo iptables -F
Проверьте наличие исполняемых и конфигурационных файлов (в случае отсутствия какого-либо файла, дальнейшие шаги невозможны):
ll /tmp/PGSE/backups/home/postgres/.bash_profile;ll /tmp/PGSE/backups/postgresql/pgsql-se-04/bin/;ll /tmp/PGSE/backups/postgresql/pgdata/04/data/;Конфигурации без Pangolin Manager:
ll /tmp/PGSE/backups/etc/systemd/system/postgresql.service(конфигурации без Pangolin Manager);
Конфигурации с Pangolin Manager:
ll /tmp/PGSE/backups/etc/systemd/system/pangolin-manager.service(конфигурации с Pangolin Manager);ll /tmp/PGSE/backups/patroni/etc/pangolin-manager/postgres.yml(конфигурации с Pangolin Manager);
Конфигурации с Pangolin Pooler:
ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/etc/systemd/system/pangolin-pooler.service(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/etc/pangolin-pooler/userlist.txt(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/etc/pangolin-pooler/pangolin-pooler.ini(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/etc/logrotate.d/pgbouncer(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/pgbouncer/usr/local/bin/pgbouncer(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/pgbouncer/usr/local/share/doc/(конфигурации с Pangolin Pooler);ll /pgarclogs/backups/Pangolin_update/{{ ansible_date_time.date }}-T{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}/pgbouncer/usr/local/share/man(конфигурации с Pangolin Pooler);
Произведите остановку всех сервисов:
sudo systemctl stop pangolin-manager ps -aux | grep pangolin-manager pg_ctl -D /pgdata/04/data/ stop ps -aux | grep postgres sudo systemctl stop etcd ps -aux | grep etcd sudo systemctl stop pgbouncer ps -aux | grep pgbouncerКорректно удалите Pangolin, Pangolin Manager и очистите БД etcd:
sudo yum remove postgresql-sber-edition sudo rm -rf /usr/pgsql-se-04 sudo yum remove pangolin-managerВ директории
/usr/local/pgsql, в случае ее наличия, удалите все, кроме директории (и ее содержимого)/usr/local/pgsql/postgres_venv;Если что-либо из
components.patroni, components.etcd, components.configurationилиcomponents.pgbouncerимеет значениеtrue:sudo rm -rf /var/lib/etcdЕсли что-либо из
components.patroni, components.configurationилиcomponents.pgbouncerимеет значениеtrue:sudo rm -rf /usr/local/pgsql/postgres_venv sudo rm -rf /usr/local/pgsql
Скопируйте файлы/данные, необходимые для восстановления:
sudo mkdir /usr/pgsql-se-04 sudo chown -R postgres:postgres /usr/pgsql-se-04 cp -rf /tmp/PGSE/backups/postgresql/pgsql-se-04/* /usr/pgsql-se-04 cp -r /tmp/PGSE/backups/postgresql/pgdata/04/data/* /pgdata/04/data/ cp /tmp/PGSE/backups/home/postgres/.bash_profile /home/postgres source /home/postgres/.bash_profile cp /tmp/PGSE/backups/patroni/etc/pangolin-manager/postgres.yml /etc/pangolin-manager/ #конфигурации с Pangolin Manager sudo cp /tmp/PGSE/backups/etc/systemd/system/pangolin-manager.service /etc/systemd/system/ #конфигурации с Pangolin Manager sudo cp /tmp/PGSE/backups/etc/systemd/system/postgresql.service /etc/systemd/system/ #конфигурации без Pangolin ManagerЕсли что-либо из
components.patroni, components.etcd, components.configurationилиcomponents.pgbouncerимеет значениеtrue:sudo cp -rf /tmp/PGSE/backups/etcd/db_backup/etcd/ /var/lib/ sudo chown -R etcd:etcd /var/lib/etcdЕсли что-либо из
components.patroni, components.configurationилиcomponents.pgbouncerимеет значениеtrue:для версий от 4.3.0:
sudo mkdir -p /usr/patroni/patroni_venv sudo chown -R postgres:postgres /usr/patroni cp -rf /tmp/PGSE/backups/patroni/patroni_venv/* /usr/patroni/patroni_venv/
Если что-либо из
components.configurationилиcomponents.pgbouncerимеет значениеtrue:Конфигурации с Pangolin Pooler:
sudo mkdir /etc/Pangolin Pooler sudo cp /pgarclogs/backups/etc/systemd/system/pangolin-pooler.service /etc/systemd/system/ sudo cp -r /pgarclogs/backups/pangolin-pooler/etc/pangolin-pooler/ /etc sudo cp /pgarclogs/backups/etc/logrotate.d/pangolin-pooler /etc/logrotate.d/pangolin-pooler sudo cp -r /pgarclogs/backups/pangolin-pooler/usr/local/bin/ /usr/local/ sudo cp -r /pgarclogs/backups/pangolin-pooler/usr/local/share/ /usr/local/
Выполните команду:
sudo systemctl daemon-reloadЗапустите кластер:
Выполните команду:
sudo systemctl start etcdПроверьте запуск etcd:
ps -aux | grep etcdВыполните команду на active, дождитесь когда поднимется БД, а затем выполните ее же на standby:
sudo systemctl start pangolin-managerПроверьте запуск Pangolin Manager:
ps -aux | grep pangolin-managerПроверьте, что Pangolin Manager не в паузе, и БД запустилась. Иначе:
pg_ctl -D /pgdata/04/data/ star curl -X PATCH -u patroniyml:<password> http://localhost:8008/config -d '{"pause":false}'Проверьте запуск Pangolin:
ps -aux | grep postgresВыполните команду:
sudo systemctl start pangolin-poolerПроверьте запуск Pangolin Pooler:
ps -aux | grep pangolin-poolerВыполните команду:
Проверьте работоспособность БД (обязательно перезайдите под postgres):
sudo su - postgres psql select version(); \du \qДля Pangolin Manager:
listПроверьте подключения к БД, например, по LDAP.