Si hay algo a lo que le temo más que a una película de terror, es a una migración de Base de Datos y la razón es porque muchas cosas pueden salir mal durante este tipo de eventos. Bien sea porque hay que hacer upgrade de la versión, porque hay un cambio de esquema o porque hay que escalar. La base de datos es el corazón de una aplicación y seguramente el de una organización completa.
Si estas usando RDS, un servicio PaaS que nos permite crear y administrar bases de datos con distintos motores como: MySQL, Aurora, PostgreSQL, Oracle y muchos más hay una forma para hacer de estos eventos de migración se hagan de forma más segura, automatizada mientras reducimos drásticamente el riesgo de que salga algo mal. Se llama RDS Blue/Green Deployments.
En el mundo de aplicaciones tenemos los despliegues Blue/Green en donde se hay dos entornos, Blue con la versión actual y Green con una versión actualizada. Una vez que hemos comprobado que todo va bien podemos hacer el cambio y dirigir todo el trafico a nuestro entorno Green. Esto mismo es RDS Blue/Green Deployment pero en base de datos. A continuación, te muestro como utilizarlo.
El escenario es el siguiente, tenemos una Base de datos MySQL versión 5.7 y nos piden hacer un major upgrade a MySQL 8.0. Si estamos hablando de una base de datos de producción es probable que tengamos habilitado MultiAZ sino es así muy mal porque esto puede cubrirte de un incidente a nivel de AZ, podemos hacer el upgrade simplemente modificando el la DB en la pesteña de “Modify”. Sin embargo, no sabemos como puede afectar la migración con datos reales de clientes.
Seleccionamos la base de datos y en la pestaña de “Actions” y le decimos crear Blue/Green Deployment. Esto nos desplegara un menú donde podemos colocar un identificar al deployment e indicar la nueva versión a la que queremos llegar. Una vez llenado los campos hacemos click en Create Blue/Green Deployment.
Colocaremos un identificador a nuestro deployment y si es una migración de version le colocamos la versión a la cual queremos hacer upgrade; en este caso a MySQL 8.0.35
Nos vamos hasta lo último de la página y le decimos crear deployment y listo! Es cuestion de esperar. Lo que sucederá es que RDS creará una replica de la base de datos (Green) que se sincronizará con la base de datos original (Blue), una vez creada automáticamente hará el upgrade de la versión. Durante el proceso mi base de datos (Blue) seguirá trabajando perfectamente y además si tengo replicas de lecturas estas también estarán incluidas dentro del proceso por tanto no solo estoy haciendo el upgrade a mi base de datos principal sino a todas las replicas que tenga.
Una vez que complete el proceso de creación de la base de datos Green y termine el upgrade. Las bases de datos se pondrán en estado disponible al igual que el propio deployment; es momento de hacer el cambio o Switch Over. En este momento podemos hacer pruebas para asegurarnos que nuestra nueva DB funciona perfectamente, Blue/Green deploy no solo sirve para actualizaciones del motor, también podemos usarla si queremos hacer cambios de esquemas, modificaciones en la data entre otros.
Si las pruebas realizadas salen bien entonces seleccionamos el Blue/Green deployment y en el botón de acción seleccionamos "Switch Over" este desplegará una ventana con el estado actual de nuestra DB (Blue) y la nueva DB (Green).
¡Recuerda!
este tipo de eventos criticos deben ser planificados, es recomendable ejecutarlos en horarios donde los usuarios tendrán el menor impacto posible y siempre con un plan B.
Hacemos click en "Switch Over" y durante este tiempo RDS bloquará nuevas conexiones y escrituras a la DB (Blue) y hará el cambio por la DB (Green), podrás observar que la actual db le cambio el identificador y se le agrega "old" al final para mostrar que ahora es la DB vieja mientras que la DB (Green) pasa a tener el mismo nombre y endpoint que tenia la versión Blue; esto también sucederá con todas las read replicas que tengas.
Si quieres ver este mismo tutorial en formato de video, te invito a mi canal
Top comments (0)