Archivo por meses: agosto 2013

Cuando las cosas van mal

El pasado miércoles programamos una parada de mantenimiento y como dice el título, las cosas fueron mal hasta el punto en que todavía estamos recuperándonos de un pequeño desastre.

Habíamos planeado dos cambios. El primero, migrar un único disco bastante crítico a un RAID-1. Aunque el proceso fue algo más lento de lo esperado, pudimos completarlo sin complicaciones demasiado serias. Tuvimos que hacer cosas que no estaban planeadas, pero supimos resolver los problemas bastante bien.

El segundo cambio consistía en actualizar CloudStack 2.2.13 a 2.2.14, que precisamente tenía máquinas virtuales funcionando en ese disco que migramos, por lo que ya empezamos con algo de retraso.

La actualización no era un capricho (estaríamos migrando ya a CloudStack 4.1 gustosamente), sino que era necesaria para poder realizar copias de seguridad de las máquinas virtuales sin necesidad de detenerlas. Este cloud aloja máquinas virtuales con servicios que ofrecemos en el centro, como la página web o la mensajería, y aunque se realizan copias de seguridad de los datos, que se pudiesen realizar también copias de seguridad de las máquinas virtuales sin necesidad de detenerlas sería un puntazo.

El desastre

Salió mal. Y cuando algo sale mal, seguimos la siguiente línea lógica de acciones:

  • Intentar identificar rápidamente el problema para intentar solucionarlo, repasando todo el proceso concienzudamente.
  • Si se ha seguido el proceso concienzudamente y no se puede identificar el problema, volver atrás.

Tuvimos que volver atrás, pero nos topamos con que el problema persistía. Todo apuntaba a que no habíamos planificado bien la vuelta atrás, que se nos escapaba algo. Es algo sobre lo que todavía tendremos que reflexionar, pero mientras tanto seguimos el siguiente paso:

  • Dedicar más tiempo a intentar identificar y comprender el problema, para poder evitarlo si es posible y documentarlo adecuadamente para que no moleste en el futuro.

Ese proceso duró casi tres días, hasta el punto en que ahora ya hemos verificado que, efectivamente, somos capaces de reproducir el problema. Lo estamos documentando y por suerte podremos convivir con él.

El mayor desafío ha sido tener que experimentar con esta infraestructura en producción, pensando en todo momento en mantenerla funcionando. Cuando todos los servicios dependen de ella, tienes que andar con pies de plomo. Hubo varias pequeñas caídas el viernes por la mañana por culpa de pequeños fallos haciendo estas pruebas, debido al cansancio acumulado.

El problema en detalle

CloudStack se actualizó aparentemente sin mayor problema, pero después de un rato nos dimos cuenta de que algunas máquinas virtuales no funcionaban, entre ellas la del servidor web principal.

Identificamos las máquinas e intentamos buscar puntos en común. El más evidente, todas las máquinas afectadas utilizaban más de dos discos duros.

Comenzamos a realizar pruebas con ello en mente y sacamos conclusiones precipitadas. Durante el día de ayer pensábamos que el problema era otro y menuda sorpresa que nos llevamos esta mañana cuando nos dimos cuenta de que no era así. Hoy por fin hemos sido capaces de reproducir el problema de forma controlada y podemos decir con toda certeza que lo hemos identificado.

El problema surge cuando una máquina virtual tiene dos o más discos duros. Si los discos no se insertan en esa máquina en el mismo orden en el que se crearon, se produce el problema. Es decir, si tenemos discos con identificadores 11, 14, 18, deben introducirse siempre por ese orden.

El agente de CloudStack suelta un NullPointerException y no da mayor información en caso de error, la máquina no llega a arrancar. El por qué se disparó este problema con la actualización sigue siendo un misterio. No hemos seguido investigando el motivo por ahora.

Dado que CloudStack 2.2 ya no se mantiene (por a la migración a Apache), intentaremos reproducir el problema también en CloudStack 4.1 para reportar el problema debidamente, si fuera necesario.

Ahora mismo el cloud está vivo, funciona y se comporta bien. El único problema es que en el proceso nos hemos quedado con un único host donde poder ejecutar las máquinas virtuales, por lo que todavía estaremos unos días con algunos servicios menores caídos mientras reinstalamos el resto. Todos los servicios de uso común funcionan, al menos.

Nota: Nos tomaremos un descanso del blog durante el mes de agosto y volveremos en septiembre. ¡Felices vacaciones, el que las tenga!