Перейти к основному содержимому

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:

  1. обнаруживает timeout leader key;
  2. выбирает наиболее актуальную replica;
  3. выполняет pg_promote;
  4. обновляет endpoint в DCS / HAProxy.

Spilo (образ Zalando) = PostgreSQL + Patroni + env bootstrap.


Стек HA on-premise

КомпонентРоль
3+ узла Postgres + PatroniQuorum, failover
etcd clusterDCS
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 PostgresGreenplum
МодельОдин primary + replicasMaster + 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 + PatroniCockroachDB
АрхитектураSingle primary writeMulti-active nodes
CAP при partitionCP ( один primary )CP, geo-распределение
Миграция с PostgresNativeАдаптация 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-экосистему.


Когда что выбирать

ЗадачаРекомендация
Обычный backendManaged Postgres или Patroni 3-node
Read scaleReplicas + PgBouncer
Write scale одной таблицыCitus, partitioning, или redesign
Petabyte analyticsGreenplum, BigQuery, Snowflake
Global active-activeCockroachDB, YugabyteDB

Greenplum vs «просто Postgres»

Не путайте логическое партиционирование Postgres (шаг 4) с MPP. Партиции на одном узле не добавляют CPU других машин.


Практика

  1. Поднимите Patroni lab (docker-compose patroni + etcd), выполните docker kill primary, замерьте RTO failover.
  2. Прочитайте release notes Citus для вашей версии Postgres.
  3. Составьте таблицу «наши SLA → архитектура» для учебного проекта.

Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").