Skip to content

Práctica: Cluster HA

Cluster de HA activo-pasivo

Entrega

Parte 1

Mostrar la salida de sudo pcs status

Ejecuto el comando, por ejemplo, en nodo1:

vagrant@nodo1:~$ sudo pcs status
Cluster name: mycluster
Cluster Summary:
  * Stack: corosync
  * Current DC: nodo2 (version 2.0.5-ba59be7122) - partition with quorum
  * Last updated: Fri Feb 18 12:09:53 2022
  * Last change:  Fri Feb 18 12:05:38 2022 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

Parte 2

2.1

Mostrar el acceso a index.php en nodo1)

index.php nodo1

2.2

Apagar nodo1 y mostrar de nuevo el acceso a index.php. Comprobar que se accede a nodo2.

Hago vagrant halt nodo1 y muestro que realmente está apagado:

2+DRBD+GFS2/ansible/roles/bind/files$ vagrant status
Current machine states:

nodo1                     shutoff (libvirt)
nodo2                     running (libvirt)
dns                       running (libvirt)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Recargo la página y veo que el nodo ha cambiado:

index.php nodo2

Parte 3

Comprobar que el cluster de Galera MariaDB tiene dos nodos

Dentro de mariadb, en cualquiera de los nodos, ejecuto el siguiete comando:

show status like 'wsrep_%';

El valor en wsrep_cluster_size nos indica que existen 2 nodos:

galera 2 nodos

Parte 4

Crear un post en Wordpress y mostrarlo

post

Parte 5

Demostrar al profesor que apagando un nodo, WordPress sigue funcionando

Hecho y funciona.

Ejercicios

Ejercicio 1

Lanzar Vagrant y Ansible sobre el escenario 06-HA-IPFailover-Apache2+DRBD+GFS2

vagrant up
ansible-playbook site.yaml

Ejercicio 2

Configurar el host para que use como servidor DNS primario el del escenario

Modifico mi /etc/resolv.conf:

# Generated by NetworkManager
search gonzalonazareno.org 41011038.41.andared.ced.junta-andalucia.es
nameserver 10.1.1.103
nameserver 192.168.202.2
nameserver 192.168.8.1

Ejercicio 3

3.1

Configuraciones de Galera MariaDB comunes a ambos nodos

Instalo mariadb:

sudo apt install mariadb-server

Comento la siguiente línea de /etc/mysql/mariadb.conf.d/50-server.cnf:

#bind-address            = 127.0.0.1

Reinicio:

sudo systemctl restart mariadb

Compruebo que ahora mariadb acepta peticiones desde todas las IPs:

mariadb listening external

3.2

Configuraciones de Galera MariaDB en nodo1

Modifico /etc/mysql/mariadb.conf.d/60-galera.cnf:

[galera]
# Mandatory settings
wsrep_on                 = ON
wsrep_cluster_name       = "MariaDB Galera Cluster"
wsrep_provider           = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address    = "gcomm://nodo1,nodo2"
binlog_format            = row
default_storage_engine   = InnoDB
innodb_autoinc_lock_mode = 2

# Allow server to accept connections on all interfaces.
bind-address             = 0.0.0.0
wsrep_node_address       = "nodo1"

Inicializo el cluster y reinicio:

sudo galera_new_cluster
sudo systemctl restart mariadb
3.3

Configuraciones de Galera MariaDB en nodo2

Modifico /etc/mysql/mariadb.conf.d/60-galera.cnf:

[galera]
# Mandatory settings
wsrep_on                 = ON
wsrep_cluster_name       = "MariaDB Galera Cluster"
wsrep_provider           = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address    = "gcomm://nodo1,nodo2"
binlog_format            = row
default_storage_engine   = InnoDB
innodb_autoinc_lock_mode = 2

# Allow server to accept connections on all interfaces.
bind-address             = 0.0.0.0
wsrep_node_address       = "nodo2"

Reinicio:

sudo systemctl restart mariadb

Ejercicio 4

Tenemos que instalar Wordpress en el cluster.

Esta instalación será idéntica a la de un Wordpress sin cluster, sólo que en este escenario el DocumentRoot se replicará al nodo2 en caso de fallo del nodo1.

La base de datos se replica ya de por sí incluso sin fallos de nodo.

4.1

Configurar la BD

La creo:

CREATE DATABASE WORDPRESS;

Creo el usuario:

CREATE USER 'WPUSER'@localhost IDENTIFIED BY '1234';

Asigno privilegios:

GRANT ALL PRIVILEGES ON WORDPRESS.* TO WPUSER@localhost IDENTIFIED BY '1234';
FLUSH PRIVILEGES;
4.2

Limpiar el DocumentRoot antiguo

sudo rm -r /var/www/html/*
4.3

Descargar Wordpress

Lo hago en /tmp:

wget https://wordpress.org/latest.zip
unzip latest.zip

Muevo el contenido del directorio wordpress al DocumentRoot que ya teníamos funcionando:

sudo mv /tmp/wordpress/* /var/www/html/

Dejo los permisos correctamente:

sudo chown -R www-data:www-data /var/www/html/
4.4

Instalar Wordpress

instalación 1

instalación 2

instalación 3

instalación 4

instalación 5

instalación 6