HA-кластеры PostgreSQL и распределённые СУБД
Раздел 8.11, шаг 9 из 12. Дальше — бэкапы.
Patroni — автоматический failover
Patroni — шаблон высокой доступности для PostgreSQL. Каждый узел запускает Postgres + Patroni agent. Leader election через distributed configuration store (DCS):
- etcd (типично в Kubernetes);
- Consul;
- ZooKeeper;
- Kubernetes API (native).
При падении primary Patroni:
- обнаруживает timeout leader key;
- выбирает наиболее актуальную replica;
- выполняет
pg_promote; - обновляет endpoint в DCS / HAProxy.
Spilo (образ Zalando) = PostgreSQL + Patroni + env bootstrap.
Стек HA on-premise
| Компонент | Роль |
|---|---|
| 3+ узла Postgres + Patroni | Quorum, failover |
| etcd cluster | DCS |
| HAProxy / keepalived | Стабильный VIP для приложения |
| PgBouncer | Пулинг, optional |
| Wal-G / pgBackRest | Бэкапы (шаг 10) |
Приложение подключается к одному DNS/VIP; Patroni REST API сообщает, кто primary.
Greenplum — MPP-аналитика
Greenplum — форк PostgreSQL для massively parallel processing (MPP). Данные распределены по сегментам (sharding на уровне СУБД), запросы выполняются параллельно на всех segment nodes.
| Аспект | OLTP Postgres | Greenplum |
|---|---|---|
| Модель | Один primary + replicas | Master + N segments |
| Нагрузка | Короткие транзакции | Тяжёлые аналитические scan |
| SQL | Стандарт Postgres + extensions | Похож, но не 100% совместим |
| Конкурентные UPDATE | Сильная сторона | Слабая сторона |
Greenplum выбирают для DW / BI, не для типичного web-backend.
CockroachDB — распределённый SQL
CockroachDB реализует distributed SQL с Raft репликацией на каждый range данных. Совместимость с PostgreSQL wire protocol частичная — многие ORM работают, но не все функции Postgres.
| PostgreSQL + Patroni | CockroachDB | |
|---|---|---|
| Архитектура | Single primary write | Multi-active nodes |
| CAP при partition | CP ( один primary ) | CP, geo-распределение |
| Миграция с Postgres | Native | Адаптация SQL, типов |
| Latency OLTP | Низкая локально | Выше из-за Raft |
CockroachDB уместен для geo-redundant write с единым SQL и готовностью платить latency/complexity.
Citus — extension для sharding
Citus (Microsoft) — расширение PostgreSQL: coordinator + worker nodes, sharding по distribution column.
SELECT create_distributed_table('events', 'tenant_id');
Подходит для multi-tenant SaaS с ростом одной таблицы beyond одного сервера, сохраняя Postgres-экосистему.
Когда что выбирать
| Задача | Рекомендация |
|---|---|
| Обычный backend | Managed Postgres или Patroni 3-node |
| Read scale | Replicas + PgBouncer |
| Write scale одной таблицы | Citus, partitioning, или redesign |
| Petabyte analytics | Greenplum, BigQuery, Snowflake |
| Global active-active | CockroachDB, YugabyteDB |
Greenplum vs «просто Postgres»
Не путайте логическое партиционирование Postgres (шаг 4) с MPP. Партиции на одном узле не добавляют CPU других машин.
Практика
- Поднимите Patroni lab (docker-compose patroni + etcd), выполните
docker killprimary, замерьте RTO failover. - Прочитайте release notes Citus для вашей версии Postgres.
- Составьте таблицу «наши SLA → архитектура» для учебного проекта.
Связанные материалы
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). MVCC, XID, снимки данных, системные поля xmin/xmax, VACUUM и autovacuum, bloat, wraparound, процессы postmaster, Shared Buffers и WAL. pg_dump, pg_basebackup, PITR, pg_probackup, Wal-G, стратегия 3-2-1, восстановление в Kubernetes и после failover. pg_stat_statements, pg_stat_activity, auto_explain, pgBadger, Prometheus postgres_exporter, типовые метрики SLA и алерты. Ansible role для установки Postgres, шаблоны postgresql.conf, Terraform для RDS и managed PostgreSQL, GitOps паттерны для инфраструктуры БД. EXPLAIN и EXPLAIN ANALYZE, B-tree, GiST, SP-GiST, GIN, BRIN, частичные и составные индексы, типовые ошибки планировщика. Тонкая настройка памяти (shared_buffers, work_mem, maintenance_work_mem), I/O (effective_cache_size, random_page_cost), WAL, checkpoint и autovacuum. Документная модель в Postgres, операторы и индексы JSONB, declarative partitioning по range/list/hash, связь с оконными функциями и CTE. Хранимые функции и процедуры PL/pgSQL, row-level и statement triggers, event triggers, асинхронные события через NOTIFY и LISTEN без polling. Streaming replication, logical replication, read replicas и Hot Standby, failover, connection pooling через PgBouncer — transaction и session pooling. Официальный образ postgres, volumes для PGDATA, переменные окружения, docker-compose с healthcheck, типовые ошибки контейнеризации СУБД. Managed PostgreSQL (RDS, Cloud SQL, Yandex Managed), StatefulSet, PersistentVolume, секреты, операторы Crunchy/Zalando, anti-patterns stateful в K8s. Краткое резюме раздела 8.11 — архитектура, оптимизация, эксплуатация в контейнерах и Kubernetes, HA, бэкапы и автоматизация.Архитектура PostgreSQL и внутреннее устройство
Бэкапы PostgreSQL и восстановление
Профилирование и мониторинг PostgreSQL
Автоматизация PostgreSQL — Ansible и Terraform
Продвинутая оптимизация PostgreSQL и индексы
Конфигурация PostgreSQL — postgresql.conf
JSONB, партиционирование и расширения SQL в PostgreSQL
PL/pgSQL, триггеры и NOTIFY/LISTEN в PostgreSQL
Репликация PostgreSQL, Hot Standby и PgBouncer
PostgreSQL в Docker
PostgreSQL в облаке и Kubernetes
Практикум PostgreSQL — итоги