Откат#
Документ описывает процедуру отката на предыдущую версию для нескольких вариантов инсталляций:
IAM Proxy + KeyCloak.SE;
IAM Proxy.
Если требуется откатить только IAM Proxy, то шаги по дампу нужно пропустить.
Предусловия для отката IAM Proxy в составе с KeyCloak.SE#
Перед началом отката должны быть выполнены следующие действия:
Подготовлен архив в папке (создается автоматически развертыванием в
/home/nginx/backup_nginx_<ver>_<date install>.tgz);Подготовлен дамп базы данных или схемы базы данных.
Если дамп базы данных отсутствует, необходимо:
Удостовериться в наличии доступа по SSH к кластеру СУБД;
Удостовериться в доступности утилиты
psqlпри подключении к кластеру СУБД;Используя утилиту
pg_dumpснять дамп базы данных.Снять дамп базы данных KeyCloak.SE: Пример:
pg_dump -U postgres -Fcbvf "/db/my_db_keycloak.dump" db_keycloak
где:
-U postgres - пользователь, который подключиться к БД db_keycloak;
/db/my_db_keycloak.dump - расположение файла в который будет выгружен дамп;
db_keycloak - наименование базы данных;
Снять дамп схемы базы данных KeyCloak.SE:
Пример:
pg_dump -U postgres -Ftar --schema=schema_name db_keycloak > /db/my_schema_name_db_keycloak.tar
где:
-U postgres - пользователь, который подключиться к БД db_keycloak
--schema=schema_name - наименование схемы, дамп которой планируется снять.
db_keycloak - наименование базы данных в которой хранится схема.
/db/my_schema_name_db_keycloak.tar - расположение файла в который будет выгружен дамп. Важно не указывать временную
директорию. Если сохранить дамп в /tmp/, то после отката схема не сохранится.
Наименование базы данных и схем можно посмотреть в профиле развертывания keycloak.yml или в standalone-ha.xml.
Вариант 1. Откат через развертывание / развертывание дистрибутива предыдущей версии#
Для отката с помощью развертывания предыдущей версии дистрибутива:
Подключитесь к кластеру Pangolin.
Дамп базы данных.
Восстановиться из ранее созданного дампа базы данных /db/my_db_keycloak.dump. Для этого нужно воспользоваться утилитой
pg_restore:
Пример:
pg_restore -U postgres -d db_keycloak -v "/db/my_db_keycloak.dump"
где:
-U postgres - пользователь, который подключиться к откатываемой БД db_keycloak
"/db/my_db_keycloak.dump" - расположение файла дампа который будет использован для восстановления БД
Дамп схемы базы данных.
Восстановиться из ранее созданного дампа схемы /db/my_schema_name_db_keycloak.tar. Для этого нужно воспользоваться
утилитой pg_restore:
Пример:
pg_restore -Ft -U postgres -d db_keycloak /db/my_schema_name_db_keycloak.tar
где:
-U postgres - пользователь, который подключиться к откатываемой БД db_keycloak
/db/my_schema_name_db_keycloak.tar - расположение схемы которая будет использована для восстановления
При помощи Jenkins job развернуть релиз на который откатываем, например
D-04.003.00_7_4.2.0.
Вариант 2. Откат через ручное восстановление файлов из резервной копии#
Подключиться к кластеру Pangolin
1.2. Дамп базы данных
Восстановиться из ранее созданного дампа базы данных /db/my_db_keycloak.dump. Для этого нужно воспользоваться утилитой
pg_restore:
Пример:
pg_restore -U postgres -d db_keycloak -v "/db/my_db_keycloak.dump"
где:
-U postgres - пользователь, который подключиться к откатываемой БД db_keycloak
"/db/my_db_keycloak.dump" - расположение файла дампа который будет использован для восстановления БД
1.2. Дамп схемы базы данных
Восстановиться из ранее созданного дампа схемы /db/my_schema_name_db_keycloak.tar. Для этого нужно воспользоваться
утилитой pg_restore:
Пример:
pg_restore -Ft -U postgres -d db_keycloak /db/my_schema_name_db_keycloak.tar
где:
-U postgres - пользователь, который подключиться к откатываемой БД db_keycloak
/db/my_schema_name_db_keycloak.tar - расположение схемы которая будет использована для восстановления
В директории пользователя сервиса:
Удалить каталоги
/usr/local/openresty/nginx/conf,/usr/local/openresty/nginx/html,/usr/local/openresty/nginx/logs,/usr/local/openresty/site.Перейти в папку
/home/nginx, она содержит файлы-копий backup_nginx__ .tgz, автоматически создаваемые развертыванием в разрезе версия+дата Выбрать файл с резервной копией (/home/nginx/backup_nginx_
_ .tgz), и восстановить из архива удаленные выше каталоги (или восстановить все файлы сервиса под root, командой tar -xf my.tgz -C /)
Важно!
Не стоит перезаписывать бинарники при восстановлении из резервной копии, в противном случае могут возникнуть проблемы с правами. Если все же необходимо перезаписать исполняемые файлы, то на RHEL надо будет восстановить capabilities на них (по аналогии того, как делают скрипты подготовки), например:
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/openresty/nginx/sbin/nginx
Справочно: развертывание создает резервную копию 1 раз в день.
Проблемы и решения#
Откат завершился неудачно по причине отсутствия новой функциональности в версии на который производим откат#
fatal: [proxy_1]: FAILED! => {"changed": true, "cmd": "sudo -n -u root /bin/systemctl enable nginx\nsudo -n -u root /bin/systemctl
restart nginx || (echo \"Error restart proxy!\" ; tail /usr/local/openresty/nginx/logs/nginx.log ; exit 1 )\n",
"delta": "0:00:00.192197", "end": "2022-12-28 11:02:04.769195", "msg": "non-zero return code", "rc": 1,
"start": "2022-12-28 11:02:04.576998", "stderr": "Job for nginx.service failed because the control process exited
with error code. See \"systemctl status nginx.service\" and \"journalctl -xe\" for details.", "stderr_lines":
["Job for nginx.service failed because the control process exited with error code. See \"systemctl status nginx.service\"
and \"journalctl -xe\" for details."], "stdout": "Error restart proxy!", "stdout_lines": ["Error restart proxy!"]}
Решение#
Убедитесь в том, что конфигурационные настройки соответствуют версии релиза на который производится откат.
Перезапустите сборку.
Перезапустите
systemd nginx IAM Proxy unit.