Monitorizar cambios en Galera Cluster

Para chequear el estado de un cluster Galera se puede inspeccionar cada uno de los nodos que lo componen y comprobar que se hayan en funcionamiento y sincronizados. Pero hay una alternativa que el propio Galera implementa. Está muy bien documentado en los siguientes enlaces:

  • http://galeracluster.com/documentation-webpages/monitoringthecluster.html
  • http://galeracluster.com/documentation-webpages/notificationcmd.html

Como se explica ahí, Galera permite enviar notificaciones cuando detecta algún cambio en el estado del cluster, a través de la llamada a un script o programa con los argumentos que ahí se comentan (--status, --uuid, --members, --index). El script que viene como ejemplo puede ser suficiente para la mayoría de los casos. Cada vez que Galera detecta un cambio, invoca al script pasándole los respectivos argumentos. Éste crea un schema dentro de la propia base de datos, desactivando para ello la replicación en esta sesión, de modo que cada uno de los nodos tienen información propia en los registros que crean. Al script por defecto yo simplemente he añadido una línea para que, además de actualizar las tablas con los cambios, envíe un mail al administrador para que pueda actuar si es necesario.

NFS en alta redundancia

Queremos compartir un punto de montaje NFS con alta disponibilidad para evitar que la caída del server provoque que el servicio se detenga. Para evitar cualquier punto de fallo, para almacenar los datos se va a utilizar ceph. El sistema de replicación que hace ceph permite que se puedan seguir accediendo a los datos a pesar de sufrir la caída de parte de los servidores que conforman el cluster. Con la alta disponibilidad, conseguimos que si cae el servidor NFS, otro nodo del cluster asuma ese rol.

Partimos de un escenario en el que tenemos un cluster ceph funcionando y un cluster de alta disponibilidad con corosync, pacemaker y pcs.

En resumen, haremos lo siguiente: usaremos una imagen rbd de ceph para albergar los archivos que queremos compartir por NFS. Usando el cluster de alta disponibilidad, montaremos ese dispositivo de bloques e iniciaremos el servidor NFS que usará una IP virtual.

Pasemos a detallar paso a paso ese proceso:

  1. Creamos una imagen en ceph

    [bash] rbd create –size 100000 pool/nombreimagen # el tamaño se expresa en megabytes, así pues, crearíamos un disposivito de 100GB [/bash]

  2. Mapear la imagen a dispositivo de bloques. Con esto, la imagen se puede utilizar como cualquier otro dispositivo de bloques, como un disco duro.

    [bash] rbd map pool/nombreimagen [/bash]

    Se crea un dispositivo /dev/rbdX y un enlace simbólico en /dev/rbd/pool/nombreimagen a ese dispositivo. Este proceso se puede automatizar añadiendo al fichero /etc/ceph/rbdmap la imagen que queramos mapear y el usuario a usar:

    [bash] poolname/imagename     id=client,keyring=/etc/ceph/ceph.client.keyring [/bash]

    y llamar directamente al script

    [bash] rbdmap map [/bash]

    ó

    [bash] systemctl start rbdmap [/bash]

  3. Le damos formato a la imagen
    [bash] mkfs.ext4 /dev/rbd0 [/bash]
    y la montamos
    [bash] mount /dev/rbd0 /mountpoint [/bash]
    . Ahora ya podemos copiar o sincronizar los datos que queremos compartir