jueves, 23 de octubre de 2014

Clúster RHEL 7 con Pacemaker

Voy a compartir con ustedes una guía que nació de un proyecto realizado por mi. La instalación de un clúster activo-pasivo para aplicación web, usando la nueva versión de Red Hat Enterprise Linux 7 (RHEL 7), de más decir que es compatible con Centos 7 y Fedora. Para ello creamos un clúster con un Filesystem compartido, IP de servicios virtual, Apache, Tomcat y MariaDB. En primera instancia vamos a Tratar solo la Ip virtual y Apache. Copiaré la guía en borrador para luego hacer correcciones.

Configuración de software y nodos

En ambos nodos realizar:
Agregar nodos a tabla hosts.
10.132.42.160   nodo1 nodo1.unix.com
10.132.42.161   nodo2 nodo1.unix.com
10.132.42.162   vipmysql
10.132.42.163   vipapache
10.132.42.168   ilo_nodo1
10.132.42.169   ilo_nodo2

Deshabilitar firewalld y selinux
# systemctl stop firewalld
# systemctl disable firewalld

Instalar software Cluster
# yum install pcs fence-agents-all

Cambiar password de usuario
# passwd hacluster

Habilitar servicio
# systemctl start pcsd.service
# systemctl enable pcsd.service

Autorizar nodos y usuario (hacluster), realizar en un solo nodo
# pcs cluster auth nodo1 nodo2

Creación de Clúster y servicios

Crear clúster con el nombre “wcluster” y  habilitar cluster al iniciar maquinas
# pcs cluster setup --start --name wcluster nodo1 nodo2
# pcs cluster enable –-all

Validar estado
# pcs cluster status

Como es un clúster de 2 nodos solamente, deshabilitar quorum
# pcs property set no-quorum-policy=ignore

Configurar Fencing para los nodos
Se debe crear un dispositivo de fencing, con el fin de recuperar el servicio en nodo con fallas. Existen distintos agentes dependiendo del tipo de máquina, pueden ser ILO, SMNP, APC, Vmware, Kvm. Se debe configurar el fencing antes que los recursos para que estos inicien automáticamente o después si prefieren.

Para ver lista de agentes disponibles
# pcs stonith list

La sintaxis es:
# pcs stonith create “nombre” agente params var1=1 var2=1

Si no existen dispositivos para fencing, es posible deshabilitarlo
# pcs property set stonith-enabled=false

Ver Fencing para ejemplos.

Instalar servicio para cluster, ejemplo Apache
# yum group install web-server php

Para que el clúster pueda obtener el status de apache agregar al archivo httpd.conf

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>

Configuración de volumen compartido
Se toma como supuesto que existe un grupo y volumen generado en ambos nodos, indistinto del método de replicación u origen (storage, drbd, rsync,etc), llamado vgdata y lvdata respectivamente. Se debe evitar que el volumen sea activado por el sistema. En el archivo /etc/lvm/lvm.conf, descomentar la línea y agregar los grupos de volúmenes que si serán activados al inicio del SO.

Identificar vg
# vgs --noheadings -o vg_name
vg_root vg_home vgdata

Modificar /etc/lvm/lvm.conf
# volume_list = [ "vg_root", "vg_home" ]

Reconstruir initrd
# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)

Reiniciar ambos nodos y validar cluster
# pcs cluster status

Configurar recursos y grupo de servicio
Agregar grupo de volumen (opcional)
# pcs resource create my_lvm LVM volgrpname=vgdata exclusive=true --group apachegroup

Agregar volumen y montaje de filesystem
# pcs resource create w_fs Filesystem device="/dev/vgdata/lvdata" directory="/var/www" fstype="xfs" --group apachegroup

Agregar IP Virtual
# pcs resource create vipapache IPaddr2 ip=10.132.42.163 cidr_netmask=24 --group apachegroup

Agregar Apache
# pcs resource create website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup

Configurar orden y preferencia
Los recursos están agrupados y en orden de creación, para asegurar el orden de los servicios es opcional.
# pcs constraint order w_fs then vipapache
# pcs constraint order vipapache then website

Para asignar preferencia al grupo de servicios sobre un nodo (por defecto es infinito)
# pcs constraint location apachegroup prefers nodo1=50
# pcs constraint location apachegroup prefers nodo2=0

Fencing

Es posible crear dispositivos de fencing utilizando distintos agentes.

Ejemplo fencing con vwmare
Ver lista de servidores
#  fence_vmware_soap -z -l vmwareuser -p passwd -a esxhost -o list --ssl-insecure

NODO1,564daf6c-c3d9-3089-c448-c5f70ddb6609
NODO2,564dce63-1623-c585-18a4-c48700f4104f

Crear fencing device usando nombre o UUID, host, usuario y password vmware.
# pcs stonith create fence_nodo1 fence_vmware_soap params ipaddr="esxhost" login="vmwareuser" passwd="passwd" ssl=1 port="NODO1" action="reboot" ssl_insecure=1 pcmk_host_list="nodo1"

