Zabbix como sistema WAN – FAILOVER

Durante este año estuve trabajando en un proyecto de HA que debía correr a nivel WAN, luego de varios escenarios planteados logre dar con un prototipo exitoso.

La cosa va así, un servicio tiene que estar disponible y replicado en dos nodos separados geográficamente, cuando el nodo primario se caiga el secundario debe levantar el servicio en otra parte del mundo.

Para esto se usa un arreglo de software con los siguientes componentes:

  • crm
  • pacemaker
  • coach
  • corosync
  • drbd
  • servicio

Dependiendo de lo que quieras hacer el numero de servidores puede aumentar o disminuir.  Lo que ocurre aquí es que ninguno de estos software se lleva bien con latencia, conexiones WAN ruidosas, en resumen si no vas a poner fibra óptica entre los servidores no te molestes, no va funcionar a menos que uses el software coach y te rompas el cerebro entendiendo ticketing interno entre los anillos 3 y 4 servidores para replicar un solo servicio cosas así. Suena complicado y lo es.

Pero si le damos la vuelta es mas fácil, utilizando Zabbix como sistema monitor/gestor del servicio y el cluster, podemos superar varias barreras. Bueno vamos a las teclas:

server:~ # cat /etc/drbd.conf
     resource r0 {
        protocol A;
       disk { on-io-error detach; }
      device /dev/drbd0 minor 0;
      disk /dev/VolGroup02/LogVol00;
      meta-disk internal;
       proxy {
      memlimit 1G;
      plugin {
      zlib level 9;
           }
}

      net {
      ko-count 50;
      timeout 60;
      on-congestion pull-ahead;
      congestion-fill 200M;
      congestion-extents 1113;
      ping-timeout 50;
       connect-int 5;
}

        on drbd.asshai {
        address 127.0.0.1:7789;
        proxy on drbd.asshai {
        inside 127.0.0.1:7788;
        outside 172.17.18.203:7790;
              }
}

       on moria {
       address 127.0.0.1:7789;
       proxy on moria {
       inside 127.0.0.1:7788;
       outside 172.17.17.204:7790;
                        }
             }
}

La configuración de drbd es igual a la de drbd-proxy, luego:

ls -all /etc/drbd-proxy.license
-rw-r–r– 1 drbdpxy users 433 Nov 19 10:04 /etc/drbd-proxy.license

Se crea el recurso r0:
# drbdadm create-md r0
Se inicializa el proxy:
# /etc/init.d/drbdproxy start
Se inicializa el servicio de drbd:
# /etc/init.d/drbd start
Se realiza revisión de conexión :
# cat /proc/drbd
# watch -n1 “drbd-proxy-ctl -c ‘show connection'”
Se realiza la sincronización inicial, una vez se concluye la misma se procede a levantar el nodo primario:
# drbdadm primary –force r0
Se formatea la unidad del superbloque con el sistema de ficheros seleccionado:
# mkfs.ext3 /dev/drbd0
Se monta la unidad y se copian los archivos:
mount /dev/drbd0 /opt
cp -r archivos /opt
Se realiza la segunda sincronización (la mas larga). Al finalizar ajustamos los permisos y levantamos servicios:
# /opt/zimbra/libexec/zmfixperms -e -v
zimbra$  zmcontrol start
Se valida el enlace:
# cat /proc/drbd
# watch -n1 “drbd-proxy-ctl -c ‘show connection'”

Gatillo en zabbix
En el nodo secundario se levanta agente Zabbix y en el archivo de configuración se ajusta el siguiente paramento:
cat zabbix_agentd.conf | grep Remote
### Option: EnableRemoteCommands
EnableRemoteCommands=1
### Option: LogRemoteCommands
LogRemoteCommands=1
moria:/opt/binario/etc #

Se ajustan las reglas sudo:
Cmnd_Alias
CMDS = /etc/init.d/zimbra
zabbix ALL=NOPASSWD: CMDS
zabbix ALL=(ALL) NOPASSWD:/bin/mount
zabbix ALL=(ALL) NOPASSWD:/sbin/drbdadm
zabbix ALL=(ALL) NOPASSWD:/opt/zimbra/bin/zmcontrol

Luego como user zabbix:
zabbix@moria:/root> cd /opt/binario/sbin/
zabbix@moria:/opt/binario/sbin> ls
zabbix_agent zabbix_agentd
zabbix@moria:/opt/binario/sbin> ./zabbix_agentd

Se se realiza la configuración en la interfaz Web de Zabbix, ejemplo:

2014-12-03-113144_323x80_scrot

2014-12-03-113206_615x233_scrotSe guardan los cambios y se deja activado el gatillo. De forma tal que el conjunto queda listo y operativo. Se valida la rutina de ejecución del gatillo en el nodo secundario en la ruta:

 # tail /tmp/zabbix_agentd.log
20352:20141126:082223.429 Executing command ‘sudo /sbin/drbdadm primary r0
sudo /bin/mount /dev/drbd0 /opt/
sudo /etc/init.d/zimbra restart’

Leave a Comment