Saltar a contenido

Apéndice M — Postgres HA con Patroni

Cuando el negocio no tolera más de 5 min de downtime ni perder más de 1 min de datos.

M.1. Arquitectura

Cliente → HAProxy (VIP keepalived)
   ┌────────┼────────┐
   ↓        ↓        ↓
 Patroni  Patroni  Patroni
  Node1   Node2    Node3
   ↓        ↓        ↓
       etcd cluster

M.2. Patroni config (Node 1)

scope: tienda
name: node1
restapi:
  listen: 0.0.0.0:8008
etcd:
  hosts: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379
bootstrap:
  dcs:
    ttl: 30
    postgresql:
      use_pg_rewind: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        max_wal_senders: 10
postgresql:
  listen: 0.0.0.0:5432
  data_dir: /var/lib/postgresql/16/patroni
  bin_dir: /usr/lib/postgresql/16/bin

M.3. HAProxy frontend

backend postgres_primary
    option httpchk OPTIONS /primary
    http-check expect status 200
    server node1 10.0.0.1:5432 check port 8008
    server node2 10.0.0.2:5432 check port 8008 backup
    server node3 10.0.0.3:5432 check port 8008 backup

En .env: DB_HOST=10.0.0.10 (VIP HAProxy).

RTO real: 15-30 segundos. RPO: <1 segundo.