Preparación para la actualización de Postgres
- Evaluación de riesgos: elaborar una lista de los riesgos que pueden surgir durante el proceso de actualización y ordenarlos según su importancia.
- Búsqueda de soluciones para los riesgos: considerar soluciones que eliminen por completo los riesgos o que permitan distribuirlos a lo largo del tiempo.
- Actualización de la lista de riesgos: actualizar la lista cuando se descubran nuevos riesgos durante el avance del proyecto.
Sobre monitoreo y métricas
- Monitoreo del sistema: usar herramientas exhaustivas para monitorear la salud de la base de datos y del sistema.
- Observación de métricas clave: monitorear métricas principales como ID de transacción, uso de CPU, sesiones en espera, latencia de consultas y latencia de respuesta de la API.
Opciones de actualización de Postgres
Actualización in-place (no adecuada para una actualización con cero downtime)
- Limitaciones de la actualización in-place: al ejecutarse en AWS RDS se requiere reiniciar la base de datos, y el tiempo necesario depende de la cantidad de datos.
Actualización basada en replicación
- Elección de la actualización basada en replicación: permite una migración gradual, probar la nueva base de datos con carga de trabajo y datos reales, y obtener mayor control sobre la actualización.
- Configuración de la base de datos de origen y destino: configurar el slot de replicación y establecer
wal_level en logical.
Elección del método de replicación de tablas
Replicación de tablas "pequeñas"
- Replicación de tablas pequeñas: se pueden replicar con una adición simple y una actualización de la suscripción.
Tablas grandes de solo anexado
- Replicación de tablas de solo anexado: establecer la opción
copy_data en false para replicar solo los cambios futuros y luego rellenar los datos anteriores desde un respaldo.
Tablas grandes con muchas actualizaciones
- Replicación de tablas grandes con muchas actualizaciones: reducir el tamaño de la tabla, ejecutar
VACUUM y considerar la partición de tablas.
Verificación del estado de replicación de tablas
- Monitoreo del estado de replicación: verificar el estado de replicación mediante la tabla del sistema
pg_subscription_rel; se recomienda replicar una tabla a la vez.
Interrupción de la replicación
- Cómo detener la replicación: si es necesario, se puede detener la replicación de tablas y hacer rollback actualizando la suscripción.
Precaución sobre la migración de slots de replicación
- Problema al migrar slots de replicación: el LSN de un slot de replicación es único de la base de datos principal, por lo que no se puede copiar directamente a una base de datos nueva.
Cierre de la migración
- Verificación de consistencia de tablas: confirmar que el número de filas de las tablas coincida entre ambas bases de datos y, si hace falta, validar la consistencia de los datos con muestreo aleatorio.
Cambios a nivel de aplicación
- Cambio de conexión de base de datos: modificar la aplicación para que se conecte a la nueva base de datos y definir una estrategia de cambio de tráfico.
Consideraciones adicionales sobre secuencias
- Sincronización de secuencias: como los valores de las secuencias no se sincronizan durante la replicación, deben establecerse manualmente.
Checklist de revisión final
- Revisión final: consistencia de tablas, estado de la suscripción, coincidencia del esquema, tamaño de la base de datos, adición de réplicas, reconstrucción de índices, pruebas de rendimiento, evaluación de riesgos y práctica en un entorno de staging.
Cambio final
- Ejecución del cambio final: replicar tablas en horario nocturno, practicar varias veces en el entorno de staging y luego realizar la revisión final y el cambio de flags.
Opinión de GN⁺
- Importancia: Knock completó con éxito el complejo proceso de actualizar Postgres de la versión 11.9 a la 15.3 con cero downtime. Esto marca un hito importante en la administración de bases de datos y la disponibilidad del servicio.
- Interés: el enfoque de actualización basado en replicación permite a los administradores de bases de datos hacer una transición fluida hacia una nueva base de datos, algo que puede generar gran interés en la comunidad técnica.
- Lo destacable: el proceso de actualización de Knock muestra un caso ejemplar de cómo superar desafíos técnicos complejos mediante una gestión sistemática de riesgos y resolución de problemas.
1 comentarios
Opiniones en Hacker News
Existe una mejor forma que copiar tablas de gran tamaño.
El enfoque presentado aquí es interesante y está bien documentado, pero no están de acuerdo con la frase "los clientes modernos esperan 100% de disponibilidad".
AWS ahora ya soporta despliegues blue-green.
Escribieron una herramienta que automatiza la mayoría de los problemas.
En hava.io están migrando de AWS RDS PostgreSQL 11.13 a 15.5.
Expresan dudas sobre la afirmación de que cualquier downtime sería inaceptable para el servicio Knock.
Les sorprende que no se pueda inicializar la replicación desde un backup.
Preguntan si hay interés en una herramienta todo en uno que permita actualizar Postgres con cero downtime solo ingresando las credenciales de la base de datos.
Les parece interesante el tema del uso de secuencias.
Bromean con que los problemas que surgen en sistemas distribuidos se pueden resolver con un adecuado
sleep(1000).