Cómo configurar el clúster MariaDB Galera en Ubuntu 20.04

El equilibrio de carga y la agrupación en clústeres son muy importantes en un entorno de producción para lograr una alta disponibilidad de tu sistema de base de datos. MariaDB Galera Cluster ofrece una solución de clustering multimaster y es compatible con los motores de almacenamiento XtraDB/InnoDB. Un clúster multimaster permite leer y escribir en cualquier nodo del clúster. Si se modifican los datos en cualquier nodo, se replican a todos los demás nodos. El clúster Galera también admite entornos de nube y WAN para construir un clúster distribuido por países y continentes.

En este post, mostraremos cómo configurar un clúster MariaDB Galera de tres nodos en un servidor Ubuntu 20.04.

Requisitos previos

  • Tres servidores con Ubuntu 20.04.
  • Una contraseña de root configurada en el servidor.

Cómo empezar

Antes de empezar, tendrás que actualizar los paquetes del sistema a la última versión. Puedes actualizarlos con el siguiente comando:

apt-get update -y

Una vez que tu servidor esté actualizado, puedes pasar al siguiente paso.

Instalar el servidor MariaDB

En primer lugar, tendrás que instalar el servidor MariaDB en todos los nodos. Puedes instalarlo ejecutando el siguiente comando:

apt-get install mariadb-server -y

Una vez terminada la instalación, inicia el servicio MariaDB y habilítalo para que se inicie al reiniciar el sistema:

systemctl start mariadb
systemctl status mariadb

A continuación, tendrás que asegurar la instalación de MariaDB y establecer una contraseña de root de MariaDB en cada nodo. Puedes hacerlo con el siguiente comando:

mysql_secure_installation

Se te pedirá que establezcas una contraseña de raíz de MariaDB como se muestra a continuación:

Enter current password for root (enter for none): 
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Una vez que tu servidor MariaDB esté asegurado, puedes pasar al siguiente paso.

Configurar el Cluster Galera

A continuación, tendrás que crear un archivo de configuración de Galera en cada nodo para que cada uno de ellos pueda comunicarse entre sí.

En el primer nodo, crea un archivo galera.cnf utilizando el siguiente comando:

nano /etc/mysql/conf.d/galera.cnf

Añade las siguientes líneas:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="node1-ip-address"
wsrep_node_name="node1"

Guarda y cierra el archivo cuando hayas terminado.

En el segundo nodo, crea un archivo galera.cnf utilizando el siguiente comando:

nano /etc/mysql/conf.d/galera.cnf

Añade las siguientes líneas:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="node2-ip-address"
wsrep_node_name="node2"

Guarda y cierra el archivo cuando hayas terminado.

En el tercer nodo, crea un archivo galera.cnf utilizando el siguiente comando:

nano /etc/mysql/conf.d/galera.cnf

Añade las siguientes líneas:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node1-ip-address,node2-ip-address,node3-ip-address"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="node3-ip-address"
wsrep_node_name="node3"

Guarda y cierra el archivo cuando hayas terminado.

Inicializa el cluster de Galera

En este punto, todos los nodos están configurados para comunicarse entre sí.

A continuación, tendrás que detener el servicio MariaDB en todos los nodos. Puedes ejecutar el siguiente comando para detener el servicio MariaDB:

systemctl stop mariadb

En el primer nodo, inicializa el cluster MariaDB Galera con el siguiente comando:

galera_new_cluster

Ahora, comprueba el estado del cluster con el siguiente comando:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Deberías ver la siguiente salida:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

En el segundo nodo, inicia el servicio MariaDB con el siguiente comando:

systemctl start mariadb

A continuación, comprueba el estado del clúster MariaDB Galera con el siguiente comando:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Deberías ver la siguiente salida:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

En el tercer nodo, inicia el servicio MariaDB con el siguiente comando:

systemctl start mariadb

A continuación, comprueba el estado del clúster de MariaDB Galera con el siguiente comando:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Deberías ver la siguiente salida:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

En este punto, el clúster de MariaDB Galera está inicializado. Ahora puedes pasar al siguiente paso.

Verificar la replicación del clúster

A continuación, deberás verificar si la replicación funciona o no.

En el primer nodo, conéctate a MariaDB con el siguiente comando:

mysql -u root -p

Una vez conectado, crea alguna base de datos con el siguiente comando:

MariaDB [(none)]> create database db1;
MariaDB [(none)]> create database db2;

A continuación, sal de la MariaDB con el siguiente comando:

MariaDB [(none)]> exit;

A continuación, ve al segundo nodo y conéctate a la MariaDB con el siguiente comando

mysql -u root -p

A continuación, ejecuta el siguiente comando para mostrar todas las bases de datos:

MariaDB [(none)]> show databases;

Deberías ver que las dos bases de datos que hemos creado en el primer nodo están replicadas en el segundo nodo:

+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.001 sec)

A continuación, ve al tercer nodo y entra en el MariaDB con el siguiente comando:

mysql -u root -p

A continuación, ejecuta el siguiente comando para mostrar todas las bases de datos:

MariaDB [(none)]> show databases;

Deberías ver que las dos bases de datos que hemos creado en el primer nodo están replicadas en el tercer nodo:

+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.001 sec)

Conclusión

En la guía anterior, hemos aprendido a configurar un clúster MariaDB Galera de tres nodos en un servidor Ubuntu 20.04. Ahora puedes añadir más nodos al clúster MariaDB Galera fácilmente. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...