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.