Instalación y configuración de mariadb galera en Debian 12
¿Que es mariadb galera?
MariaDB Galera es un clúster de alta disponibilidad y replicación síncrona para MariaDB. Combina MariaDB con el software Galera Cluster para proporcionar replicación síncrona de múltiples maestros a través de múltiples nodos de base de datos.
Requisitos
- Sistema Debian 12 actualizado.
- Privilegios de root o sudo.
- Acceso a internet.
Instalacion
Vamos a realizar todo el proceso para la creación del clúster galera en los 3 nodos. Para ello, lo primero es instalar el paquete de mariadb-server en los 3 nodos.
root@mariadb-galera1:~# apt install mariadb-server -y
root@mariadb-galera2:~# apt install mariadb-server -y
root@mariadb-galera3:~# apt install mariadb-server -y
Una vez instalado el paquete, vamos crear una base de datos de prueba en el nodo 1.
root@mariadb-galera1:~# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS prueba_db;
MariaDB [(none)]> use prueba_db;
MariaDB [prueba_db]> CREATE TABLE IF NOT EXISTS usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
email VARCHAR(50),
edad INT,
direccion VARCHAR(100)
);
MariaDB [prueba_db]> INSERT INTO usuarios (nombre, email, edad, direccion) VALUES
('Juan Perez', 'juan@example.com', 30, 'Calle 123, Ciudad'),
('Maria Rodriguez', 'maria@example.com', 25, 'Avenida XYZ, Ciudad'),
('Pedro Gomez', 'pedro@example.com', 35, 'Carrera 456, Ciudad');
MariaDB [prueba_db]> CREATE TABLE IF NOT EXISTS categorias (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50)
);
MariaDB [prueba_db]> INSERT INTO categorias (nombre) VALUES
('Electrónica'),
('Tecnología'),
('Oficina');
MariaDB [prueba_db]> CREATE TABLE IF NOT EXISTS productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
precio DECIMAL(10, 2),
stock INT,
categoria_id INT,
FOREIGN KEY (categoria_id) REFERENCES categorias(id)
);
MariaDB [prueba_db]> INSERT INTO productos (nombre, precio, stock, categoria_id) VALUES
('Laptop', 1200.00, 50, 1),
('Smartphone', 600.00, 100, 2),
('Impresora', 200.00, 20, 3);
MariaDB [prueba_db]> CREATE TABLE IF NOT EXISTS pedidos (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario_id INT,
producto_id INT,
cantidad INT,
fecha_pedido DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
FOREIGN KEY (producto_id) REFERENCES productos(id)
);
MariaDB [prueba_db]> INSERT INTO pedidos (usuario_id, producto_id, cantidad, fecha_pedido) VALUES
(1, 1, 2, '2023-01-01'),
(2, 2, 1, '2023-02-01'),
(3, 3, 3, '2023-03-01');
MariaDB [prueba_db]> exit;
Una vez creada la base de datos de prueba, detenemos el servicio de mariadb en los 3 nodos.
root@mariadb-galera1:~# systemctl stop mariadb
Ahora tenemos que configurar el clúster galera. Para ello, vamos a editar el archivo ‘/etc/mysql/mariadb.conf.d/60-galera.cnf’ en los 3 nodos.
root@mariadb-galera1:~# nano /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://192.168.50.50,192.168.50.36,192.168.50.12
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=192.168.50.50
- wsrep_on: Habilita el clúster galera.
- wsrep_cluster_name: Nombre del clúster galera.
- wsrep_provider: Ubicación del proveedor galera.
- wsrep_cluster_address: Dirección IP de los nodos del clúster galera.
- binlog_format: Formato de registro binario.
- default_storage_engine: Motor de almacenamiento por defecto.
- innodb_autoinc_lock_mode: Modo de bloqueo de autoincremento.
- bind-address: Interfaz de red con acceso al clúster galera.
- wsrep_node_address: Dirección IP del nodo.
Guardamos los cambios y ejecutamos el siguiente comando solo en el nodo 1 para crear el clúster galera.
root@mariadb-galera1:~# galera_new_cluster
Inicializamos el servicio de mariadb en todos los nodos.
root@mariadb-galera1:~# systemctl start mariadb
Comprobacion
Lo primero que vamos a comprobar es si el clúster galera detecta los 3 nodos.
Accedemos a la consola de mysql en el nodo 1.
root@mariadb-galera1:~# mysql -u root -p
Como podemos ver, el clúster galera ha detectado los 3 nodos.
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0,001 sec)
Ahora en otro nodo distinto al nodo 1, vamos a comprobar si se ha sincronizado la base de datos de prueba.
root@mariadb-galera2:~# mysql -u root -p
Como podemos ver, la base de datos de prueba se ha sincronizado sin problemas.
MariaDB [prueba_db]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| prueba_db |
| sys |
+--------------------+
5 rows in set (0.000 sec)
MariaDB [prueba_db]> use prueba_db;
Database changed
MariaDB [prueba_db]> show tables;
+---------------------+
| Tables_in_prueba_db |
+---------------------+
| categorias |
| pedidos |
| productos |
| usuarios |
+---------------------+
4 rows in set (0.000 sec)
En caso de error por reinicio del clúster
En caso de que se apagen los suficientes nodos para que el clúster galera se caiga, tendremos que seguir los siguientes pasos para volver a levantarlo.
Detenemos el servicio de mariadb en los 3 nodos.
root@mariadb-galera1:~# systemctl stop mariadb
Ahora tenemos que ejecutar el siguiente comando en todos los nodos para actualizar el fichero ‘/var/lib/mysql/grastate.dat’.
root@mariadb-galera1:~# galera_recovery
Una vez ejecutado el comando, modificamos el fichero ‘/var/lib/mysql/grastate.dat’ en los 3 nodos y cambiamos el valor de safe_to_bootstrap a 1.
root@mariadb-galera1:~# nano /var/lib/mysql/grastate.dat
safe_to_bootstrap: 1
Después de modificar el fichero, ejecutamos el siguiente comando solo en el nodo 1 para volver a crear el clúster galera.
root@mariadb-galera1:~# galera_new_cluster
Inicializamos el servicio de mariadb en todos los nodos y el clúster galera volverá a funcionar correctamente.
root@mariadb-galera1:~# systemctl start mariadb
Con esto ya tendríamos nuestro clúster mariadb galera funcionando correctamente en Debian 12.