Artículo
· 22 mayo, 2023 Lectura de 6 min

Recuperando un Mirror tras un fallo

¡Aquí estamos nuevamente con un artículo relacionado con el Mirror!

En el artículo anterior vimos como podíamos configurar un Mirror entre dos instancias de IRIS, actuando una como nodo activo y otra como pasivo. Este sistema de mirroring funciona sobre la transferencia de un archivo de journals que mantiene contínuamente actualizada la instancia que funciona como nodo pasivo, pero ¿qué ocurre si por algún fallo de comunicación o permisos del archivo de journal este no se transifere correctamente? 

Lo más común es que ante esta situación nuestro Mirror quede desconfigurado, de tal forma que el nodo pasivo no reciba los cambios realizados sobre el nodo activo:

En la imagen anterior vemos un Mirror configurado con dos nodos en modo Failover (mirrorA como nodo activo y mirrorB como nodo pasivo), pero en este caso el definido como nodo pasivo (MIRRORB) ha perdido la conexión con el nodo activo o primario y por lo tanto, ha dejado de recibir los datos desde él de las bases de datos incluidas en el Mirror (COMPANY, CUSTOMER y PERSONAL). Ante esta situación lo más recomendable es descartar los datos que tengamos en nuestro nodo pasivo y restaurar las bases de datos del nodo activo al pasivo nuevamente, en esta URL podréis encontrar la documentación relativa a la restauración.  Para este ejemplo vamos a optar por la opción definida en la documentación como Online Backup la cual hará uso de las funcionalidades de backup y restauración incluidas en IRIS.

Muy bien, comencemos entonces:

Configurando el nodo pasivo

Como primer paso deberemos dejar nuevamente el nodo pasivo que se ha desconfigurado en un estado que permita la restauración del backup sobre las bases de datos del mirror.

Desmontando las bases de datos del Mirror

Para poder operar correctamente con las bases de datos afectadas deberemos desmontarlas previamente y para ello accederemos directamente desde el portal de gestión a la opción: System Operation --> Databases

Procedamos a desmontar las bases de datos afectadas COMPANY, CUSTOMER y PERSONAL  haciendo click sobre el nombre de cada una de ellas y pulsando el botón Dismount que aparece en la nueva ventana:

Una vez desmontadas las 3 bases de datos afectadas ya podremos operar sobre ellas y restaurar las base de datos desde el nodo activo.

Configurando el nodo activo o primario

Como hemos indicado anteriormente hemos optado por el Online backup como la mejor opción para la recuperación y para ello deberemos realizar un backup de las bases de datos configuradas en en el Mirror. Como paso previo a la generación de nuestro backup vamos a definir la lista de base de datos sobre la que queremos trabajar.

Definiendo la lista de base de datos

Nuestra idea es la de realizar un Full Backup de las bases de datos configuradas en el Mirror y para ello vamos a crear la lista de base de datos a grabar en nuestro archivo de backup y lo vamos a hacer desde la opción del portal de gestión System Administration --> Configuration --> Database Backup --> Database Backup List

Desde esta opción de menú podremos definir nuestra lista:

Una vez seleccionadas las bases de datos que tenemos configuradas en nuestro Mirror podemos proceder a realizar el backup de las mismas.

Realizando el Full Backup

Accederemos desde el portal de gestión a la opción System Operation --> Backup --> Full Backup List y definiremos la ruta de nuestro servidor (mirrorA)  donde queremos almacenar el archivo de backup, en este caso, como hemos definido una carpeta accesible desde nuestro Visual Studio Code (/shared) usaremos esa misma para almacenar el backup y poder copiarlo facilmente al  otro nodo:

Como véis al seleccionar la opción de Full Backup List tenemos automáticamente cargada la lista de bases de datos previamente seleccionada. Pues bien, sólo necesitaríamos pulsar Ok para que se inicie la generación del archivo de backup completo. Dependiendo del tamaño de las bases de datos podrá tardar más o menos, pero podremos comprobar el estado del backup en todo momento desde la pantalla de Backup Status:

