Ranuras de replicación
Las ranuras de replicación indican a la instancia principal que retenga el WAL hasta que un consumidor confirme la recepción. Evitan que las réplicas en espera y los suscriptores lógicos se salgan de la línea de tiempo del WAL.
Receta
Crea una ranura física para cada réplica en espera; elimina las huérfanas con prontitud.
-- Ranura física para una réplica en espera de streaming
SELECT pg_create_physical_replication_slot('standby1_slot');
-- Inspecciona el retraso y el WAL retenido
SELECT slot_name, slot_type, active, restart_lsn,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained
FROM pg_replication_slots;# Elimina una ranura no utilizada (después de confirmar que la réplica en espera ha sido desmantelada)
psql -h primary.db.internal -U postgres -c \
"SELECT pg_drop_replication_slot('old_standby_slot');"Cuándo usar esto: Cualquier réplica en espera de larga duración, suscriptor lógico o herramienta de copia de seguridad que no deba perder WAL.
Ejemplo de trabajo
Crea una ranura durante la copia de seguridad base, monitoriza las ranuras inactivas:
# pg_basebackup con creación de ranura
pg_basebackup -h primary.db.internal -U replicator \
-D /var/lib/postgresql/18/main -Fp -Xs -P -R \
-C -S standby1_slot-- Consulta de alerta: ranura inactiva que retiene WAL
SELECT slot_name, active,
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS bytes_retained
FROM pg_replication_slots
WHERE NOT active
AND pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) > 1073741824; -- 1 GiBLo que esto demuestra:
- Las ranuras físicas vinculan la retención de WAL a un consumidor con nombre.
active = falseconbytes_retainedgrande indica un consumidor inactivo que llena el disco.pg_basebackup -C -Sempareja la clonación inicial con la creación de ranuras en un solo paso.
Análisis en profundidad
Tipos de ranuras
| Tipo | Creado por | Consumidor |
|---|---|---|
| Físico | pg_create_physical_replication_slot, pg_basebackup -C | Réplica en espera de streaming, pg_receivewal |
| Lógico | pg_create_logical_replication_slot | Suscriptor de replicación lógica, herramientas CDC |
Columnas clave del catálogo
| Columna | Significado |
|---|---|
restart_lsn | WAL más antiguo que aún necesita la ranura |
confirmed_flush_lsn | Posición confirmada por el suscriptor lógico |
active | Consumidor actualmente conectado |
wal_status | reserved, extended, unreserved, lost (PostgreSQL 18) |
Riesgo de disco
Las ranuras anulan wal_keep_size y pueden evitar el reciclaje de WAL. Combina:
- Alertas de monitorización por ranura
max_slot_wal_keep_sizecomo válvula de seguridad (PostgreSQL 13+)- Runbook para eliminar ranuras abandonadas después de los tickets de cambio
Trampas comunes
- Ranura inactiva después de la reconstrucción fallida de la réplica en espera - El disco principal se llena con WAL retenido. Solución: Elimina la ranura o reconecta el consumidor dentro del SLA.
- Ranura lógica sin suscriptor - Misma presión de disco que las huérfanas físicas. Solución: Rastrea las ranuras en la gestión de configuración; alerta sobre
active = false. - Sin
max_slot_wal_keep_size- Una ranura defectuosa puede agotar el disco. Solución: Establece una política de retención limitada y alerta sobrewal_status = 'lost'. - Nombres de ranura duplicados - La creación falla o se vincula al consumidor incorrecto. Solución: Nombra las ranuras con el nombre del host o el nombre del miembro de Patroni.
- Ranura de copia de seguridad + archivado agresivo - El archiver y la ranura retienen WAL; planifica la capacidad total del disco. Solución: Dimensiona el volumen de WAL para el peor retraso posible más fallos de archivo.
Alternativas
| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
Solo wal_keep_size | Réplicas en espera efímeras de prueba | Réplicas en espera de producción que pueden desconectarse |
| Archivo + restauración | DR sin streaming continuo | Necesitas conmutación por error en caliente |
| Ranura temporal durante la sincronización | Nueva siembra única | Retención a largo plazo sin monitorización |
Preguntas frecuentes
¿Una ranura por réplica en espera?
Sí, para réplicas en espera físicas de producción. Los suscriptores lógicos necesitan sus propias ranuras lógicas.
¿Pueden existir ranuras en las réplicas en espera?
Las réplicas en espera físicas no crean ranuras de envío; las ranuras residen en la instancia principal (o en el publicador lógico ascendente).
¿Qué es `wal_status = lost`?
La ranura requería WAL que ya se había eliminado. Recrea el consumidor a partir de una copia de seguridad base nueva.
¿Gestiona Patroni las ranuras?
Patroni 3.x puede crear y sincronizar ranuras de replicación permanentes en todo el clúster. Verifica la sección slots en el YAML de Patroni.
¿max_slot_wal_keep_size frente a la eliminación de ranuras?
max_slot_wal_keep_size limita la retención, pero puede invalidar a los consumidores retrasados. Prefiere las alertas y la higiene operativa de las ranuras.
Relacionado
- Conceptos básicos de replicación en streaming - configuración de réplica en espera
- Monitorización de replicación - alertas de retraso
- Conceptos básicos de replicación lógica - ranuras lógicas
- Modo de archivo y archive_command - envío de WAL
Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.