Как настроить высокодоступную инфраструктуру (load balancer + failover)?

Высокодоступная инфраструктура устраняет единичные точки отказа: приложение запускают в нескольких экземплярах и зонах доступности, а load balancer направляет трафик только на healthy instances. Failover переключает трафик или роль сервиса на резервный экземпляр при сбое, но высокая доступность должна охватывать не только backend, а также базу данных, кэш, DNS, хранилище и наблюдаемость.
Подробный ответ

Цель высокой доступности

High availability, или HA, — это способность сервиса продолжать работу при отказе одного экземпляра, виртуальной машины, availability zone или части инфраструктуры. Для этого нельзя оставлять критический компонент в единственном экземпляре.

Базовая схема

Internet
    |
Load Balancer
    |
+---+-------------------+
|                       |
API instance 1      API instance 2
Zone A              Zone B
|                       |
+---------- Shared dependencies ----------+
           Database / Redis / Object Storage

Load balancer

Load balancer распределяет запросы между несколькими backend-инстансами. Он должен регулярно проверять health endpoint и исключать неготовые либо упавшие экземпляры из маршрутизации.

Failover

Failover — это переключение на резервный компонент после сбоя основного. Он может быть active-active, когда несколько экземпляров одновременно обслуживают трафик, или active-passive, когда резервный экземпляр активируется только при проблеме основного.

Что нужно дублировать

  • несколько stateless-экземпляров приложения в разных availability zones;

  • load balancer или managed load balancer без единой точки отказа;

  • базу данных с репликацией, backup и проверенной процедурой failover;

  • кэш и очередь задач с репликацией либо managed-сервисами;

  • объектное хранилище для файлов вместо локального диска приложения;

  • мониторинг, алерты и runbooks для действий при аварии.

Проверки здоровья

Для балансировщика нужен health endpoint, например /health/ready. Он должен быстро отвечать и отражать способность экземпляра обслуживать трафик. При сбое instance load balancer перестаёт посылать ему новые запросы, а оркестратор или systemd пытается восстановить процесс.

Проверка отказоустойчивости

HA нельзя считать настроенной только потому, что есть два сервера. Нужно регулярно проводить controlled failover: отключать один instance, проверять переключение, тестировать восстановление базы, измерять RTO и проверять, что данные не потеряны сверх согласованного RPO.

Как ответить на собеседовании

Для HA я убираю единичные точки отказа: запускаю несколько stateless-реплик приложения за load balancer в разных зонах, использую readiness/health checks и выношу состояние во внешние отказоустойчивые сервисы. Отдельно проектирую failover базы и кэша, backup, RTO/RPO и регулярно проверяю сценарии отказа на практике.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге