Ejemplo de cluster de alta disponibilidad en modo activo-pasivo utilizando LinuxHA.
Recursos complementarios
En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.
alumno@pc: $ sh ejercicio-linuxha.sh
Powershell.exe -executionpolicy bypass -file ejercicio-linuxha.ps1
Notas:
$DIR_BASE
especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/CDA1819 y en Windows en C:/CDA1819.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
.vdi.zip
de http://ccia.esei.uvigo.es/docencia/CDA/1819/practicas/ y copiarlos en el directorio anterior ($DIR_BASE
) para que el script haga el resto.
VBoxManage startvm <nombre MV>_<id>
Contiene un sistema Debian 9 con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
login | password |
---|---|
root | purple |
usuario | usuario |
root@datos:~# startx
Dispositivos -> Portapapeles compartido -> bidireccional
de la ventana de la máquina virtual.
Gestor de nodos: componente responsable de monitorizar y gestionar los nodos que forman parte del cluster HA
Gestor de recursos: componente responsable de asignar ”recursos” a los nodos del cluster HA
Web: https://clusterlabs.org/pacemaker/
Resource agents: colección de scripts shell responsables de controlar los ”recursos” gestionados por el cluster HA
Colección de scripts para el control de ”recursos” o servicios (evolución de los agentes LSB).
Estandariza las acciones (start
, stop
, status
, monitor
, ..) sobre los ”recursos”, el paso de parámetros y los códigos de salida de los scripts.
Agentes de recursos disponibles: https://github.com/ClusterLabs/resource-agents/
Se corresponden con los scripts de arranque de los servicios del sistema (disponibles en /etc/init.d
)
Suelen ser proporcionados por la distribución del sistema operativo utilizado.
resource-agents
, instalados en /usr/lib/ocf/resource.d/heartbeat
apt-get install corosync cluster-glue apt-get install pacemaker resource-agents
servidor1:~# ifconfig enp0s8 10.10.10.11 netmask 255.255.255.0 broadcast 10.10.10.255 up servidor2:~# ifconfig enp0s8 10.10.10.22 netmask 255.255.255.0 broadcast 10.10.10.255 up
Es necesario asegurar una configuración correcta de la direccion de broadcast (10.10.10.255) ya que nuestra configuración de Corosync enviará los ”pulsos” como paquetes UDP a la dirección de broadcast.
Nota: Esta configuración no es permanente, deberá realizarse cada vez que se arranquen las máquinas del ejemplo o editar convenientemente la configuración de red de cada máquina en /etc/network/interfaces.
------Contenido----- 127.0.0.1 localhost 10.10.10.11 servidor1 10.10.10.22 servidor2 ------Contenido-----
Asegurar también que los hostnames son los correctos
servidor1:~# hostname servidor2:~# hostname(si es necesario asignar los correctos con los comandos 1”hostname servidor1” ó ”hostname servidor2”)
servidor1:~# nano /var/www/html/index.html servidor2:~# nano /var/www/html/index.html
No es necesario arrancar los servidores Apache explícitamente (ya lo hará Pacemaker cuando ”toque”)
servidor1:~# nano /etc/ssh/sshd_config ... # Authentication: PermitRootLogin yes ... servidor1:~# service sshd restart
servidor2:~# nano /etc/ssh/sshd_config ... # Authentication: PermitRootLogin yes ... servidor1:~# service sshd restart
Corosync se encarga de gestionar los nodos del cluster y su estado (up/down)
|
|
servidor1:~# corosync-keygen Corosync Cluster Engine Authentication key generator. Gathering 1024 bits for key from /dev/random. Press keys on your keyboard to generate entropy. Press keys on your keyboard to generate entropy (bits = 864). Press keys on your keyboard to generate entropy (bits = 912). Press keys on your keyboard to generate entropy (bits = 960). Press keys on your keyboard to generate entropy (bits = 1008). Writing corosync key to /etc/corosync/authkey.
servidor1:~# cd /etc/corosync servidor1:/etc/corosync/# mv corosync.conf corosync.conf.orig servidor1:/etc/corosync/# nano corosync.conf ------ Contenido a incluir ----- totem { version: 2 cluster_name: clustercda transport: udp crypto_cipher: aes256 crypto_hash: sha1 interface { ringnumber: 0 bindnetaddr: 10.10.10.0 broadcast: yes mcastport: 5405 } } quorum { provider: corosync_votequorum expected_votes: 2 two_node: 1 } ## Lista explicita de nodos (no necesaria en modo broadcast) #nodelist { # node { # ring0_addr: 10.10.10.11 # name: servidor1 # nodeid: 1 # } # node { # ring0_addr: 10.10.10.22 # name: servidor2 # nodeid: 2 # } #} logging { to_logfile: yes logfile: /var/log/corosync/corosync.log to_syslog: yes timestamp: on } ------ Contenido a incluir -----
servidor1:/etc/corosyncs/# scp {corosync.conf,authkey} root@servidor2:/etc/corosync (pedirá la contraseña de root de cada máquina del cluster [purple])
Comprobar en el directorio /etc/corosync de la máquina servidor2 que realmente se han copia los 2 ficheros (corosync.conf, authkeys) con los permisos correctos.
|
|
Se puede ver como se ”suman” nodos al cluster con el comando crm_mon
(desde cualquier nodo)
servidor1:~/# crm_mon servidor2:~/# crm_mon (finalizar con CONTROL+C)
Al finalizar el ”arranque” del cluster (tardará un tiempo) mostrará que hay configurados 2 nodos y 0 recursos, indicando los nodos que están online (Online: [servidor1 servidor2])
servidor1:~# crm status
Nota: Es posible que se muestren nodos adicionales en estado offline. Se trata de ”restos” de la configuración inicial de corosync existente en la imagen base de las máquinas virtuales.
Pacemaker gestiona los recursos (servicios del cluster) y su asignación a los nodos.
En este ejemplo Pacemaker gestionará 2 recursos en modo activo-pasivo:
DIR_PUBLICA
]
APACHE
]
La consola de administración de Pacemaker (comando crm) tiene dos modos de uso (ambos equivalentes)
servidor1:/etc/ha.d/# crm configure crm(live) configure# show crm(live) configure# show xml
Nota: En ”modo comando” se ejecutaría desde el intérprete de comandos del sistema el comando crm configure show
.
crm(live) configure# property stonith-enabled=false crm(live) configure# property no-quorum-policy=ignore crm(live) configure# commit crm(live) configure# show
DIR_PUBLICA
cliente:~/# ping 193.147.87.47
crm(live) configure# ra crm(live) configure ra# list ocf (muestra los ”agentes de recurso” Heartbeat/Pacemaker de tipo OCF disponibles) crm(live) configure ra# list lsb (muestra los ”agentes de recurso” del sistema disponibles [scripts en /etc/init.d]) crm(live) configure ra# info ocf:heartbeat:IPaddr crm(live) configure ra# cd
(ojo con el separador de líneas \
)
crm(live) configure# primitive DIR_PUBLICA ocf:heartbeat:IPaddr \ params ip=193.147.87.47 cidr_netmask=255.255.255.0 nic=enp0s3 crm(live) configure# commit crm(live) configure# show
(comprobar el ping desde cliente [en algún momento empezará a responder])
crm status
” a qué nodo se le ha asignado el recurso DIR_PUBLICA
APACHE
APACHE
crm(live) configure# ra crm(live) configure ra# list ocf crm(live) configure ra# info ocf:heartbeat:apache crm(live) configure ra# cd
crm(live) configure# primitive APACHE ocf:heartbeat:apache \ params configfile=/etc/apache2/apache2.conf crm(live) configure# commit crm(live) configure# show
crm_mon
” ó ”crm status
”]
DIR_PUBLICA
se asigne a un nodo y el recurso APACHE
al otro
DIR_PUBLICA
y APACHE
(”co-localizar” ambos recursos)
crm(live) configure# colocation APACHE_SOBRE_DIRPUBLICA inf: DIR_PUBLICA APACHE crm(live) configure# commit crm(live) configure# show crm(live) configure# exit
crm_mon
” hasta que se estabilice y los
dos recursos se asignen al mismo nodo.
Desde el contexto resource del ”modo interactivo”
crm(live)configure# back crm(live)# resource crm(live)resource# migrate APACHE servidorX
Directamente con el ”modo comando” de crm
desde línea de comandos
servidor1:~# crm resource migrate APACHE servidorX servidor1:~# crm status
servidorX: shutdown -h now servidorY:~/# crm_mon (esperar hasta que detecte el fallo y migre recursos) ó servidorY:~/# crm statusCuando termine la migración, comprobar el acceso al servidor web desde la máquina cliente con lynx o firefox
Detallar los pasos seguidos y los resultados obtenidos en los puntos del ejemplo que se señalan a continuación.
crm status
o crm_mon
)
Puntos del ejemplo a detallar
DIR_PUBLICA
(punto 3 en la sección 3.4)
APACHE
y establecimiento de la
restricción de ”co-localización” (punto 4 en la sección 3.4)
APACHE
a otro nodo (punto 5 en la sección 3.4)
Entrega: FAITIC
Fecha límite: hasta el domingo 16/12/2018