Como Crear y Configurar un Cluster de Base de Datos de MariaDB con Galera en CentOS 8 / RHEL 8 / AlmaLinux 8 / Rocky Linux 8
PROMO DigitalOcean
Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 100.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente enlace: https://bit.ly/digitalocean-itsm
El balanceo de carga y clustering en un ambiente de producción, son muy importantes para alcanzar la alta disponibilidad (High Availability o HA). MariaDB Galera Cluster provee una solución de clúster multi-master lo que permite que cada modificación de datos sea replicada a todos los otros nodos (a diferencia de MySQL Clusters donde hay un nodo Administrador y nodos de Datos) Galera también soporta entornos WAN y Cloud para distribuir los datos a través de regiones.
En esta guía vamos a instalar un clúster de MariaDB Galera en CentOS 8 / RHEL 8 / AlmaLinux 8 / Rocky Linux 8.
Requisitos
Hardware
Vamos a necesitar 3 nodos con las siguientes características (para efectos del laboratorio, virtuales):
- 1 vCPU
- 1024 MB de memoria RAM
- 5 GB de espacio en disco
Hostname | IP |
---|---|
galera-nodo1.home.lab | 192.168.1.10 |
galera-nodo2.home.lab | 192.168.1.11 |
galera-nodo3.home.lab | 192.168.1.12 |
Configurando archivo /etc/hosts en cada Nodo
Para que nos sea mucho más fácil poder resolver cada nodo con su Dirección IP, vamos a editar el archivo /etc/hosts de cada nodo (con su editor de textos de confianza, yo usaré vim) y colocar al final del archivo lo siguiente:
|
|
|
|
Instalando MariaDB en cada Nodo
Debemos instalar MariaDB en cada Nodo, ya hice una guía sobre esto hace algún tiempo: Como Instalar MariaDB en CentOS 8 / RHEL 8
Abriendo los Puertos en el Firewall
Vamos a abrir los puertos que son necesarios para que el cluster funcione:
- El puerto 3306 para las conexiones desde el cliente de MariaDB y el State Snapshot Transfer que usa el comando mysqldump.
- El puerto 4567 en TCP y UDP para permitir la replicación de datos de Galera entre los nodos.
- El puerto 4568 para los Incremental State Transfers, or IST, proceso mediante el cual un estado faltante es recibido por los otros nodos del cluster.
- El puerto 4444 para todos los otros estados del State Snapshot Transfers, or SST, mecanismo mediante el cual un nodo que se une al cluster recibe el estado y los datos de otro nodo.
Ejecutamos la serie de comandos a continuación en cada Nodo:
|
|
Como vemos de los comandos anteriores, estamos usando la zona public en el firewall, ahora debemos añadir cada IP con su respectiva notación CIDR del nodo a la zona public (ejecutar también en cada Nodo):
|
|
Recargamos el Firewall:
|
|
Configurando Galera en los Nodos
Primero que nada vamos a detener el servicio de MariaDB:
|
|
Ahora, vamos a crear el archivo de configuración del clúster en la ruta /etc/my.cnf.d/
|
|
Y pegamos lo siguiente:
|
|
Prestemos atención a los valores:
-
La primera sección modifica los parámetros de MariaDB para que permita al clúster su correcto funcionamiento. Podemos observar como el motor por defecto es InnoDB en vez de MyISAM o cualquier otro motor no transaccional. Además de esto, el valor del parámetro bind-address en 0.0.0.0 permitirá la conexión desde cualquier dirección IP.
-
La sección “Galera Provider Configuration” configura los componentes de MariaDB que proveen una API replicación WriteSet. Es decir, en nuestro caso, Galera es un proveedor wsrep (WriteSet Replication)
-
La sección “Galera Cluster Configuration” define el clúster, identificando los miembros del mismo por sus direcciones IP o por sus nombres DNS y crea un nombre para el cluster el cual debe ser igual para todos los nodos (parametro wsrep_cluster_name) El valor del parámetro wsrep_cluster_address debe tener las direcciones IP de los tres nodos que estamos configurando.
-
La sección “Galera Synchronization Configuration” define como el cluster se comunicará y sincronizará los datos entre nodos. Esto es usado solamente para la transferencia de estado el cual sucede cuando el nodo pasa a estado Online. Para la configuración inicial, se usa rsync porque es está comunmente disponible y es lo que se necesita de momento.
-
Y para finalizar, la sección “Galera Node Configuration” muestra claramente la dirección IP y el nombre del Nodo, lo que ayuda a diagnosticar problemas en los logs. El parámetro wsrep_node_address debe coincidir con las direcciones IP de los Nodos, sin embargo, se puede escoger cualquier nombre para ayudar a identificar cualquier problema en los logs del Nodo.
Dicho esto, modifiquemos los valores por cada nodo:
wsrep_cluster_name=“Nombre del cluster(personalizado)”
wsrep_cluster_address=“gcomm://Direcciones IP de todos los nodos separados por comas”
wsrep_node_address=“Direccion IP de Cada Nodo”
wsrep_node_name=“Nombre del Nodo”
- Nodo galera-nodo1
|
|
- Nodo galera-nodo2
|
|
- Nodo galera-nodo3
|
|
Inicializando el Clúster
Hasta aquí, ya debemos tener configurados los nodos de manera satisfactoria.
Con el servicio MariaDB detenido en todos los nodos, inicializamos el Clúster Galera con el siguiente comando:
|
|
Este comando normalmente no va a mostrar ninguna salida por el stdout si se hubiere ejecutado con éxito, dando por sentado que ya el nodo está unido al clúster y además el servicio MariaDB va a ser iniciado por Galera de manera automáticas. La manera que tenemos de saberlo, es con el siguiente comando:
|
|
El cual debería mostrarnos una salida parecida a esta:
|
|
Uno a uno vamos uniendo los demás nodos al cluster y consultando para ver si están uniéndose de manera correcta.
Probando la Replicación
Por último, vamos a probar si realmente cualquier cambio que hagamos en cualquier nodo, los cambios serán replicados a los otros, vamos a entrar con el cliente mysql en el nodo galera-nodo1:
|
|
Una vez estemos conectados, creemos una base de datos de ejemplo:
|
|
Salimos de MariaDB y vamos a conectarnos al nodo galera-nodo2:
|
|
Y consultamos todas las bases de datos:
|
|
Podemos observar que la base de datos db1 ha sido replicada al nodo2:
|
|
Y verificamos en el nodo galera-nodo3:
|
|
|
|
Espero les haya gustado este tutorial, ¡hasta la próxima!
Apoya este Proyecto!!!
Si te pareció útil este artículo y el proyecto en general, considera brindarme un café :)
Buy me a coffee