Откат
Внимание!
Действия, которые будут производиться ниже, нужно выполнять от привилегированного пользователя, имеющего права на
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.