Skip to main content

Cluster de Alta Disponibilidad

El objetivo de este práctica es la instalación de una aplicación php (WordPress) sobe dos clúster de alta disponibilidad:

Cluster de HA activo-pasivo​

  1. Utiliza el Vagrantfile la receta ansible del escenario 7: 07-HA-IPFailover-Apache2+DRBD+GFS2 para crear un clúster de alta disponibilidad activo-pasivo. Nota: La receta instala apache2 + php.
  2. Comprueba que los recursos están configurados de manera adecuada, configura tu host para que use el servidor DNS y comprueba que puedes acceder de forma adecuada a la página.
  3. Instala en los dos nodos un Galera MariaDB.
  4. Instala Wordpress en el clúster.

Para comprobar el estado del clúster utiliza el comando pcs status:

root@nodo1:~# pcs status
Cluster name: mycluster
Cluster Summary:
* Stack: corosync
* Current DC: nodo1 (version 2.0.5-ba59be7122) - partition with quorum
* Last updated: Sun Jun 18 14:43:26 2023
* Last change: Sun Jun 18 14:42:12 2023 by root via cibadmin on nodo1
* 2 nodes configured
* 5 resource instances configured

Node List:
* Online: [ nodo1 nodo2 ]

Full List of Resources:
* VirtualIP (ocf::heartbeat:IPaddr2): Started nodo1
* WebSite (ocf::heartbeat:apache): Started nodo1
* Clone Set: WebData-clone [WebData] (promotable):
* Masters: [ nodo1 ]
* Slaves: [ nodo2 ]
* WebFS (ocf::heartbeat:Filesystem): Started nodo1

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

En local añadimos una entrada nameserver en /etc/resolv.conf para que resuelva el nombre del clúster:

nameserver {ip dns} 

HA

HA

En ambos nodos instalamos MariaDB:

sudo apt install mariadb-server -y

NODO 1

Paramos el servicio de MariaDB:

sudo systemctl stop mariadb

Luego configuramos el clúster de Galera MariaDB:

sudo nano /etc/mysql/mariadb.conf.d/60-galera.cnf
[galera]
wsrep_on=1
wsrep_cluster_name="MariaDB Galera Cluster"
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.1.1.101,10.1.1.102"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

bind-address=0.0.0.0
wsrep_node_address=10.1.1.101

Creamos el cluster:

galera_new_cluster

Iniciamos el servicio de MariaDB:

sudo systemctl start mariadb

Nos conectamos y comprobamos que el clúster está funcionando:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
root@nodo1:~# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+
root@nodo1:~#

NODO 2

Paramos el servicio de MariaDB:

sudo systemctl stop mariadb

Luego configuramos el clúster de Galera MariaDB:

sudo nano /etc/mysql/mariadb.conf.d/60-galera.cnf
[galera]
wsrep_on=1
wsrep_cluster_name="MariaDB Galera Cluster"
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.1.1.101,10.1.1.102"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

bind-address=0.0.0.0
wsrep_node_address=10.1.1.102

Iniciamos el servicio de MariaDB:

sudo systemctl start mariadb

No es necesario crear el cluster, ya que el nodo 1 ya lo ha creado.

Nos conectamos y comprobamos que el clúster está funcionando:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
root@nodo2:~# mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+

WORDPRESS

En el nodo 1, por ejemplo, creamos la base de datos junto con el usuario y contraseña:

CREATE DATABASE wordpress;
CREATE USER wordpress IDENTIFIED BY 'wordpress';
GRANT ALL PRIVILEGES ON wordpress.* TO wordpress;

Instalamos el paquete de wordpress dentro de /var/www/html:

wget https://es.wordpress.org/latest-es_ES.tar.gz

Descomprimimos el paquete y cambiaremos el propietario de la carpeta wordpress a www-data:

tar -xzvf latest-es_ES.tar.gz
chown -R www-data: wordpress/

Entrega​

1. Una vez pasada la receta. La salida del comando pcs status.​

HA

2. Antes de instalar wordpress: una captura de pantalla donde se ve accediendo a index.php (se accede a nodo1). Apaga el nodo1 y vuelve a entregar un pantallazo a index.php. Muestra que accede a nodo2.​

HA

3. Antes de instalar WordPress una demostración de que el clúster de Galera MariaDB tiene dos nodos.​

HA

4. Pantallazo donde se ve el wordpress instalado con un post creado.​

HA

5. Demuestra al profesor que apagando un nodo el WordPress sigue funcionando.​

HA

Cluster de HA activo-activo​

Siguiendo las instrucciones que encuentras en el escenario 7: 07-HA-IPFailover-Apache2+DRBD+GFS2 convierte el clúster en activo-activo. Es necesario instalar el fencing para que el clúster funcione de manera adecuada. Nota: Tienes que tener en cuenta que se va a formatear de nuevo el drbd, por lo que se va a perder el wordpress. Si quieres puedes guardarlo en otro directorio, para luego recuperarlo.

Una vez que el clúster este configurado como activo-activo y WordPress esté funcionado, configura un método de balanceo de carga:

  • Balanceo por DNS: Podríamos quitar el recurso VirtualIP y hacer un balanceo de carga por DNS como vimos en el escenario 1 (1 punto) o el escenario 2 (2 puntos).
  • Añadir un balanceador de carga HAProxy (que balancee la carga entre los dos servidores web) (2 puntos).
  • Podrías instalar un HAProxy en los dos nodos y crear un recurso del clúster para que los controle. Para ello habría que crear un recurso con pacemaker para controlar los balanceadores de carga (el recurso se llama systemd:happroxy). Puedes seguir de base el artículo How to setup highly available Pacemaker/Corosync cluster with HAProxy load balancer (3 puntos).

Instalamos gfs2 en los dos nodos:

sudo apt-get install gfs2-utils dlm-controld

Después, creamos un recurso para el sistema de archivos gfs2 en el nodo 1 y lo clonamos:

pcs cluster cib dlm_cfg
pcs -f dlm_cfg resource create dlm ocf:pacemaker:controld op monitor interval=60s
pcs -f dlm_cfg resource clone dlm clone-max=2 clone-node-max=1
pcs cluster cib-push dlm_cfg --config

En el nodo 2 comprobamos que el recurso se ha creado:

pcs status

Desactivamos el sistema de archivos del ejercicio anterior en nodo 1:

pcs resource disable WebFS

Formateamos el disco en el nodo 1:

mkfs.gfs2 -p lock_dlm -j 2 -t mycluster:web /dev/drbd1

Entrega​

1. Una vez configurado el clúster activo-activo: la salida del comando pcs status.​

HA

2. Una prueba de funcionamiento donde se compruebe que el stonith_ se ha configurado de forma correcta.​

3. Pantallazo donde se vea el wordpress instalado con un post creado.​

4. Demuestra al profesor el balanceo de carga que has desarrollado.​