Saltar al contenido

Categoría: Bases de datos

PostgreSQL gestionado en vuestra cuenta: réplicas, copias y PITR probados

Vuestra base de datos con réplica, recuperación a un minuto concreto y actualizaciones mayores planificadas, en vuestros servidores o junto al servicio gestionado de vuestro proveedor.

Dónde se monta
En vuestra cuenta, a vuestro nombre
Copias
Con restauración probada
Actualizaciones
Planificadas y documentadas

En resumen

PostgreSQL es un sistema de base de datos relacional de código abierto. Gestionarlo es responder de que esté disponible, rápido y recuperable. Montamos réplicas con conmutación automática, copias con recuperación a un momento concreto (PITR) que restauramos en pruebas, agrupación de conexiones, métricas y actualizaciones mayores. Y os decimos cuándo os sale mejor la base de datos gestionada de vuestro proveedor.

¿Qué nos encargamos de mantener?

Una base de datos puede funcionar años sin que nadie la mire, hasta el día en que el disco se llena con WAL o la copia nocturna resulta estar vacía. Nuestro trabajo es que ese día no llegue y, si llega, que la recuperación sea un procedimiento ya ensayado.

  • Servidor principal

    Configuración de memoria, autovacuum, conexiones y registro de consultas lentas.

  • Réplicas

    Streaming replication con Patroni para conmutar solo si el principal cae.

  • Copias y WAL

    Copias base y archivado continuo para recuperar a un momento concreto.

  • PgBouncer

    Agrupación de conexiones entre las aplicaciones y la base de datos.

  • Métricas

    postgres_exporter en Prometheus: retraso de réplica, bloqueos, tamaño y transacciones.

  • Accesos

    Un usuario por aplicación, TLS y nada expuesto a internet.

¿Qué arquitectura recomendamos?

Para producción, un principal y al menos una réplica en otra máquina, con Patroni decidiendo quién es el principal a partir de un almacén de consenso como etcd. Las aplicaciones se conectan a través de PgBouncer o de una dirección que siempre apunta al principal, así que una conmutación no obliga a tocar su configuración.

Situación Lo que montamos Por qué
Base de datos pequeña, se tolera un rato de corte Un servidor y archivado de WAL fuera Recuperación probada sin la complejidad de un clúster
Producción que no puede parar Patroni con principal y réplica, más archivado de WAL Conmutación automática en segundos
Proveedor con base de datos gestionada RDS, Cloud SQL, Azure Database u otra Menos piezas; nosotros vigilamos, ajustamos y probamos restauraciones

Una réplica no es una copia: si alguien borra una tabla, el borrado llega a la réplica en milisegundos. Por eso el archivado de WAL va siempre, haya réplica o no.

¿Qué problemas encontramos más a menudo?

  • Copias con pg_dump que nadie restaura: tardan horas, solo recuperan al momento de la copia y a veces fallan sin avisar.
  • Disco lleno de WAL: un archivado roto o una ranura de replicación abandonada retiene WAL hasta llenar el disco.
  • Conexiones agotadas: cada proceso de la aplicación abre las suyas y el servidor rechaza las nuevas en hora punta.
  • Autovacuum desajustado: tablas hinchadas, consultas cada vez más lentas y riesgo de agotar los identificadores de transacción.
  • Versión fuera de soporte: varias versiones mayores por detrás, sin parches de seguridad.
  • Una sola cuenta para todo: todas las aplicaciones entran con el superusuario.

¿Cómo probamos que la copia funciona?

Con pgBackRest o WAL-G hacemos copias base periódicas y archivamos cada segmento de WAL en un almacenamiento de objetos de otra cuenta o de otro proveedor, cifrado. Una vez al mes, como mínimo, restauramos en un servidor de prueba a un momento concreto, comprobamos que la base de datos arranca y lanzamos unas consultas de control. El tiempo que tarda es vuestro tiempo real de recuperación, y lo apuntamos en el informe para que no sea una estimación.

¿Cómo hacemos una actualización mayor?

Hay dos caminos. Con pg_upgrade la actualización se hace en el mismo servidor y el corte es corto, sobre todo con enlaces de archivos. Con replicación lógica preparamos un servidor nuevo con la versión nueva, lo mantenemos sincronizado y cambiamos las aplicaciones cuando ya está probado; tarda más en prepararse pero el corte es mínimo, y es el mismo método que usamos para migrar de RDS o de Cloud SQL a otro sitio. En los dos casos ensayamos antes con una copia y revisamos las extensiones.

¿Es mejor RDS o Cloud SQL que un PostgreSQL propio?

Aspecto RDS, Cloud SQL o PostgreSQL gestionado de OVHcloud PostgreSQL propio administrado
Control y extensiones Solo las extensiones y parámetros que admite el proveedor, sin superusuario real ni acceso al sistema operativo Cualquier extensión y parámetro, con acceso completo al servidor
Versiones y actualizaciones Parches menores en la ventana de mantenimiento; el proveedor marca hasta cuándo da soporte a cada versión mayor Decidís cuándo; la actualización mayor la preparamos y la ensayamos con pg_upgrade o replicación lógica
Copias y recuperación a un momento concreto Copias automáticas y, según el proveedor, recuperación a un momento concreto, con una retención máxima y dentro de su cuenta pgBackRest o WAL-G, con la retención que pactemos y las copias en otra cuenta o en otro proveedor
Coste Más caro que una máquina equivalente, y sube con el tamaño, las réplicas y la alta disponibilidad Menos coste de infraestructura, pero hay que sumar las horas de administración
Dependencia del proveedor Mayor: salir exige una migración, por ejemplo con replicación lógica Menor: PostgreSQL estándar, que se lleva a otro proveedor con las mismas herramientas
Quién responde El proveedor, de la infraestructura del servicio según su acuerdo de nivel de servicio; la configuración, los datos y las consultas siguen siendo vuestros Nosotros, de la operación, las copias y la recuperación, según lo pactado; el proveedor, solo de la máquina

