patroni

Alta disponibilidad de PostgreSQL con failover automático para el datastore KYC

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "patroni" with this command: npx skills add davidcastagnetoa/skills/davidcastagnetoa-skills-patroni

patroni

Patroni proporciona alta disponibilidad para PostgreSQL mediante failover automático, replicación streaming y prevención de split-brain, asegurando que el datastore del pipeline de verificación de identidad permanezca operativo incluso ante fallos de nodos. Utiliza un sistema de consenso distribuido (etcd, Consul o ZooKeeper) para elegir el líder y orquestar las promociones de réplicas de forma segura.

When to use

Usa esta skill cuando necesites configurar un cluster PostgreSQL de alta disponibilidad para el sistema KYC, con failover automático y replicación. Pertenece al database_agent y se aplica en entornos de producción donde la disponibilidad del 99.9% es un requisito del pipeline de verificación.

Instructions

  1. Definir la arquitectura del cluster Patroni para el pipeline KYC:
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  PostgreSQL  │     │  PostgreSQL  │     │  PostgreSQL  │
│   Primary    │────▶│  Replica 1   │────▶│  Replica 2   │
│  (Leader)    │     │ (Sync Standby)│    │(Async Standby)│
└─────────────┘     └─────────────┘     └─────────────┘
       │                    │                    │
       └────────────────────┴────────────────────┘
                            │
                    ┌───────────────┐
                    │     etcd      │
                    │   (Consensus) │
                    └───────────────┘
  1. Crear el archivo de configuración patroni.yml:
scope: verifid-kyc-cluster
name: pg-node-1

restapi:
  listen: 0.0.0.0:8008
  connect_address: pg-node-1:8008

etcd3:
  hosts: etcd1:2379,etcd2:2379,etcd3:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576  # 1MB
    synchronous_mode: true
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        max_connections: 200
        shared_buffers: '2GB'
        wal_level: 'replica'
        max_wal_senders: 5
        max_replication_slots: 5
        hot_standby: 'on'
        synchronous_commit: 'on'

  initdb:
    - encoding: UTF8
    - data-checksums

  pg_hba:
    - host replication replicator 10.0.0.0/8 scram-sha-256
    - host verifid_kyc verifid_app 10.0.0.0/8 scram-sha-256

  users:
    verifid_admin:
      password: 'admin_password'
      options:
        - createrole
        - createdb
    replicator:
      password: 'repl_password'
      options:
        - replication

postgresql:
  listen: 0.0.0.0:5432
  connect_address: pg-node-1:5432
  data_dir: /var/lib/postgresql/data
  authentication:
    replication:
      username: replicator
      password: 'repl_password'
    superuser:
      username: verifid_admin
      password: 'admin_password'
  1. Desplegar el cluster con Docker Compose para desarrollo/staging:
services:
  etcd:
    image: quay.io/coreos/etcd:v3.5
    command:
      - etcd
      - --name=etcd0
      - --initial-advertise-peer-urls=http://etcd:2380
      - --listen-peer-urls=http://0.0.0.0:2380
      - --advertise-client-urls=http://etcd:2379
      - --listen-client-urls=http://0.0.0.0:2379

  pg-node-1:
    image: patroni-pg16:latest
    environment:
      PATRONI_SCOPE: verifid-kyc-cluster
      PATRONI_NAME: pg-node-1
      PATRONI_ETCD3_HOSTS: etcd:2379
    volumes:
      - pg1-data:/var/lib/postgresql/data

  pg-node-2:
    image: patroni-pg16:latest
    environment:
      PATRONI_SCOPE: verifid-kyc-cluster
      PATRONI_NAME: pg-node-2
      PATRONI_ETCD3_HOSTS: etcd:2379
    volumes:
      - pg2-data:/var/lib/postgresql/data
  1. Configurar HAProxy para balancear las conexiones del pipeline:
global
    maxconn 1000

defaults
    mode tcp
    timeout connect 5s
    timeout client 30s
    timeout server 30s

listen postgresql-primary
    bind *:5000
    option httpchk GET /primary
    http-check expect status 200
    default-server inter 3s fall 3 rise 2
    server pg-node-1 pg-node-1:5432 check port 8008
    server pg-node-2 pg-node-2:5432 check port 8008

listen postgresql-replicas
    bind *:5001
    balance roundrobin
    option httpchk GET /replica
    http-check expect status 200
    default-server inter 3s fall 3 rise 2
    server pg-node-1 pg-node-1:5432 check port 8008
    server pg-node-2 pg-node-2:5432 check port 8008
  1. Verificar el estado del cluster y las operaciones de failover:
# Estado del cluster
patronictl -c /etc/patroni/patroni.yml list

# Failover manual (en caso necesario)
patronictl -c /etc/patroni/patroni.yml failover

# Reiniciar un nodo
patronictl -c /etc/patroni/patroni.yml restart verifid-kyc-cluster pg-node-1
  1. Configurar alertas para eventos de failover:
# Patroni callback scripts
postgresql:
  callbacks:
    on_start: /scripts/notify.sh started
    on_stop: /scripts/notify.sh stopped
    on_role_change: /scripts/notify.sh role_changed

Notes

  • Habilitar synchronous_mode: true para garantizar que al menos una réplica tenga los datos más recientes antes de confirmar escrituras; esto es crítico para no perder resultados de verificación durante un failover.
  • El maximum_lag_on_failover debe configurarse según el volumen de escrituras del pipeline; un valor de 1MB es razonable para el throughput típico del sistema KYC.
  • Desplegar al menos 3 nodos etcd para tolerancia a fallos en el consenso distribuido; con 2 nodos no se puede tolerar la pérdida de ninguno.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

c4_model_structurizr

No summary provided by upstream source.

Repository SourceNeeds Review
General

fastapi

No summary provided by upstream source.

Repository SourceNeeds Review
General

exif_metadata_analyzer

No summary provided by upstream source.

Repository SourceNeeds Review
General

api_key_management

No summary provided by upstream source.

Repository SourceNeeds Review