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

High Availability (HA)

Автоматически сгенерировано: 2026-03-03 09:38

Обзор компонентов HA

Компонент Технология Назначение Текущий статус
PostgreSQL Patroni + etcd Автоматический failover БД ✅ Active
etcd etcd cluster Распределённое хранилище конфигурации ✅ Active
Redis Redis Sentinel Автоматический failover кэша ✅ Active
Load Balancer keepalived + VRRP Floating VIP для LB ✅ Active
Proxy HAProxy Балансировка нагрузки ✅ Active

Архитектура

┌─────────────────────────────────────────────────┐
│         keepalived (lb-1 MASTER, lb-2 BACKUP)   │
│              VIP: 188.130.238.189               │
└──────────────────┬──────────────────────────────┘
                   │
         ┌─────────┴──────────┐
         │                    │
    ┌────▼────┐          ┌────▼────┐
    │  lb-1   │          │  lb-2   │
    │ HAProxy │          │ HAProxy │
    └────┬────┘          └────┬────┘
         │                    │
         └─────────┬──────────┘
                   │
    ┌──────────────┼──────────────┐
    │              │              │
┌───▼───┐      ┌───▼───┐      ┌───▼───┐
│ web-1 │      │ web-2 │      │ ...   │
└───┬───┘      └───┬───┘      └───────┘
    │              │
    └──────┬───────┘
           │
    ┌──────▼───────┐
    │   Patroni    │
    │ db-1 PRIMARY │
    │ db-2 REPLICA │
    └──────┬───────┘
           │
    ┌──────▼───────┐
    │     etcd     │
    │   cluster    │
    └──────────────┘

Failover процедуры

Автоматический failover

PostgreSQL (Patroni): - Мониторинг каждые 10 секунд - Автоматическое переключение при отказе primary - Время переключения: ~30 секунд

Redis (Sentinel): - Мониторинг каждые 5 секунд - Автоматическое переключение при отказе master - Время переключения: ~10 секунд

Load Balancer (keepalived): - VRRP heartbeat каждые 1 секунду - Автоматическое переключение VIP - Время переключения: ~3 секунды

Ручной failover

PostgreSQL:

ssh db-1
sudo patronictl -c /etc/patroni.yml failover

Redis:

ssh redis-1
redis-cli -p 26379 SENTINEL failover callbox-redis

Проверка статуса

# PostgreSQL Patroni
ssh db-1 'sudo patronictl list'

# Redis Sentinel
ssh redis-1 'redis-cli -p 26379 info sentinel'

# keepalived
ssh lb-1 'systemctl status keepalived'
ssh lb-1 'ip addr show | grep 188.130.238.189'  # VIP на MASTER

# HAProxy
curl http://lb-1:9000/stats  # Stats URL