Actualizar MongoDB 1.8 a 2.0

11 octubre 2011 at 21:36 by Adrián Pérez

MongoDBEsta semana hemos realizado una actualización de nuestro clúster MongoDB de la versión 1.8 a la 2.0.

En nuestro caso, tenemos varias máquinas que forman parte del clúster, donde cada máquina contiene un seguido de mongods corriendo, cada uno de ellos correspondiente a un shard, que a su vez contiene un nodo de un determinado replica-set. Un poco complicado de entender, si no se ha tocado mucho MongoDB. En cualquier caso, con este escenario hemos relizado la actualización.

La idea ha sido aprovechar la funcionalidad de clúster, para poder actualizar las máquinas secundarias mientras las primarias continuaban dando servicio, con tal de minimizar el downtime que requiere un proceso de estas características.

Se ha empezado por entrar en una de las máquinas a actualizar, y repasar todos los procesos mongod en busca de replicas primarias. En caso de contar con alguna réplica primaria, ha sido suficiente con ejecutar "rs.stepDown()" para cambiarle el rol a secundaria (pasándole el rol de primaria a otra máquina de la réplica-set).

replica1:PRIMARY> rs.stepDown()

Una vez la máquina ha contado con todas sus réplicas funcionando como secundarias, se ha pasado a actualizar.

yum update mongo-10gen-server.x86_64 mongo-10gen.x86_64

Tras la actualización, se han parado los mongod con "kill -9" y se han vuelto a inciar, pudiendo así, conectar para ver la nueva versión funcionando:

[root@server mongo]# mongo 127.0.0.1:27017
MongoDB shell version: 2.0.0

En nuestro caso, ha sido necesario esperar unos minutos tras el inicio de la nueva versión en el servidor, para permitir que se ponga al día respecto al resto de servidores mongo (la versión 1.8 y la 2.0 se hablan perfectamente, y por tanto, pueden trabajar juntas).

Pasados unos minutos, se deberá repetir el proceso con el resto de máquinas del clúster, pasándo sus réplicas a secundarias antes de poder hacer el upgrade. Finalmente, se deberá realizar el upgrade (yum update) en los árbitros, para posteriormente reiniciarlos (kill -9 seguido de una inicialización del mongod), y lo mismo con mongos y los servidores de configuración.

PROCESO DE ACTUALIZACIÓN
Paso a describir el orden seguido para actualizar cada uno de los componentes de mongo.

  • mongod secundarios, actualizar y reiniciar
  • cambio de secundarios a primarios (para poder actualizar los otros mongod sin interrumpir el servicio)
  • mongod secundarios (recién cambiado el rol en el punto anterior), actualizar y reiniciar
  • [pocional] cambio de (algunos) secundarios a primarios, para volver a la situación inicial

Una vez todos los mongod actualizados...

  • parar mongos y configserver
  • iniciar configserver
  • iniciar mongos
  • reiniciar árbitros