Онлайн-платформа для организации независимого торгового аудита и оценки сервиса
Используемый стек технологий
Клиент обратился с проблемой нестабильной работы приложений в кластере и периодическими проблемами с недоступностью баз данных PostgreSQL и Redis. Несмотря на то, что Redis был реализован в HA-сетапе, при недоступности одной из нод кластер долго переключался, что было критично для приложения клиента.
Для обеспечения поставленной цели были предприняты следующие действия:
— разработан отказоустойчивый сетап с автофейловером для PostgreSQL на базе Pacemaker с ресурс-агентом pgsql, развернуто несколько трёхнодовых кластеров и на них смигрированы все БД;
— настроена непрерывная архивация PostgreSQL, позволяющая восстановить состояние любой базы на любой момент времени за несколько дней назад;
настроен pg_repack по расписанию для таблиц с выраженным bloating (написан скрипт-обёртка для обхода проблемы незакрытых транзакций и вычисления необходимого дискового пространства);
— развёрнут новый кластер Kubernetes, в него смигрированы все приложения, старый кластер уничтожен;
— для обработки отказов вида «падение ноды с ingress» применена кластеризация Pacemaker с ресурс-агентом kumina-hetzner-ip для управления Hetzner Failover IP;
redis вынесен из k8s, для него разработан фейловер на Pacemaker + HA redis;
— деплой приложений в k8s был полностью переписан на ansible, применены resource requests и limits; также по просьбе разработчиков была применена схема blue-green deploy, позволяющая мгновенно и без простоя переключать трафик со «старого» кода на «новый».
Стабильность работы приложений значительно выросла, простои по вине инфраструктуры значительно сократились (пока не в 0, но мы продолжаем поиски решения комплексных проблем, связанных с растущей нагрузкой от приложений), трудоёмкость обслуживания уменьшилась в десятки раз (в основном, всё «просто работает»).
Инфраструктура активно развивается, были развернуты новые экземпляры приложений и баз в других локациях (и планируется ещё).
Инфраструктура представляла собой нагруженный кластер Kubernetes на 3-х физических нодах (с использованием Ceph в качестве общего хранилища) и некоторое количество экземпляров PostgreSQL (до полутерабайта объёмом), также на 3-х серверах. В кластере Kubernetes посредством GitLab CI было развёрнуто два десятка приложений.