2.2. Aprender a configurar la conmutación por error
Este procedimiento proporciona una introducción a la creación de un cluster Pacemaker que ejecuta un servicio que fallará de un nodo a otro cuando el nodo en el que se ejecuta el servicio deje de estar disponible. Mediante este procedimiento, podrá aprender a crear un servicio en un clúster de dos nodos y podrá observar lo que ocurre con ese servicio cuando falla en el nodo en el que se está ejecutando.
Este procedimiento de ejemplo configura un cluster Pacemaker de dos nodos que ejecuta un servidor HTTP Apache. A continuación, puede detener el servicio Apache en un nodo para ver cómo el servicio sigue estando disponible.
Este procedimiento requiere como prerrequisito que tenga dos nodos ejecutando Red Hat Enterprise Linux 8 que puedan comunicarse entre sí, y requiere una dirección IP flotante que resida en la misma red que una de las direcciones IP asignadas estáticamente del nodo.
-
Los nodos utilizados en este ejemplo son
z1.example.com
yz2.example.com
. - La dirección IP flotante utilizada en este ejemplo es 192.168.122.120.
Asegúrese de que los nombres de los nodos que está utilizando están en el archivo /etc/hosts
en cada nodo.
En ambos nodos, instale los paquetes de software Red Hat High Availability Add-On desde el canal de Alta Disponibilidad, e inicie y habilite el servicio
pcsd
.#
yum install pcs pacemaker fence-agents-all
... #systemctl start pcsd.service
#systemctl enable pcsd.service
Si está ejecutando el demonio
firewalld
, en ambos nodos habilite los puertos requeridos por el complemento de alta disponibilidad de Red Hat.#
firewall-cmd --permanent --add-service=high-availability
#firewall-cmd --reload
En ambos nodos del clúster, establezca una contraseña para el usuario
hacluster
.#
passwd hacluster
Autentifique el usuario
hacluster
para cada nodo del clúster en el nodo desde el que va a ejecutar los comandospcs
.#
pcs host auth z1.example.com z2.example.com
Cree un clúster llamado
my_cluster
con ambos nodos como miembros del clúster. Este comando crea e inicia el cluster en un solo paso. Sólo es necesario ejecutarlo desde un nodo del clúster porque los comandos de configuración depcs
tienen efecto para todo el clúster.En un nodo del clúster, ejecute el siguiente comando.
#
pcs cluster setup my_cluster --start z1.example.com z2.example.com
Un cluster de Alta Disponibilidad de Red Hat requiere que se configure el cercado para el cluster. Las razones de este requisito se describen en Esgrima en un cluster de alta disponibilidad de Red Hat. Para esta introducción, sin embargo, para mostrar solamente cómo funciona la conmutación por error en esta configuración, desactive el cercado estableciendo la opción de cluster
stonith-enabled
afalse
AvisoEl uso de
stonith-enabled=false
es completamente inapropiado para un cluster de producción. Le dice al clúster que simplemente finja que los nodos que fallan están cercados de forma segura.#
pcs property set stonith-enabled=false
Después de crear un clúster y desactivar el cercado, compruebe el estado del clúster.
NotaCuando ejecute el comando
pcs cluster status
, es posible que la salida difiera temporalmente de los ejemplos mientras se inician los componentes del sistema.#
pcs cluster status
Cluster Status: Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Thu Oct 11 16:11:18 2018 Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z1.example.com 2 nodes configured 0 resources configured PCSD Status: z1.example.com: Online z2.example.com: OnlineEn ambos nodos, configure un navegador web y cree una página web para mostrar un simple mensaje de texto. Si está ejecutando el demonio
firewalld
, habilite los puertos que requierehttpd
.NotaNo utilice
systemctl enable
para habilitar cualquier servicio que vaya a ser gestionado por el clúster para que se inicie en el arranque del sistema.#
yum install -y httpd wget
... #firewall-cmd --permanent --add-service=http
#firewall-cmd --reload
#cat <<-END >/var/www/html/index.html
<html>
<body>My Test Site - $(hostname)</body>
</html>
END
Para que el agente de recursos de Apache obtenga el estado de Apache, en cada nodo del clúster cree la siguiente adición a la configuración existente para habilitar la URL del servidor de estado.
#
cat <<-END > /etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</Location>
END
Cree los recursos
IPaddr2
yapache
para que el clúster los gestione. El recurso 'IPaddr2' es una dirección IP flotante que no debe ser una ya asociada a un nodo físico. Si no se especifica el dispositivo NIC del recurso 'IPaddr2', la IP flotante debe residir en la misma red que la dirección IP asignada estáticamente y utilizada por el nodo.Puede mostrar una lista de todos los tipos de recursos disponibles con el comando
pcs resource list
. Puede utilizar el comandopcs resource describe resourcetype
para mostrar los parámetros que puede establecer para el tipo de recurso especificado. Por ejemplo, el siguiente comando muestra los parámetros que puede establecer para un recurso del tipoapache
:#
pcs resource describe apache
...En este ejemplo, el recurso dirección IP y el recurso apache están configurados como parte de un grupo llamado
apachegroup
, lo que asegura que los recursos se mantengan juntos para ejecutarse en el mismo nodo.Ejecute los siguientes comandos desde un nodo del clúster:
#
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.122.120 --group apachegroup
#pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" --group apachegroup
#pcs status
Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com PCSD Status: z1.example.com: Online z2.example.com: Online ...Tenga en cuenta que en este caso, el servicio
apachegroup
se está ejecutando en el nodo z1.ejemplo.com.Acceda al sitio web que ha creado, detenga el servicio en el nodo en el que se está ejecutando y observe cómo el servicio falla en el segundo nodo.
- Dirija un navegador al sitio web que ha creado utilizando la dirección IP flotante que ha configurado. Esto debería mostrar el mensaje de texto que definió, mostrando el nombre del nodo en el que se está ejecutando el sitio web.
Detener el servicio web de apache. El uso de
killall -9
simula un fallo a nivel de aplicación.#
killall -9 httpd
Compruebe el estado del clúster. Debería ver que la detención del servicio web provocó una acción fallida, pero que el software del clúster reinició el servicio en el nodo en el que se había estado ejecutando y debería seguir pudiendo acceder al navegador web.
#
pcs status
Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com Failed Resource Actions: * WebSite_monitor_60000 on z1.example.com 'not running' (7): call=31, status=complete, exitreason='none', last-rc-change='Fri Feb 5 21:01:41 2016', queued=0ms, exec=0msBorre el estado de fallo una vez que el servicio esté de nuevo en funcionamiento.
#
pcs resource cleanup WebSite
Ponga el nodo en el que se está ejecutando el servicio en modo de espera. Tenga en cuenta que, dado que hemos desactivado el cercado, no podemos simular eficazmente un fallo a nivel de nodo (como tirar de un cable de alimentación) porque el cercado es necesario para que el clúster se recupere de tales situaciones.
#
pcs node standby z1.example.com
Compruebe el estado del clúster y anote dónde se está ejecutando el servicio.
#
pcs status
Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Node z1.example.com: standby Online: [ z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z2.example.com WebSite (ocf::heartbeat:apache): Started z2.example.com- Acceda al sitio web. No debería haber pérdida de servicio, aunque el mensaje de la pantalla debería indicar el nodo en el que se está ejecutando el servicio.
Para restaurar los servicios del clúster en el primer nodo, saque el nodo del modo de espera. Esto no necesariamente moverá el servicio de nuevo a ese nodo.
#
pcs node unstandby z1.example.com
Para la limpieza final, detenga los servicios del clúster en ambos nodos.
#
pcs cluster stop --all