Muchas veces sí: cuando existe, la carga es normal y no necesitáis nada especial. RDS, Cloud SQL, Azure Database o las bases de datos gestionadas de DigitalOcean y OVHcloud hacen bien los parches, las réplicas y las copias de bajo nivel. Montamos un PostgreSQL propio cuando el proveedor no lo ofrece, como Hetzner, cuando necesitáis extensiones o parámetros que el servicio no permite, o cuando el coste del gestionado se dispara con el tamaño. Aun así hay trabajo: parámetros, índices, consultas lentas, alertas y pruebas de restauración. Si queréis que esa vigilancia sea continua, encaja en el SRE como servicio; y las métricas acaban en la monitorización con Grafana y Prometheus.

¿Y TimescaleDB?

TimescaleDB no es otra base de datos: es una extensión de PostgreSQL para series temporales, como lecturas de sensores, métricas o precios. Convierte las tablas grandes en hipertablas partidas por tiempo, comprime los datos antiguos y borra lo que caduca con políticas de retención. Lo que sabéis de PostgreSQL sigue valiendo, y lo gestionamos igual: réplica, copias con pgBackRest y restauración probada.

Hay dos detalles propios. La compresión, los agregados continuos y las políticas de retención van con la Timescale License, no con Apache 2.0: podéis usarlas en vuestra cuenta, pero muchas bases de datos gestionadas de los proveedores no ofrecen la extensión o solo traen la parte Apache, así que normalmente la montamos en un PostgreSQL propio. Y en cada actualización mayor comprobamos antes que la versión de la extensión es compatible con la versión de PostgreSQL de destino, y la actualizamos primero.

¿Dónde lo montamos?

En vuestra cuenta, en el proveedor que ya uséis o en el que mejor encaje. Si los datos tienen que quedarse en la UE, Hetzner y OVHcloud son las opciones europeas.

Proveedores en los que lo montamos

  • Hetzner
  • AWS
  • Google Cloud
  • Azure
  • DigitalOcean
  • OVH
  • Servidor propio
ProveedorCómo lo montamosA tener en cuenta
HetznerServidores cloud o dedicados con PostgreSQL, Patroni y pgBackRest montados por nosotros, en red privada. Archivado de WAL en Object Storage de Hetzner, compatible con S3.Hetzner no ofrece base de datos gestionada: la alta disponibilidad y las copias las ponemos nosotros.
AWSRDS for PostgreSQL o Aurora cuando encajan; si no, EC2 con Patroni y copias a S3.Con RDS revisamos parámetros, réplicas de lectura, ventanas de mantenimiento y que la restauración funciona.
Google CloudCloud SQL para PostgreSQL, o Compute Engine con Patroni y copias a Cloud Storage.Cloud SQL tiene recuperación a un momento concreto; la probamos igual.
AzureAzure Database for PostgreSQL (servidor flexible), o máquinas virtuales con Patroni.Elegimos la alta disponibilidad entre zonas cuando la carga lo justifica.
DigitalOceanPostgreSQL gestionado de DigitalOcean con nodos en espera, o Droplets con Patroni.
OVHBase de datos gestionada de OVHcloud para PostgreSQL, o instancias de Public Cloud con Patroni.
Servidor propioPostgreSQL con Patroni en vuestros servidores o máquinas virtuales, y archivado de WAL a un almacenamiento S3 externo.La réplica conviene en otra máquina física; si no, la alta disponibilidad es solo aparente.

Qué incluye

  • PostgreSQL con réplica en streaming y conmutación automática con Patroni, o el servicio gestionado de vuestro proveedor si encaja mejor.
  • Copias base y archivado continuo de WAL con pgBackRest o WAL-G, fuera del servidor y cifradas.
  • Restauración de prueba periódica a un momento concreto, con el tiempo que tarda apuntado en el informe.
  • PgBouncer para que las aplicaciones no agoten las conexiones.
  • Métricas con postgres_exporter y alertas de réplica retrasada, disco, bloqueos y consultas lentas.
  • Revisión de consultas lentas, índices y configuración de memoria con pg_stat_statements.
  • Actualizaciones mayores con pg_upgrade o replicación lógica, ensayadas antes con una copia.
  • Usuarios y permisos por aplicación, conexiones cifradas y acceso solo desde la red privada.

Preguntas frecuentes

¿Podemos migrar de RDS a otro proveedor sin parar la aplicación?

Casi sin parar. Con replicación lógica desde RDS a la base de datos nueva, los datos se mantienen sincronizados mientras probáis; el corte se reduce al momento de cambiar la cadena de conexión. Revisamos antes las extensiones y las secuencias, que no se replican solas.

¿A qué momento podemos recuperar la base de datos?

Con archivado continuo de WAL, a cualquier momento dentro del periodo de retención que pactemos, por ejemplo al minuto anterior a un borrado por error. El plazo de retención y el tiempo de restauración medido quedan escritos.

¿Gestionáis también MySQL o MariaDB?

Sí, con el mismo enfoque de réplica, copias probadas y actualizaciones planificadas, aunque con sus propias herramientas.

Contadnos vuestro caso

En una llamada gratuita de 20 minutos vemos dónde estáis y por dónde empezar. Sin compromiso.

Reservar llamada de 20 minutos

Documentación oficial consultada

Los datos técnicos de esta página se basan en:

Revisado el

WhatsApp