Galera Cluster: configurar un clúster de MariaDB en Ubuntu 20.04
Configurar un clúster de MariaDB con Galera Cluster mejora la fiabilidad y facilita el escalado de tu base de datos. A continuación, te mostramos cómo instalar un Galera Cluster en Ubuntu 20.04.
Galera Cluster MariaDB: requisitos previos
Para instalar un Galera Cluster en MariaDB en Ubuntu 20.04, debes cumplir con los siguientes requisitos:
- Varios servidores: necesitas al menos tres servidores o máquinas virtuales para crear un clúster. Todos los servidores deben estar en la misma red.
- Permisos de root: necesitas tener acceso root o al menos permisos de administrador en los servidores.
Guía paso a paso: configurar un Galera Cluster MariaDB en Ubuntu 20.04
Un Galera Cluster de MariaDB es una solución de base de datos práctica que mejora la disponibilidad, la integridad de datos y la escalabilidad de cara a aplicaciones exigentes. Te acompañamos en el proceso de configuración de un Galera Cluster de MariaDB en Ubuntu 20.04. Antes de empezar, asegúrate de que tienes al menos tres servidores o máquinas virtuales disponibles para configurar el clúster.
Paso 1: actualiza los paquetes
Es esencial que primero actualices tu sistema Ubuntu a su última versión para asegurarte de que tienes paquetes y las actualizaciones de seguridad más recientes.
Abre un terminal y ejecuta el siguiente comando para actualizar las fuentes de los paquetes:
sudo apt update
shellInstala todas las actualizaciones disponibles:
sudo apt upgrade -y
shellTambién es recomendable eliminar los paquetes obsoletos o no utilizados para limpiar los servidores:
sudo apt autoremove -y
shellPaso 2: instala MariaDB en los servidores
Ahora instala MariaDB en cada uno de tus servidores. Desde la versión 10.1, los paquetes de Galera vienen incluidos en los servidores MariaDB.
sudo apt install mariadb-server
shellDespués de la instalación, inicia el servicio MariaDB:
sudo systemctl start mariadb
shellEjecuta el siguiente comando para que MariaDB se active automáticamente cada vez que se reinicie el sistema:
sudo systemctl enable mariadb
shellComprueba si MariaDB se está ejecutando:
sudo systemctl status mariadb
shellRealiza algunos ajustes básicos de seguridad y configura la base de datos. Para ello, inicia el asistente de configuración:
sudo mysql_secure_installation
shellEl asistente te guiará a través de los pasos necesarios, como definir una contraseña root, eliminar usuarios anónimos o eliminar la base de datos de prueba.
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
shellEl script pregunta primero por la contraseña root actual. Si es la primera vez que instalas MariaDB en Ubuntu 20.04, simplemente pulsa la tecla Enter e introduce una nueva contraseña.
Paso 3: configura los nodos del Galera Cluster en MariaDB
Crea un archivo cnf
en el directorio /etc/mysql/conf.d
de cada nodo para definir la configuración específica de Galera.
nano /etc/mysql/conf.d/galera.cnf
shellEl archivo contiene la configuración general de la base de datos, como el formato del protocolo binario y el motor de almacenamiento predeterminado. También contiene configuraciones para el Galera Cluster, incluyendo el nombre del clúster y la dirección del clúster.
Introduce las siguientes líneas en el primer nodo:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell- Configuración general de la base de datos: incluye configuraciones como
binlog_format=ROW
para el formato de registro binario ydefault-storage-engine=innodb
para el motor de almacenamiento predeterminado. - Configuración del proveedor de Galera: configuraciones como
wsrep_on=ON
para activar la replicación de Galera ywsrep_provider=/usr/lib/galera/libgalera_smm.so
para especificar la ruta a la biblioteca de Galera. - Configuración del Galera Cluster: incluye el nombre del clúster (
wsrep_cluster_name
) y la dirección del clúster (wsrep_cluster_address
), que contiene las direcciones IP o los nombres de host de los nodos del clúster. - Configuración de sincronización de Galera: configura el método para la transferencia de instantáneas de estado (State Snapshot Transfer, SST), por ejemplo
wsrep_sst_method=rsync
. - Configuración del nodo de Galera: define la dirección IP o el nombre de host del nodo actual (
wsrep_node_address
) y el nombre del nodo (wsrep_node_name
).
Después de guardar el archivo, crea uno para el segundo nodo:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Configuración del proveedor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shellAhora haz lo mismo con el último nodo:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Configuración del proveedor de Galera
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Configuración del Galera Cluster
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Configuración de sincronización de Galera
wsrep_sst_method=rsync
# Configuración del nodo de Galera
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shellPaso 4: modifica el firewall en los servidores
Dado que los nodos se comunican entre sí a través de ciertos puertos, debes ajustar la configuración del firewall.
Abre los siguientes puertos en tu firewall:
- Puerto 3306: es el puerto predeterminado de MariaDB. Se utiliza para comunicarse con la base de datos y realizar peticiones.
- Puertos de Galera: además del puerto predeterminado 3306, Galera también utiliza otros puertos para la comunicación interna entre los nodos. Los puertos predeterminados de Galera suelen ser 4567, 4568 y 4444 para la transferencia de instantáneas de estado (State Snapshot Transfer, SST).
Configura las reglas del firewall en tu servidor Ubuntu con el siguiente comando:
sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shellPaso 5: inicia Galera Cluster en MariaDB
Detén el servicio MariaDB si ya se está ejecutando:
sudo systemctl stop mariadb
shellEl siguiente comando inicia el servidor MariaDB y crea un nuevo Galera Cluster en el primer nodo:
sudo galera_new_cluster
shellComprueba el número de nodos en el clúster:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellDeberías obtener el siguiente resultado:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+
shellEl primer nodo se ha iniciado correctamente.
Activa el segundo nodo:
systemctl start mariadb
shellComprueba si el número de nodos ha aumentado:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellEn la consola verás lo siguiente:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+
shellAhora inicia el tercer nodo:
systemctl start mariadb
shellComprueba que el nodo funciona correctamente:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellAhora debería haber tres nodos en el clúster:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 3 |
+--------------------------+------------ -+
shellPaso 6: prueba la replicación
Asegúrate de que puedes conectarte a cada uno de los nodos del clúster. Utiliza el cliente de MariaDB para iniciar sesión como usuario root o como otro usuario con suficientes permisos.
mysql -u root -p
shellCrea una nueva base de datos de prueba (test_db) en uno de los nodos del clúster:
CREATE DATABASE test_db;
sqlInicia sesión en los otros nodos y comprueba que la base de datos de prueba existe:
SHOW DATABASES;
sqlLa base de datos de prueba debería aparecer en la lista de bases de datos:
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
| sys |
+------------------------------+
sqlAñade una nueva tabla de prueba (test_table) a la base de datos de prueba (test_db):
USE test_db;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
sqlIntroduce algunos datos de prueba en la columna name
de la tabla de prueba:
INSERT INTO test_table (name) VALUES ('Alicia'), ('Juan'), ('Carlos');
sqlComprueba en los otros nodos si la tabla de prueba y los datos introducidos se han replicado:
USE test_db;
SELECT * FROM test_table;
sqlEl resultado muestra la lista de personas con sus nombres e ID:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alicia |
| 2 | Juan |
| 3 | Carlos |
+----+----------+
sqlAsí puedes modificar un registro de datos en la tabla de prueba:
UPDATE test_table SET name = 'David' WHERE name = 'Alicia';
sqlIntenta eliminar un registro de datos:
DELETE FROM test_table WHERE name = 'Juan';
sqlComprueba en los demás nodos si se han replicado las modificaciones y eliminaciones:
SELECT * FROM test_table;
sqlLos cambios aparecen correctamente en cada nodo:
+----+------------+
| id | name |
+----+-----------+
| 1 | David |
| 3 | Carlos |
+----+-----------+
sql