Откат#
Внимание!
Действия, которые будут производиться ниже, нужно выполнять от привилегированного пользователя, имеющего права на
sudo.
Перед процессом восстановления версии Pangolin, важно понять на каком этапе в процессе обновления произошла ошибка. В случае возникновения проблем с обновлением продукта, Pangolin изначально попытается откатить изменения, но если сбой произошел после автоматического восстановления, то будет сгенерирован файл в корневой папке пользователя postgres с названием .process_work_statuses. Внутри него будет описана ошибка, например:
«В процессе обновления возникла ошибка»;
«Восстановление СУБД Pangolin в автоматическом режиме недоступно для этого типа ошибки»;
«Восстановление СУБД Pangolin запущено».
Примечание:
Восстанавливать СУБД не нужно, если последней строкой записи является:
«Обновление СУБД Pangolin успешно завершено»;
«Восстановление СУБД Pangolin успешно завершено».
Описание ключей файла .process_work_statuses при различных ошибках:
{'aggregate': False,
'components': {'configuration': False,
'etcd': False,
'haproxy': 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, patroni, pgbouncer, haproxy не было начато и восстанавливать необходимо только компоненту PostgreSQL.Если
components.etcdравенtrue, то ошибка произошла в момент обновления компоненты etcd, а обновление компонент patroni, pgbouncer, haproxy не было начато и восстанавливать необходимо только компоненты PostgreSQL и etcd.Если
components.patroniравенtrue, то ошибка произошла в момент обновления компоненты patroni, а обновление компонент pgbouncer, haproxy не было начато и восстанавливать необходимо только компоненты PostgreSQL, etcd и patroni.Если
components.pgbouncerравенtrue, то ошибка произошла в момент обновления компоненты pgbouncer, а обновление компоненты haproxy не было начато и восстанавливать необходимо только компоненты PostgreSQL, etcd, patroni и pgbouncer.Если
components.haproxy/components.configurationравенtrue, то ошибка произошла в момент обновления компоненты haproxy/configuration и восстанавливать необходимо компоненты PostgreSQL, etcd, patroni, pgbouncer и haproxy.
Откат вручную к исходной версии и состоянию кластера#
Внимание!
Данные действия должны быть произведены на всех узлах СУБД, независимо от того, является решение односерверным или кластерным.
В случае, если обновление закончилось неудачей и автоматический откат тоже привел к ошибке, ниже описаны шаги для выполнения ручного отката:
Разблокируйте трафик:
Проверьте, заблокирован ли трафик:
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/;Конфигурации без patroni:
ll /tmp/PGSE/backups/etc/systemd/system/postgresql.service(конфигурации без patroni);
Конфигурации с patroni:
ll /tmp/PGSE/backups/etc/systemd/system/patroni.service(конфигурации с patroni);ll /tmp/PGSE/backups/patroni/etc/patroni/postgres.yml(конфигурации с patroni);ll /tmp/PGSE/backups/patroni/patroni_venv/bin/(конфигурации с patroni);
Конфигурации с pgBouncer:
ll /tmp/PGSE/backups/etc/systemd/system/pgbouncer.service(конфигурации с pgBouncer);ll /tmp/PGSE/backups/pgbouncer/etc/pgbouncer/userlist.txt(конфигурации с pgBouncer);ll /tmp/PGSE/backups/pgbouncer/etc/pgbouncer/pgbouncer.ini(конфигурации с pgBouncer);ll /tmp/PGSE/backups/etc/logrotate.d/pgbouncer(конфигурации с pgBouncer);ll /tmp/PGSE/backups/pgbouncer/usr/local/bin/pgbouncer(конфигурации с pgBouncer);ll /tmp/PGSE/backups/pgbouncer/usr/local/share/doc/(конфигурации с pgBouncer);ll /tmp/PGSE/backups/pgbouncer/usr/local/share/man(конфигурации с pgBouncer);
Конфигурации с Confd:
ll /tmp/PGSE/backups/pgbouncer/etc/confd/templates/pgbouncer.tmpl(конфигурации с Confd);
Конфигурации с HAProxy:
ll /tmp/PGSE/backups/haproxy/etc/haproxy/haproxy.cfg(конфигурации с HAProxy);
Произведите остановку всех сервисов:
sudo systemctl stop patroni ps -aux | grep patroni 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 sudo systemctl stop confd ps -aux | grep confd sudo systemctl stop haproxy ps -aux | grep haproxyКорректно удалите Pangolin, patroni и почистите БД etcd:
sudo yum remove postgresql-sber-edition sudo rm -rf /usr/pgsql-se-04В директории
/usr/local/pgsql, в случае ее наличия, удалите все, кроме директории (и ее содержимого)/usr/local/pgsql/postgres_venv;Если что-либо из
components.patroni, components.etcd, components.configuration, components.haproxyилиcomponents.pgbouncerимеет значениеtrue:sudo rm -rf /var/lib/etcdЕсли что-либо из
components.patroni, components.configuration, components.haproxyилиcomponents.pgbouncerимеет значениеtrue:sudo rm -rf /usr/local/pgsql/postgres_venv sudo rm -rf /usr/local/pgsql sudo rm -rf /usr/patroni/patroni_venv
Скопируйте файлы/данные, необходимые для восстановления:
sudo mkdir /usr/pgsql-se-04 sudo chown -R postgres:postgres /usr/pgsql-se-04 sudo mkdir -p /usr/patroni/patroni_venv sudo chown -R postgres:postgres /usr/patroni cp -rf /tmp/PGSE/backups/postgresql/pgsql-se-04/* /usr/pgsql-se-04 cp -rf /tmp/PGSE/backups/patroni/patroni_venv/* /usr/patroni/patroni_venv/ 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/patroni/postgres.yml /etc/patroni/ #конфигурации с patroni sudo cp /tmp/PGSE/backups/etc/systemd/system/patroni.service /etc/systemd/system/ #конфигурации с patroni sudo cp /tmp/PGSE/backups/etc/systemd/system/postgresql.service /etc/systemd/system/ #конфигурации без patroniЕсли что-либо из
components.patroni, components.etcd, components.configuration, components.haproxyили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.haproxyили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.haproxyилиcomponents.pgbouncerимеет значениеtrue:Конфигурации с pgBouncer:
sudo mkdir /etc/pgbouncer sudo cp /tmp/PGSE/backups/etc/systemd/system/pgbouncer.service /etc/systemd/system/ sudo cp -r /tmp/PGSE/backups/pgbouncer/etc/pgbouncer/ /etc sudo cp /tmp/PGSE/backups/etc/logrotate.d/pgbouncer /etc/logrotate.d/pgbouncer sudo cp -r /tmp/PGSE/backups/pgbouncer/usr/local/bin/ /usr/local/ sudo cp -r /tmp/PGSE/backups/pgbouncer/usr/local/share/ /usr/local/Конфигурации с Confd:
cp /tmp/PGSE/backups/pgbouncer/etc/confd/templates/pgbouncer.tmpl /etc/confd/templates/pgbouncer.tmpl sudo chown -R postgres:postgres /etc/pgbouncer
Если что-либо из
components.configurationилиcomponents.haproxyимеет значениеtrue:Конфигурации с HAProxy:
cp /tmp/PGSE/backups/haproxy/etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg
Выполните команду:
sudo systemctl daemon-reloadЗапустите кластер:
Выполните команду:
sudo systemctl start etcdПроверьте запуск etcd:
ps -aux | grep etcdВыполните команду на active, дождитесь когда поднимется БД, а затем выполните ее же на standby:
sudo systemctl start patroniПроверьте запуск patroni:
ps -aux | grep patroniПроверьте, что patroni не в паузе и БД запустилась. Иначе:
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 pgbouncerПроверьте запуск pgBouncer:
ps -aux | grep pgbouncerВыполните команду:
sudo systemctl start haproxyПроверьте запуск HAProxy:
ps -aux | grep haproxy
Проверьте работоспособность БД (обязательно перезайдите под
postgres):sudo su - postgres psql select version(); \du \qДля patroni:
listПроверьте подключения к БД, например, по LDAP.