Actualiza MongoDB sin parada de servicio
¡Hola! Bienvenidos/as otro día más al blog de Aleson ITC, el mejor blog de Data del sector.
En el post de hoy, seguimos la tendencia de la semana anterior, las actualizaciones. Hoy, vamos a poner en práctica las actualizaciones con una demostración en un entorno de MongoDB.
En este artículo veremos como podemos conseguir una actualización sin parada del servicio gracias a la alta disponibilidad que ofrece MongoDB, los replicaSet.
Escenario de Actualización
Antes de empezar con la demostración, voy a exponer el escenario que he utilizado para llevar a cabo la actualización.
Actualización de un nodo secundario
Ahora nos conectaremos al primer nodo secundario. Y ejecutaremos el siguiente comando para APAGAR la instancia.
db.adminCommand({ shutdown : 1 })
Desde otro nodo, si ejecutamos el comando: rs.status()
veremos como el nodo que acabamos de apagar no tiene conexión con el replicaSet. Deberá de aparcer un mensaje con información al respecto.
Aún así, también podemos verificar que el nodo esté apagado revisando el estado del servicio en nuestro sistema operativo.
Después de verificar que hemos apagado correctamente la instancia, procederemos a ejecutar el paquete de instalación de la versión 6.0.5, que actualmente es la última versión reciente.
Seguidamente, elegiremos la opción custom para aplicar la instalación en la ruta que tengamos el archivo de log y los archivos de las bases de datos.
En la imagen adjunta nos ofrece una ruta predeterminada para hacer la actualización, pero más adelante (imagen de abajo) podemos indicarle dónde queremos que se actualice. Es decir, si tenemos el archivo .log en L:\ elegiremos esa ruta para el Log Directory.
Nos saltará una ventana dónde podremos ver el progreso de la actualización.
Verificamos actuaización
A continuación, ejecutaremos rs.status()
para ver el estado del nodo actualizado en el replicaSet.
En el caso que esté en un estado de RECOVERY, esperaremos hasta que finalice y observemos que está como SECONDARY.
Verificamos que se ha instalado la versión correspondiente en el nodo.
Actuaremos igual en todos los nodos secundarios que tengamos en el replicaSet.
Actualizar el nodo primario
El procedimiento con el nodo Primario comparte similitud con el visto anteriormente, salvo el primer paso.
Antes que apagar el primario, deberemos hacer un failover, es decir, nos convertiremos en un secundario y un secundario pasará a ser el primario.
Ejecutando el comando rs.stepDown()
desde el nodo primario se realizará el failover.
Ahora los roles habrán cambiado como exponen las siguientes imagenes:
Como vemos, el nodo con IP 10.0.0.5 es el secundario y el nodo con IP 10.0.0.4 no está disponible debido a que seguidamente después de hacer el failover lo habremos apagado como lo hemos hecho anteriormente.
Ya actualizado el nodo, hacemos otro failover desde el nodo primario para volver a la configuración inicial, es decir para que cada nodo tenga su rol que le corresponde.
Actualizar la compatibilidad del ReplicaSet
Por último actualizaremos la versión de compatibilidad del ReplicaSet desde el nodo primario con el comando siguiente:
db.adminCommand( { setFeatureCompatibilityVersion :
"6.0" } )
A continuación, para verificar que se ha actualizado ejecutaremos:
db
.adminCommand( { getParameter : 1, featureCompatibilityVersion : 1 } )
Y ya habríamos acabado la actualización de nuestro entorno MongoDB sin parada del servicio.
Para actualizar una versión más antigua en un entorno de MongoDB que una 5.0 deberemos ir paso a paso, es decir, supongamos que tenemos una versión 4.0, pues antes actualizaremos a la 5.0 y luego pasaremos a la 6.0.
Espero que os haya sido de ayuda a la hora de actualizar y mejorar vuestra BBDD MongoDB.
Puede que te interesen nuestros últimos posts:
Cómo crear Alertas de Coste en una Suscripción de Azure
La importancia de los Updates para SQL Server
Descubre SQL Server 2022 Query Store Hints
Si tienes problemas de rendimiento y necesitas optimizar tu BBDD MongoDB o SQL Server, en Aleson ITC podemos ayudarte.
Data engineer with experience in SQL Server and MongoDB. Certified as a database administrator and data modeler in MongoDB, I specialize in designing and managing efficient and secure environments for database applications.