====== Hearbeat - cluster ====== ===== Descripción =====  Heartbeat es el sistema de monitoreo de clusters estandar ===== Prerequistos ===== Montar paquetes * heartbeat * heartbeat-pils * heartbeat-gui * heartbeat-stonith ===== Configuracion Basica ===== Es necesario configurar tres archivos de arranque -- /etc/ha.d/ha.cf  Este archivo tiene la informacion del cluster use_logd yes\\ bcast eth0\\ node ping pong\\ crm on Esto traduce en:  - Use el sistema de bitacoras propietario con non-blocking - A travez de que interfaz hacer el broadcast para anunciarse - Listado de nodos participantes en el cluster - Cluster Resource Monitoring: Permite monitore de 2 o mas nodos -- /etc/ha.d/authkeys La información entre las maquinas va encriptada, Aqui defines que autentica, el método y el passphrase. auth 1\\ 1 md5 la casa del conejo OJO este archivo debe ser 600.   --/etc/ha.d/logd.cf  Este archivo dice como voy a almacenar mis bitacoras. Al archivo solo le cambiamos logfacility daemon Que dice que vayan directamente al /var/log/messages ==== Puesta en funcionamiento ==== Una vez se tienen los archivos corectos ya se puede lanzar el demonio /etc/init.d/heartbeat start Si todo funciona puede copiar estos archviso de configuracion a la otra maquina y lanzarlo alla tambien. Todo debe funcionar Como permitimos el monitoreo usando crm, podemos probarlos usando crm_mon -i 5 COn eso muestra quien esta en linea y demas detallitos.   ===== Ahora si haga que funcione algo dependiendo de el ===== ==== A. Agregar una Ip compartida ==== La facil es usar la interfaz grafica hb_qui. La primera vez que se corre el crea los archivos de configuracion en /var/lib/heartbeat/crm/cib.xml. Boton derecho en Resourse --> Adicionar -->Native --> IPaddr2 Ahi en parametros puede agregar la direccion IP, y el dispositivo. Si quiere una virtual use eth0:0 por ejemplo. De esta forma, esa ip la mantiene viva el sistema.  ==== Agregar Apache u otro servicio ==== Boton derecho en Resourse --> Adicionar -->Native y escoja --> httpd -- lsf Configure apache para escuchar puerto 80  y habilite la revision de status (OJO Sin esto andando no sube en caso que use ocf) Quite la subida por default con chkconfig httpd off Lo siguiente que se hace es agregar una restriccion co-location para que funcionen los dos servicios juntos, como que apache se mueva con la IP. Las COLOCATIONS no tienen sino dos "scores" INFINITY si quiere que queden juntas, o -INFINITY si no quiere que se junten.   * trate de usar el apache del ocf/heartbeat .. pero me dio mucha guerra para moverlo de un lado al otro Originalmente no se devuelve al servidor principal aun cuando por defecto Hearbeat esta configurado para eso. ==== Scores para manejar prioridades y/o preferencias ==== Los scores determinan quien es el PAPA para cierto servicio. El sistema automaticamente "ratea" las maquinas y decide quien es el papa.  Por ejemplo si yo quiero que la ip prefiera una maquina y que siempre vuelva a ella cuando este disponible. Coloco una restricicon en location en donde "#uname eq ping.skina.com.co" y le pongo un score de 100 lo que hace preferir ping - http:%%//%%www.linux-ha.org/ConsensusClusterMembership --- ==== Los grupos de servicios para manejarlos al tiempo ==== Si yo necesito, por ejemplo, que varios servicios se muevan al tiempo, puedo poner reglas sobre el grupo y asi logro que todo se mueva al tiempo   ===== Problemas ===== ==== 1. Algo falla ! ==== - Importante, dele una ojeada al var log messages. Fijo ahi le dice que es. ==== 2. Quiero que todos los servicios se muevan de un equipo a otro al tiempo ==== La forma que encontre de conseguir esto fue poniendo todos los servicios en un grupo y dejando la ip compartida  por fuera. Una vez hecho esto, agregue una restriccion de "colocation" entre la ip y el grupo .. taran !!! ==== 3. Los servicios no quieren volver al servidor principal despues de una catastrofe ==== El problema es que cuando un servicio no puede subir en un equipo, hearbeat marca ese recurso como "ERROR" y no lo retorna a ese servidor asi sea el primario, a menos que "limpie" el recurso. El boton de "clean up" en la interfaz grafica. Una vez hace esto ya vuelve a su comportamiento normal. ==== 4. Usuario de hb_gui no entra ==== El usuario debe ser un usuario del sistema y del grupo hacluster. La contraseña es la misma del sistema operativo. ==== 5. Cambie a mano el cib.xml y no funciona ==== YO NO HE PODIDO .. solo con hb_gui mantiene consistencia ==== 6. Los scripts se comportan raro ==== Sucede que los scripts DEBEN ser lsb compliant. Si no lo son muchas cosas falla. El estandar esta en http:%%//%%refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html -- Por ahi tenemos un script para evaluar eso. ===== Referencias ===== - http:%%//%%www.linuxjournal.com/article/5862 -- - Un videito tutorial http:%%//%%linux-ha.org/Education/Newbie/InstallHeartbeatScreencast -- - [[http://www.howtoforge.com/high_availability_heartbeat_centos|Configuring A High Availability Cluster (Heartbeat) On CentOS]] --  - http:%%//%%search.code-head.com/F-NFS-Linux-HA-Heartbeat-HOWTO-UDP-1629179 -- - [[http://www.novell.com/documentation/sles10/heartbeat/?page=/documentation/sles10/heartbeat/data/sec_hb_manual_config_resources.html|Documentacion  de SLES 10 de Novell]]. - Un howto bien bonito de [[http://www.netexpertise.eu/en/linux/heartbeat-2-howto.html|Netexpertise]]. - Command line instruction http:%%//%%doc.opensuse.org/products_new/draft/SLE-HA/SLE-ha/cha.ha.manual_config.html - - Mas comandos manuales http:%%//%%www.novell.com/documentation/sles10/heartbeat/?page=/documentation/sles10/heartbeat/data/man_crmresource.html -- - Algo viejo http:%%//%%www.novell.com/communities/node/4846/load-balancing-howto-lvs-ldirectord-heartbeat-2 FIN ==============================================================\\ Test lsb compliant\\ ============================================================== #!/bin/bash\\ #\\ # Script that test the return o init scripts\\ #\\ \\ if [[ $# != 1 ]]; then\\     echo "Wrong number of Parameters"\\     echo "USAGE: test_lsb_init [script]"\\     exit 0\\ fi\\ \\ if [[ ! -f $1 ]]; then\\     echo "Init script does not exists"\\     echo USAGE: test_lsb_init [script]\\     exit 0\\ fi\\ \\ if [[ ! -x $1 ]]; then\\     echo "Init script is not an executable"\\     echo USAGE: test_lsb_init [script]\\     exit 0\\ fi\\ \\ \\ echo ""\\ echo ""\\ echo "----------------------------------> Doing $1 start to begin"\\ $1 start\\ read -t 2 aaa\\ \\ echo ""\\ echo "----------------------------------> Doing $1 stop"\\ $1 stop\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 stop again"\\ $1 stop\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 3"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 start"\\ $1 start\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 start again"\\ $1 start\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 restart"\\ $1 restart\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 try-restart"\\ $1 try-restart\\ echo "It returns: $?  and it should be: 1"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 reload"\\ $1 reload\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 force-reload"\\ $1 force-reload\\ echo "It returns: $?  and it should be: 1"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 status"\\ $1 status\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\ \\ echo "----------------------------------> Doing $1 stop"\\ $1 stop\\ echo "It returns: $?  and it should be: 0"\\ read -t 2 aaa\\   ============================================================== 04-Noviembre-2008 J.E.Gomez v1.0 Primera version ---- __**Advertencia**__ Este documento es privado y es de uso exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal. ----