ago 01

Después del último post IDS: Replicación de datos con alta disponibilidad me quedé con muy buen sabor de boca ya que después de varios años trabajando con Oracle veo que Informix tiene muchas posibilidades integradas en el propio motor, como p.e. una muy importante es la de failover.

El problema de la solución de failover integrada en Informix es que tu aplicación debe soportar “grouping”, es decir, representar un servicio con un nombre lógico pero que en realidad por debajo dicho servicio lógico está formado por varias instancias físicas, con HDR u otras técnicas de replicación.

Por este motivo decidí que estaría bien poder integrar el servicio de base de datos con sistemas de failover ya existentes en el mundo Linux, Heartbeat. Esto que os presentaré aquí tan solo es una prueba de concepto, para nada esta todo super optimizado y super bien configurado…mostraremos el camino y luego cada uno que le saque el jugo que pueda!!! :)

¿Cuál es la idea?
Como se dice siempre, mejor una imagen que 1000 palabras….

IDS heartbeat schema

IDS heartbeat schema

Para configurar el cliente iSCSI recordaremos un post que hicimos hace ya algún tiempo, CentOS: como configurar un dispositivo iSCSI, en princpio nos debería servir para cualquier distribución de Linux, lo único a tener en cuenta es que en Debian instalaremos el paquete open-iscsi para disponer del software necesario para el cliente iSCSI.

Una vez con el disco iSCSI configurado, procedemos a preparar el storage creando un VG y un LV, éste nos servirá parar asignarlo como ROOTDBS en la configuración de Informix:

root@ids1:~# pvcreate /dev/sdb
root@ids1:~# vgcreate -A y vgids /dev/sdb
root@ids1:~# lvcreate -A y -n lvrootdbs -L 5G vgids

Una vez con el storage preparado, pasamos a instalar heartbeat:

root@ids1:~# apt-get install heartbeat-2
....
root@ids2:~# apt-get install heartbeat-2
....

Esto nos instalará todo lo que necesitamos para hacer el failover de Informix, pero antes de que empiece a funcionar necesitaremos configurar unos mínimos:

root@ids1:~# cat /etc/ha.d/ha.cfg
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 20
warntime 10
initdead 120
udpport 694
ucast eth0 192.168.122.113
auto_failback off
node ids1
node ids2


root@ids2:~# cat /etc/ha.d/ha.cfg
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 20
warntime 10
initdead 120
udpport 694
ucast eth0 192.168.122.112
auto_failback off
node ids1
node ids2

Con esta configuración básica lo que conseguimos es definir los dos nodos (ids1 e ids2) y el canal de comunicación entre ellos via la red heartbeat (192.168.122.0/24). Además definimos el comportamiento de failback, en nuestro caso no haremos failback…y porqué? Principalmente para evitar matar sesiones activas inecesariamente.

Ahora pasamos a parametrizar la instalación de Informix para que cuando levante el servicio este identico en los dos nodos. La instalación la podemos seguir desde el post Debian: Instalación de IDS 11.50 , la realizamos sobre el nodo principal y la copiamos al secundario ya que serán identicos.

Los cambios que debemos realizar son, en el fichero que usemos para el SQLHOSTS:

demo_on onipcshm on_hostname on_servername
ol_demo_on onsoctcp 192.168.1.114 sqlexec

Y para el ONCONFIG:

ROOTPATH /dev/mapper/vgids-lvrootdbs
DBSERVERNAME demo_on
DBSERVERALIASES ol_demo_on

Lo demás es todo por defecto…recordad la prueba de concepto!! ;)

Una vez realizados los cambios, tendremos que incializar el ROOTDBS como se comentaba en el post de instalación con oninit -vi y la volvemos parar con onmode -uky la parte de Informix está lista.

Para finalizar…editaremos el fichero /etc/ha.d/haresources de la siguiente manera en el nodo1 y nodo2 respectivamente:

ids1 IPaddr2::192.168.1.114/24/eth1 open-iscsi LVM::vgids ids::/home/informix::demo_on::onconfig.demo_on


ids2 IPaddr2::192.168.1.114/24/eth1 open-iscsi LVM::vgids ids::/home/informix::demo_on::onconfig.demo_on

De esta manera le decimos a heartbeat que en caso de adquisición de los recursos, deberá levantar la IP alias 192.168.1.114 (virtual IP address), levantar el servicio open-iscsi, configurar el VG vgids y finalmente levantar Informix server demo_on con INFORMIXDIR /home/informix y ONCONFIG onconfig.demo_on.

Y bien, creo que no me dejo nada….realizamos la prueba de que todo funciona??? Aqui vamos, reiniciamos las máquinas y nos encontramos con lo siguiente:

ids heartbeat ending 1


Los servicios están en el primer nodo, es decir…al menos un nodo está haciendo lo que toca…ahora vamos a reiniciar dicho nodo y veremos si el segundo coge el servicio como debe:

ids heartbeat ending 2

Efectivamente, ahi los tenemos en el segundo nodo y para verificar realmente lo que ha pasado:

root@ids2:~# tail -50f /var/log/ha-log
.....
ResourceManager[4690]: 2010/08/01_14:50:59 info: Running /etc/ha.d/resource.d/LVM vgids start
....
ResourceManager[4690]: 2010/08/01_14:51:00 info: Running /etc/ha.d/resource.d/ids /home/informix demo_on onconfig.demo_on start
ids[5603]: 2010/08/01_14:51:11 INFO: Success
....

Ahí se pueden ver parte de los mensajes que heartbeat loggea, donde vemos que empieza a ejecutar los scripts necesarios para levantar los servicios y los mensajes de éxito.

Bien, llegados a este punto solo quedaría llevarlo a un escenario de producción y hacer las pruebas necesarias con las aplicaciones y clientes varios que accedan a nuestras bases de datos! ;)

Espero no haberme dejado nada, que lo dudo! después del royazo que he soltado… :P si veis algo incorrecto los comentarios estarán abiertos unos días!

One Response to “IDS: Alta disponibilidad con Heartbeat + iSCSI”

preload preload preload