Instalación de servicio de base de datos en los nodos
Crearemos un clúster de alta disponibilidad con Galera y MariaDB, con replicación automática y balanceo de carga mediante un proxy.
Instalación de servicio de base de datos en los nodos
En este artículo abordaremos la creación de un clúster de alta disponibilidad con GALERA. Esta herramienta permite agregar nodos de MariaDB a un clúster el cual replicará automáticamente lo que suceda en un nodo. Esto sirve para aplicaciones con requerimiento de alta disponibilidad y puede agregarse un Proxy que gestione los servicios para se utilice el nodo que tenga menos carga.
Para hacer este laboratorio necesitaremos:
- Nodo 01 : Será nuestro maestro del clúster.
- Nodo 02 : Formará parte del clúster.
Puedes agregar tantos nodos creas necesarios. La PoC se realizá sobre sistemas Debian 12 en instalación limpia.
Nodo 01
1
2
3
hostnamectl set-hostname nodo01
apt update && apt install mariadb-server -y
mysql_secure_installation
Nodo 02
1
2
3
hostnamectl set-hostname nodo02
apt update && apt install mariadb-server -y
mysql_secure_installation
Ahora en ambos servidores se debe detener el servicio
1
systemctl stop mariadb
Luego editamos el archivo /etc/mysql/mariadb.conf.d/60-galera.cnf y agregamos lo siguiente:
¡Recuerda hacer una copia de seguridad del archivo!
Nodo 01:
1
2
3
4
5
6
7
8
9
10
11
12
13
[galera]
wsrep_on = 1
wsrep_cluster_name = "Ethercloud MariaDB Cluster"
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = gcomm://172.16.250.141,172.16.250.98
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=172.16.250.141
Nodo 02:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[galera]
wsrep_on = 1
wsrep_cluster_name = "Ethercloud MariaDB Cluster"
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = gcomm://172.16.250.141,172.16.250.98
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
# Para este nodo (nodo02) tendremos que cambiar la ip del
# wsrep_node_address , ya que esta debe corresponder al nodo que estamos dando # # de alta.
wsrep_node_address=172.16.250.98
Ahora bien, con el servicio de mariadb detenido en el nodo principal tendremos que generar el clúster:
1
galera_new_cluster
Luego reiniciamos el servicio en ambos nodos, comenzando por el nodo 01:
1
systemctl start mariadb
Pruebas de funcionamiento
Para probar que la replica funciona, vamos a ingresar a cualquiera de los nodos y desde mysql ejecutamos lo siguiente:
1
SHOW STATUS LIKE 'wsrep_cluster_size';
Esto nos dará una salida similar a esta.
1
2
3
4
5
6
7
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+
1 row in set (0.001 sec)
Ahora que aparecen los dos nodos, crearemos una base de datos.
1
2
3
mysql -u root -p
create database BASEDEDATOSPRUEBA;
show databases;
1
2
3
4
5
6
7
8
9
10
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| BASEDEDATOSPRUEBA |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
Para validar la réplica, bastará con ir al otro nodo y ver que también existe la BD:
1
2
3
4
5
6
7
8
9
10
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| BASEDEDATOSPRUEBA |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
Y listo, ya tienes una configuración básica de un clúster de alta disponibilidad con MariaDB.
Documentación oficial:
https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/