# pcs stonith create fence_nodo2 fence_vmware_soap params ipaddr="esxhost" login="vmwareuser" passwd="passwd" ssl=1 port="NODO2" action="reboot" ssl_insecure=1 pcmk_host_list="nodo2"

Ejemplo fencing con ILO / ILO2
# pcs stonith create fence_nodo1 fence_ilo params ipaddr="ilo_nodo1" login="admin" passwd="admin123" action="reboot" pcmk_host_list=nodo1  pcmk_host_check=static-list

Ejemplo fencing con ILO3 / ILO4 usar ipmilan
pcs stonith create fence_nodo1 fence_ipmilan params ipaddr="ilo_nodo1" login="admin" passwd="admin123" action="reboot" pcmk_host_list=nodo1  pcmk_host_check=static-list

Tomcat
Agregar servicio tomcat personalizado
# pcs resource create tomcat tomcat java_home="/usr/java/default" catalina_home="/usr/share/tomcat" --group apachegroup

Como alternativa agregar servicio tomcat del sistema
# pcs resource create tomcat systemd:tomcat --group apachegroup

MySQL o MariaDB

Montar volumen manualmente y cambiar los permisos primero (suponiendo que hay un fs para MySQL)

Instalar MariaDB
# yum install mariadb-server

Configurar recursos y grupo de servicio
Agregar volumen y montaje de filesystem
# pcs resource create fs_mysql Filesystem device="/dev/vgdata/lvbase" directory="/var/lib/mysql" fstype="xfs" --group mysqlgp

Agregar IP Virtual
# pcs resource create vipmysql IPaddr2 ip=10.132.42.162 cidr_netmask=24 --group mysqlgp

Agregar MySQL del sistema
# pcs resource create mysqldb mysql config=/etc/my.cnf enable_creation=1

O MySQL como servicio del sistema
# pcs resource create mysqldb systemd:mariadb --group mysqlgp

Tips

Si el periodo de monitoreo es muy bajo, es necesario subir timeout por defecto antes de generar los recursos
# pcs resource op defaults timeout=240s
# pcs resource op defaults

Verificar configuración
# crm_verify -L

Para evitar que los servicios cambien de nodo al levantar un servidor se configura el “stickiness”, tiene que ser mayor al valor más alto de “location” (defecto 0).
# pcs resource defaults resource-stickiness=100

Fin

Finalmente, después de todo se ve más o menos así:








6 comentarios:

  1. Hola.

    Si edito /etc/lvm/lvm.conf descomentando volume_list = [ "vg_root", "vg_home" ]
    y ocultando el grupo de volumenes en este caso vgdata,
    al montar los Filesystem que sean dependientes de ese vg, me da un error
    que no lo encuentra


    not installed' (5): call=135, status=complete,
    exitreason='Couldn't find device [/dev/vgdata/lvdata]. Expected /dev/??? to exist'

    Saludos


    ResponderBorrar
  2. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  3. Hola, después de tanto tiempo no pense que alguien viera la guía. Es posible lo que dices, ya que el volumen no se inicializa, sino que lo hace el cluster. Puedes probar montando usando alias (mapper) o algun comando vg que permita habilitar el volumen. Lamentablemente ya no tengo los equipos disponibles para hacer alguna prueba. Suerte y Saludos

    ResponderBorrar
  4. Muchísimas gracias pro la rápida respuesta Fernando.

    Es la primera guia que veo con 2 "Filesystem", uno por cada nodo y un
    solo LVM, que además dices es opcional.

    Las demás guias solo hablan de 1 Filesystem (apache, por ejemplo), lo
    que no supone ningun problema.

    He probado de todo /dev/mapper, etc Tambien activo/activo y gfs2, pero
    me lleva a otros problemas.

    En cuanto filtro el VG en /lvm.conf con volume_list, los recursos no
    se montan. Y si creo un LVM solo uno de los nodos lo tiene en exclusiva
    con lo que no me sirve...

    Lo dicho muchísimas y si lo resuelvo volveré y lo dejare escrito en tu
    blog.

    Saludos.

    ResponderBorrar
  5. Fernando:
    Tengo algunas consultas; espero me puedas ayudar:
    Puedo configurar el fencing despues de los resource, en mi caso en fencing_vmware_soa; Otra pregunta puedo desactivar el quorum sin afectar los recursos o el cluster. Y la ultima se puede configurar los recursos para ip especificos (y no para toda una red como es el caso tipico para los resource nfs)

    Atento a sus indicaciones y agradecido

    Adolfo

    ResponderBorrar
    Respuestas
    1. Hola, la guía tiene ya casi 3 años, es bueno que alguien le sirva aun. Puedes crear el fencing antes o después, eso no es problema. En NFS tienes que indicar el rango de ip que tendrá permisos y la ip donde funcionara el recurso NFS. En redhat hay un ejemplo: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Administration/s1-resourcegroupcreatenfs-HAAA.html
      Lamentablemente ya no tengo ambientes de pruebas. Saludos

      Borrar