Se encuentra usted aquí

Heartbeat and PaceMaker

Primer paso:

nodo1#sudo  apt-get install heartbeat pacemaker
nodo2#sudo  apt-get install heartbeat pacemaker

Editamos el fichero /etc/hosts con las ips y los nombres de los nodos de esta forma:

10.0.0.1       nodo1
10.0.0.2       nodo2

Es importante que los nombres coincidan con el hostname de la máquina ya que si no no funcionaría.
Ahora creamos el fichero de configuración:

nodo1# cat /etc/ha.d/ha.cf
autojoin none
bcast eth0 #otra forma que veo mejor sería:
#ucast eth0 nodo1
#ucast eth0 nodo2 #se ignora a si mismo
warntime 3
deadtime 6
initdead 60
keepalive 1
node nodo1
node nodo2
crm respawn
auto_failback on

Copiamos el fichero de configuración entre los nodos:

nodo1#scp /etc/ha.d/ha.cf nodo2:/etc/ha.d/

Creamos una clave que van a compartir los nodos:

nodo1# ( echo -ne "auth 1\n1 sha1 "; \
  dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
  > /etc/ha.d/authkeys

Le damos los permisos correctos:

nodo1# chmod 0600 /etc/ha.d/authkeys

La copiamos entre los nodos:

nodo1# scp /etc/ha.d/authkeys nodo2:/etc/ha.d/

Reiniciamos el servicio de heartbeat:

nodo1# /etc/init.d/heartbeat restart
nodo2# /etc/init.d/heartbeat restart

Ejecutamos el comando crm_mon

Online: [ nodo2 nodo1 ]

Vemos que estan online.
Ahora vamos a configurar el servicio que vamos a monitorizar, en nuestro caso vamos a crear una ip virtual.

nodo1# crm configuration

Todo lo que configuremos se envia al resto de nodos, con lo que no es necesario repetir la configuración.
En primer lugar vamos a quitar el stonith, ("Shoot The Offending Node In The Head") basicamente consiste en un cable conectado al botón de power que lo que hace es que si el otro nodo da problemas lo apaga. (No tengo el cable así que lo quitamos)

property stonith-enabled="false"

Ahora creamos la ip virtual:

primitive virtual-ip ocf:heartbeat:IPaddr params ip="10.0.0.4" cidr_netmask="255.255.255.0" nic="eth0"

Vamos a seleccionar cual es el servidor preferido cuando están ambos HA encendidos:

location virtual-ip-pref virtual-ip 100: node1

Activamos el monitor que se encargará de ver que funcionan:

monitor virtual-ip 40s:20s

Guardamos la configuración:

commit
exit

Ahora podemos ir a nodo2 a ver si se ha guardado la configuración:

node2# crm configure show
node $id="1454963c-e51e-4363-8824-5bebe8095f44" node2
node $id="6e707220-382e-4d24-b3ba-1f6504aba70d" node1
primitive virtual-ip ocf:heartbeat:IPaddr \
        params ip="10.0.0.4" cidr_netmask="255.255.255.0" nic="eth0" \
        op monitor interval="40s" timeout="20s"
location virtual-ip-pref virtual-ip 100: node1
property $id="cib-bootstrap-options" \
        dc-version="1.0.9-unknown" \
        cluster-infrastructure="Heartbeat" \
        stonith-enabled="false"

Volvemos a ver crm_mon y vemos lo siguiente:

============
Last updated: Tue Feb 21 12:34:30 2012
Stack: Heartbeat
Current DC: node1 (6e707220-382e-4d24-b3ba-1f6504aba70d) - partition with quorum

Version: 1.0.9-unknown
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ node2 node1]

virtual-ip      (ocf::heartbeat:IPaddr):        Started node1

Failed actions:
    virtual-ip_start_0 (node=node1, call=3, rc=1, status=complete): unknown error

Vamos a probar haciendo un ping continuo para ver como funciona:

64 bytes from 10.0.0.4: icmp_req=2088 ttl=64 time=0.289 ms
64 bytes from 10.0.0.4: icmp_req=2089 ttl=64 time=0.289 ms
64 bytes from 10.0.0.4: icmp_req=2090 ttl=64 time=0.340 ms
64 bytes from 10.0.0.4: icmp_req=2091 ttl=64 time=0.293 ms
64 bytes from 10.0.0.4: icmp_req=2092 ttl=64 time=0.348 ms
64 bytes from 10.0.0.4: icmp_req=2093 ttl=64 time=2.03 ms (Vemos el retraso en este paquete, hemos parado el node1 para ver la reacción)
64 bytes from 10.0.0.4: icmp_req=2094 ttl=64 time=0.436 ms
64 bytes from 10.0.0.4: icmp_req=2095 ttl=64 time=0.266 ms
64 bytes from 10.0.0.4: icmp_req=2096 ttl=64 time=0.237 ms
Tags: