Перейти к содержанию

High Availability

Load Balancers (keepalived)

  • VIP: 10.10.19.100
  • lb-1: MASTER (priority выше), lb-2: BACKUP
  • При падении lb-1 — VIP переходит на lb-2

PostgreSQL (HAProxy + Patroni + etcd)

HAProxy (на lb-1 и lb-2): - Порт 5432: TCP proxy к текущему Patroni leader - Порт 8404: HAProxy stats dashboard - Автоматически определяет текущий leader через Patroni health checks - Приложения и voip-серверы подключаются к PostgreSQL через HAProxy

Patroni: - db-1: Primary (leader), db-2: Replica (streaming replication) - etcd кластер: db-1, db-2, mon-1 - При падении db-1 — Patroni промоутит db-2, HAProxy автоматически переключится

После failover: ODBC на voip-серверах может потребовать обновления:

ansible-playbook playbooks/failover-db.yml

Redis (Sentinel)

  • Master: redis-1 (10.10.19.40:6379), master name: callbox-redis
  • Sentinel кластер: redis-1, web-1, web-2 (порт 26379)
  • При падении redis-1 — Sentinel выбирает новый master
  • Backend подключается через Sentinel (автоматический failover)

Application Servers

  • web-1, web-2: active-active, nginx (lb-1/lb-2) балансирует с least_conn

VoIP серверы

  • voip-1: основной (SIP NAT направлен на него), voip-2: резервный
  • Переключение: изменить NAT правила на lb-1/lb-2
  • ВАЖНО: разные dialplan engines (pbx_lua/pbx_ael) — при failover поведение может отличаться

Известные проблемы

  • После Patroni failover ODBC на voip-серверах может указывать на старый primary. Запустить failover-db.yml.
  • AMI настроен только на voip-1. При переключении на voip-2 мониторинг через AMI не работает.
  • voip-1 и voip-2 имеют разные dialplan engines — планируется унификация.

История изменений

  • 2026-02-12: Добавлен HAProxy. Проверены роли Patroni (db-1=leader, db-2=replica).