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
- 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.
- 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.
- Instala en los dos nodos un Galera MariaDB.
- 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}
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.
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.
3. Antes de instalar WordPress una demostración de que el clúster de Galera MariaDB tiene dos nodos.
4. Pantallazo donde se ve el wordpress instalado con un post creado.
5. Demuestra al profesor que apagando un nodo el WordPress sigue funcionando.
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