|
|
Atención: 21 al 25 de mayo, Curso Global de Servidores con CentOS 6.
Atención: 23 al 27 de abril, Curso SUSE Linux Enterprise Desktop Administration. Atención: 21 y 28 de abril, 5 y 12 de mayo, Taller de programación de Python. Atención: Disponible ALDOS 1.4.3. Nuestro sistema operativo para escritorio. Cómo configurar un agrupamiento (cluster) de alta disponibilidad con Heartbeat en CentOS 5.
Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com Sitio de Red: http://www.alcancelibre.org/ Jabber ID: darkshram@jabber.org Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
Introducción.Este documento describe los procedimientos de configuración de un agrupamiento (cluster) de alta disponibilidad utilizando Heartbeat. Se asume que se dispone de dos equipos o máquinas virtuales, las cuales serán los dos nodos del agrupamiento, y tiene las siguientes características:
Acerca de Heartbeat.Heartbeat es un servicio que provee servicios de infraestructura de agrupamiento (cluster) a clientes. Permite a los clientes saber si uno de los nodos está presente o ausente, intercambiado fácilmente mensajes entre éstos. Está específicamente diseñado para funcionar como agrupamiento de alta disponibilidad para cualquier tipo de servicio. Sitio de Internet: http://www.linux-ha.org/ Procedimientos.Servicios que deben desactivarse.En ambos nodos, si estuviesen presentes, deben estar desactivados los servicios avahi-daemon y avahi-dnsconfd, así como cualquier otro servicio que intente utilizar la interfaz eth1, misma que debe estar completamente dedicada a las comunicaciones de Heartbeat.
Es importante también desactivar el cortafuegos predeterminando del sistema en ambos nodos, debido a que éste interfiere con la comunicación entre los nodos de heartbeat:
El muro cortafuegos de ambos nodos puede ser fácilmente gestionado a través de Shorewall, como se explica más adelante. SELinux y Heartbeat.Lamentablemente, de modo predeterminado la implementación de SELinux incluida en CentOS 5.x carece de políticas que permitan funcionar al servicio heartbeat, a menos que se generen manualmente las necesarias o bien se ponga SELinux en modo permisivo o se desactive por completo éste. Configuración del sistema con SELinux activo.Particularmente recomiendo crear las políticas necesarias para SELinux. Es relativamente simple. El siguiente procedimiento deberá realizarse en ambos nodos. Lo primero es cambiarse al directorio /usr/share/selinux/packages.
Se crea un subdirectorio que será denominado heartbeat:
Se cambia a este nuevo subdirectorio:
Suponiendo que se van a configurar los servicios shorewall (o bien iptables), httpd, named y vsftpd, descargue el archivo heartbeat1.te desde Alcance Libre:
El edite el archivo heartbeat1.te que se acaba de descargar:
Y verifique que tenga el siguiente contenido:
Lo anterior, que fue obtenido de la salida del mandato dmesg|grep audit|audit2allow -m heartbeat1>heartbeat1.te en un sistema donde SELinux impedía a Heartbeat iniciar los servicios anteriormente mencionados. En si, define que se permite el modo de lectura y escritura cuando los servicios del directorio /etc/init.d sean iniciados por un zócalo generado por Heartbeat. A continuación, se genera un el archivo de módulo para SELinux (heartbeat1.mod) utilizando el mandato checkmodule de la siguiente forma:
Luego, se procede a empaquetar el archivo heartbeat1.mod como el archivo heartbeat1.pp:
Finalmente se vincula el archivo heartbeat1.pp obtenido con las políticas actuales de SELinux y se cargan éstas en el núcleo en ejecución:
Una vez cargadas las nuevas políticas, se pueden eliminar los archivos heartbeat1.te y heartbeat1.mod, pues sólo será necesario que exista el archivo binario heartbeat1.pp. Todo lo anterior se puede repetir utilizando otro nombre de archivo distinto para poder añadir más servicios. Es decir, si se van a añadir más servicios par a ser gestionados por Heartbeat, configurar éstos en el archivo /etc/ha.d/haresources, como se describe más adelante en este mismo documento, reiniciar el servicio y realizar el siguiente procedimiento:
Configuración del sistema con SELinux en modo permisivo.Si se desea, puede ponerse SELinux en modo permisivo en ambos nodos con el fin de evitarse tener que realizar los procedimientos anteriores. Edite el archivo /etc/sysconfig/selinux:
Cambie SELINUX=enforcing por SELINUX=permissive, a fin de mantener funcionado SELinux, y preservar todos los contextos de éste en el sistema de archivos, pero sin interferir con el funcionamiento de Heartbeat:
Reinicie el sistema en ambos nodos.
Realmente es poco recomendable desactivar por completo SELinux, siendo que las políticas necesarias pudieran aparecer en alguna actualización del paquete selinux-policy-targeted, o bien pudiera ser necesario recurrir a la protección que brinda esta implementación en un futuro a fin de evitar potenciales incidentes de seguridad que normalmente se evitarían utilizando SELinux. En versiones recientes de Fedora, es posible evitar los problemas con SELinux, de manera fácil, ejecutando lo siguiente para permitir a heartbeat trabajar en modo sin confinar:
El contexto unconfined_exec_semanaget es inexistente en CentOS 5 y Red Hat Enterprise Linux 5. Configuración del Nodo 1Ingresar como root o bien cambiar al usuario root.
Editar el archivo /etc/hosts:
Y definir los nombres asociados a la dirección IP pública del agrupamiento (cluster) y las direcciones IP de las interfaces eth0, las cuales corresponden a las interfaces publicas de los nodos:
Para complementar lo anterior, debe haber un DNS que se encargue de resolver estos nombres para la red local y/o hacia Internet. Editar el archivo /etc/hosts y definir los nombres asociados a las direcciones IP de las interfaces eth1, las cuales corresponden a las interfaces privadas del cluster, a través de la cual se comunican los nodos:
Instalar los servicios que se van a gestionar a través del agrupamiento (cluster):
Utilizando un editor de texto simple, crear el archivo /var/www/html/index.php:
Y añadir el siguiente contenido:
Crear el archivo /etc/httpd/conf.d/cluster.conf con el siguiente contenido:
Utilice cualquier editor de texto sobre el archivo /etc/vsftpd/vsftpd.conf:
Y añadir al final de éste lo siguiente:
Genere con el mandato touch el archivo /etc/vsftpd/chroot_list:
Instale el depósito YUM de Alcance Libre que incluye Shorewall:
Instale Shorewall:
Cambie al directorio /etc/shorewall:
Edite con vim el archivo /etc/shorewall/shorewall.conf y cambie STARTUP_ENABLED=No por STARTUP_ENABLED=yes:
A fin de que exista una comunicación sin restricciones entre ambos nodos cuando el cortafuegos esté detenido, defina el siguiente contenido en el archivo /etc/shorewall/routesstoped:
Defina las zonas del mudo cortafuegos en el archivo /etc/shorewall/zones:
Defina que interfaces de red corresponden a las zonas establecidas en el archivo /etc/shorewall/interfaces:
Defina las siguientes políticas en el archivo /etc/shorewall/policy:
Considerando que se están configurando los servicios shorewall, vsftpd y httpd, se administrarán ambos servidores a través de SSH, limitando los pings desde cualquier zona a 5 conexiones por segundo con ráfagas de 2, defina las siguientes reglas para el archivo /etc/shorewall/rules:
Debido a un error en el guión %pre (pre-instalación) de los paquetes de heartbeat que son distribuidos a través de los depósitos YUM de CentOS, es importante crear previamente el usuario y grupo que utilizará heartbeat, o de otro modo fallará la instalación:
Instalar el paquete heartbeat. Se instalarán automáticamente como dependencias los paquetes heartbeat-stonith y heartbeat-pils:
Cambiarse al directorio /etc/ha.d
Copiar los archivos de ejemplo para configuración de heartbeat.
Añadir al final del archivo authkeys algo similar a lo siguiente:
Puede generar el contenido del archivo /etc/ha.d/authkeys, con un criptograma adecuado, utilizando el siguiente guión:
Por motivos de seguridad, este archivo sólo debe tener permisos de lectura y escritura para el usuario root. Cambiar el permiso de éste ejecutando lo siguiente:
Editar el archivo ha.cf:
Añadir al final del archivo ha.cf lo siguiente:
Editar el archivo haresources:
Añadir al final del archivo haresources lo siguiente, donde se define el nombre del nodo 1, dirección IP que utilizará Heartbeat para servir los recursos, máscara de subred en formato de bits, nombre de interfaz de red donde se creará la interfaz virtual, dirección de difusión de la red (broadcast) y los servicios a controlar:
Desactivar los servicios que se van a gestionar a través del agrupamiento (cluster):
Iniciar el servicio heartbeat:
Añadir el servicio heartbeat al arranque del sistema:
Los servicios shorewall, httpd y vsftpd iniciarán automáticamente poco después de iniciar el servicio heartbeat. Configuración del Nodo 2Ingresar como root o bien cambiar al usuario root.
Instalar los servicios que se van a gestionar a través del agrupamiento (cluster):
Utilizando un editor de texto simple, crear el archivo /var/www/html/index.php:
Y añadir el siguiente contenido:
A través de SCP, copiar desde el nodo 1 el archivo /etc/httpd/conf.d/cluster.conf dentro del directorio /etc/httpd/conf.d/ local:
Utilice cualquier editor de texto sobre el archivo /etc/vsftpd/vsftpd.conf:
Y añadir al final de éste lo siguiente:
Genere con el mandato touch el archivo /etc/vsftpd/chroot_list:
Instale Shorewall:
Cambie al directorio /etc/shorewall:
Edite con vim el archivo /etc/shorewall/shorewall.conf y cambie STARTUP_ENABLED=No por STARTUP_ENABLED=yes:
A fin de que exista una comunicación sin restricciones entre ambos nodos cuando el cortafuegos esté detenido, defina el siguiente contenido en el archivo /etc/shorewall/routesstoped:
Defina las zonas del mudo cortafuegos en el archivo /etc/shorewall/zones:
Defina que interfaces de red corresponden a las zonas establecidas en el archivo /etc/shorewall/interfaces:
Defina las siguientes políticas en el archivo /etc/shorewall/policy:
Defina las siguientes reglas para el archivo /etc/shorewall/rules:
Crear el usuario y grupo que utilizará heartbeat:
Instalar el paquete heartbeat:
A través de SCP, copiar desde el nodo 1 el archivo /etc/hosts para reemplazar el archivo /etc/hosts local:
A través de SCP, copiar desde el nodo 1 el contenido completo del directorio /etc/ha.d dentro de /etc
Desactivar los servicios que se van a gestionar a través del agrupamiento (cluster):
Iniciar el servicio heartbeat:
Añadir el servicio heartbeat al arranque del sistema:
Los servicios shorewall, httpd y vsftpd iniciarán automáticamente sólo cuando heartbeat detecte que ha fallado el nodo 1 o se ha perdido conectividad con éste. Verificando el agrupamiento (cluster).La mejor forma de verificar que todo funciona correctamente es acceder con el navegador hacia http://nombre.publico.cluster.com/ o http://192.168.1.100/, o bien acceder a través de un cliente FTP hacia nombre.publico.cluster.com o 192.168.1.100. Deberá de responder el nodo 1. Apague el nodo 1 o detenga el servicio heartbeat en el nodo 1, espere 20 a 30 segundos e intente acceder hacia las direcciones anteriores. Deberá de responder el nodo 2. Volviendo a encender el nodo 1 o iniciando de nuevo el servicio heartbeat, espere 20 a 30 segundos e intente acceder nuevamente hacia las direcciones. Deberá de responder el nodo 1. Mantener sincronizados los directorios.Es importante resaltar que las interfaces eth1 de ambos nodos deben ser excluidas para realizar cualquier actividad. Deben ser utilizadas exclusivamente por el servicio de heartbeat. Utilice las interfaces eth0 para realizar sincronización de datos. En le caso del nodo 2, se puede generar una tarea programada para que se ejecute cada cierto tiempo, utilizando rsync y configurando la cuenta de root de ambos nodos para utilizar SSH sin clave de acceso. En el siguiente ejemplo para entrada el archivo /etc/crontab, se sincroniza cada hora el /var/ftp/pub del nodo 2, a partir del directorio /var/ftp/pub del nodo 1:
En el caso de el nodo 1, se asume que si este falla y es apagado, al iniciar sincroniza con el nodo 2, el cual estuvo trabajando y funcionando en ausencia del nodo 1. Puede agregarse el siguiente ejemplo al archivo /etc/rc.local, lo que corresponde a la sincronización de datos del los directorios /var/ftp/pub a partir de el nodo 2 hacia el nodo 1 que se asume acaba de iniciar:
|
Comentarios Recientes