Veamos brevemente el log que ha generado:

Como véis nos indica las bases de datos sobre las que se va a realizar el backup y un detalle importante, el archivo de journal ha cambiado. ¿Qué significa eso? Significa que en el momento en el que restauremos el backup sobre nuestro nodo pasivo (mirrorB) al sincronizarse el journal activo tendremos totalmente disponible todos los cambios realizados desde la creación de los backups y, por lo tanto, no necesitaremos copiar el archivo de journal sobre nuestro nodo pasivo.

Para los que os preguntéis que es el journal exactamente, no es más que un archivo donde estamos registrando las operaciones de escritura (actualización o eliminación de registros) de nuestra base de datos.

Muy bien, nuestro backup ha concluido, comprobemos en nuestro nodo activo (mirrorA) nuestra ruta /shared/Backup:

Ahí está nuestro fichero FullDBList_20230522_003.cbk con el full backup de nuestra base de datos en nuestro nodo activo (mirrorA). Copiémoslo al servidor de nuestro nodo pasivo (mirrorB), recordad que estamos usando instancias en Docker para este ejemplo, por lo que usaremos directamente la ruta accesible desde nuestro proyecto de Visual Studio Code, en caso de tener las instancias de IRIS funcionando sobre servidores normales podréis mover los archivos como lo hagáis habitualmente.

Una vez copiado comprobemos que se encuentra correctamente ubicado en el servidor de nuestro nodo pasivo (mirrorB):

¡Perfecto! Ahí está esperándo a nuestra restauración del nodo pasivo (mirrorB), pues bien, no le hagamos esperar.

Restaurando el nodo pasivo (mirrorB)

Tenemos ya nuestro backup en nuestro nodo pasivo (mirrorB), abramos entonces un terminal en el mismo:

iris terminal IRIS

Sigamos ahora los pasos indicados por la documentación

Veamos cada paso en detalle:

  1. zn "%SYS": Cambiamos al namespace %SYS
  2. do ^DBREST: lanzamos el comando para iniciar la restauración
  3. Restore: 2. Selected and/or renamed directories: seleccionamos esta opción simplemente para mostrar todos los directorios/base de datos que vamos a restaurar.
  4. Device: /shared/Backup/FullDBList_20230522_003.cbk:  introducimos el nombre del archivo de backup que hemos copiado a nuestro nodo pasivo (mirrorB).

Confirmamos que es el fichero que queremos restaurar:

Una vez confirmado se nos informará de lo siguiente:

Se ha detectado que la exportación se ha realizado en el otro miembro del mirror y nos pregunta si sólo queremos restaurar las bases que estaban configuradas en mirror. Ya que en nuestra exportación sólo hemos incluido dichas bases de datos da igual lo que contestemos, cogerá las mismas. Pongamos YES.

Para cada base de datos del backup podremos modificar el directorio de destino, cosa que no nos interesa, por lo que pulsaremos el intro sin más.

Finalmente nos pedirá confirmación de si queremos modificar la lista de directorios previamente seleccionada y finalmente deberemos escribir YES para confirmar la restauración.

Como véis se realizará la restauración de las bases de datos y finalmente nos mostrará la posibilidad de continuar con más archivos de restauración, como no tenemos ninguno más podríamos escribir directamente STOP, si pulsamos el intro nos preguntará si tenemos más backups para restaurar, en este caso contestaremos que No.

Como véis, al finalizar la restauración las bases de datos son montadas automáticamente.

Comprobación del Mirror tras la restauración

Si accedemos nuevamente al monitor del mirror podremos ver en que estado se encuentra tras la restauración:

Como vemos, el nodo pasivo (mirrorB) se ha recuperado del estado de fallo en el que se encontraba con la restauración y ha comenzado a recibir el archivo de journal desde el nodo activo (mirrorA) y que se creó tras realizar el backup.

¡Pues listo, ya tenemos nuevamente nuestro Mirror plenamente operativo!

Comentarios (0)1
Inicie sesión o regístrese para continuar