Cómo configurar la replicación maestro-maestro de MariaDB en Debian 11
Este tutorial repasará cómo configurar la Replicación Maestro-Maestro de MariaDB en servidores Debian 11. Además, repasaremos cómo sincronizar la hora mediante Chrony entre servidores MariaDB.
Requisitos previos
Para completar este tutorial, necesitarás los siguientes requisitos:
- Dos o más servidores Debian 11. En esta demostración se han utilizado dos servidores Debian.
- Un usuario no root con privilegios de root/administrador.
Configurar el archivo fqdn y /etc/hosts
Para configurar el Master-Master de MariaDB entre varios servidores, tendrás que asegurarte de que cada nombre de host del sistema se resuelve con la dirección IP correcta. Para configurarlo, necesitas configurar el fqdn y el archivo /etc/hosts en cada servidor.
En esta demostración, utilizaremos dos servidores de Debian que aparecen a continuación:
IP Address Hostname FQDN
---------------------------------------------------
192.168.5.10 master1 master1.localdomain.io
192.168.5.11 master2 master2.localdomain.io
Para configurar el fqdn (nombre de dominio totalmente cualificado) correcto, ejecuta el comando hostnamectl que aparece a continuación.
Configura el fqdn para el servidor«master1».
sudo hostnamectl set-hostname master1.localdomain.io
Configura el fqdn para el servidor«master2″.
sudo hostnamectl set-hostname master2.localdomain.io
A continuación, edita el archivo /etc/hosts de cada servidor con el siguiente comando.
sudo nano /etc/hosts
Añade la siguiente configuración al archivo.
192.168.5.10 master1.localdomain.io master1
192.168.5.11 master2.localdomain.io master2
Guarda y cierra el archivo cuando hayas terminado.
Por último, ejecuta el siguiente comando«ping» para comprobar y verificar el fqdn y el archivo /etc/hosts.
Ahora deberías ver que el nombre de host «master1» apunta al fqdn«master1.localdomain.io» con la dirección IP«192.168.5.10«. Y el nombre de host «maestro2» apuntará a la fqdn «maestro2.dominiolocal.io» con la dirección IP «192.168.5.11″.
ping master1
ping master2
Sincronización de la hora con Chrony
La sincronización de la hora para el despliegue de la Replicación Maestro-Maestro de MariaDB es crucial. Y para sincronizar la hora entre servidores, tendrás que configurar Chrony como cliente NTP en cada servidor MariaDB.
Para instalar el paquete Chrony, ejecuta el siguiente comando«apt install«. Introduce Y para confirmar la instalación y pulsa ENTER, y la instalación comenzará.
sudo apt install chrony
Una vez terminada la instalación, ejecuta el siguiente comando «systemctl» para iniciar y habilitar el servicio Chrony.
sudo systemctl start chrony
sudo systemctl enable chrony
Ahora comprueba y verifica el servicio Chrony con el siguiente comando. Deberías ver que el servicio Chrony se está ejecutando. Además, verás que el servicio Chrony está«habilitado«, lo que significa que se ejecutará automáticamente al arrancar el sistema.
sudo systemctl status chronyd
A continuación, ejecuta el comando «timedatectl» que aparece a continuación para ajustar la hora de tu sistema con la zona horaria específica y habilitarlo para que utilice el servicio NTP Chrony.
sudo timedatectl set-timezone Europe/Stockholm --adjust-system-clock
sudo timedatectl set-ntp yes
Por último, ejecuta el comando «timedatectl» que aparece a continuación para comprobar y verificar la configuración actual del reloj y la hora de tu sistema. Asegúrate de que la hora está sincronizada entre todos los servidores MariaDB.
timedatectl
Instalación del servidor MariaDB
El repositorio de Debian por defecto proporciona el paquete del servidor MariaDB. Pero, para esta demostración, instalaremos el servidor MariaDB desde el repositorio oficial de MariaDB.
Antes de instalar el servidor MariaDB, ejecuta el siguiente comando«apt install» para instalar algunas dependencias básicas de los paquetes. Introduce Y para confirmar la instalación y pulsa ENTER para continuar.
sudo apt install gnupg2 apt-transport-https software-properties-common
A continuación, ejecuta el siguiente comando para importar la clave GPG del repositorio de MariaDB. La huella digital completa de la clave es«1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB«.
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Ahora ejecuta el siguiente comando para añadir el repositorio de MariaDB para el servidor de Debian 11. A continuación, actualiza y refresca el índice de paquetes en tus servidores.
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.8.3/debian bullseye main'
sudo apt update
Para instalar el paquete«mariadb-server«, ejecuta el siguiente comando«apt install«. Introduce Y para confirmar y pulsa ENTER, y la instalación comenzará.
sudo apt install mariadb-server
En el sistema Debian, el servicio MariaDB se iniciará y activará automáticamente. Ejecuta el siguiente comando«systemctl» para comprobar y verificar el servicio MariaDB.
Deberías ver que el servicio MariaDB está«habilitado«, lo que significa que se ejecutará automáticamente al arrancar el sistema. Y el estado actual del servicio MariaDB es «en ejecución«.
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb
Configurar el cortafuegos UFW
Se recomienda utilizar el cortafuegos entre todos tus servidores MariaDB. Esto garantizará que sólo las direcciones IP o redes permitidas puedan acceder y alcanzar los puertos del servicio MariaDB. Y en esta demostración, utilizaremos el cortafuegos UFW.
Ejecuta el siguiente comando «apt install» para instalar el paquete«ufw«. Introduce Y para confirmar la instalación y pulsa ENTER para continuar.
sudo apt install ufw
Una vez finalizada la instalación, ejecuta el comando «ufw» que aparece a continuación para añadir el perfil de la aplicación«OpenSSH«. A continuación, ejecuta y activa el servicio de cortafuegos UFW.
Se te pedirá que confirmes y habilites el cortafuegos UFW, introduce «y» y pulsa ENTER. Y el cortafuegos UFW ya está en marcha.
sudo ufw allow "OpenSSH"
sudo ufw enable
A continuación, abre algunos puertos para la implementación de la Replicación Maestra de MariaDB. Algunos puertos TCP para el despliegue de la Replicación de MariaDB son«3306«,«4567«,«4568» y«4444«.
En este ejemplo, sólo las redes«192.168.5.0/24» podrán acceder a los puertos TCP del servidor MariaDB.
Para el servidor«master1″ con la dirección IP«192.168.5.10″, ejecuta los siguientes comandos«ufw«.
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4444 proto tcp
Para el servidor«master2″ con dirección IP «192.168.5.11″, ejecuta los siguientes comandos «ufw«.
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4444 proto tcp
Por último, comprueba y verifica el estado del cortafuegos UFW con todas las reglas activadas mediante el siguiente comando. Deberías ver el perfil de la aplicación «OpenSSH» con todos los puertos de replicación de MariaDB«3306»,«4567«,«4568» y«4444» disponibles en el cortafuegos UFW.
sudo ufw status
Configuración del servidor MariaDB master1
Has completado la configuración básica del servidor Debian para la implantación de la Replicación Maestro-Maestro de MariaDB. Ahora, vamos a empezar a configurar los servidores MariaDB.
En primer lugar, vas a configurar el servidor MariaDB en el servidor«master1″. Accede al shell del servidor «master1«.
Ejecuta el siguiente comando«systemctl» para detener el servicio MariaDB. Esto es necesario antes de configurar el servidor MariaDB.
sudo systemctl stop mariadb
Ahora edita el archivo de configuración del servidor MariaDB«/etc/mysql/mariadb.conf.d/50-server.cnf» utilizando el siguiente comando.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Cambia la«listen-address» por defecto por la dirección IP interna. En este ejemplo, el servidor«master1» tiene una dirección IP«192.168.5.10«. A continuación, activa el«binary_log» para el servidor MariaDB, esto te permite configurar la replicación en el servidor MariaDB. Asegúrate de colocar la siguiente configuración en la opción «[mysqld]».
[mysqld]
bind-address = 192.168.5.10
server-id = 1
report_host = master1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
Guarda y cierra el archivo cuando hayas terminado.
A continuación, ejecuta el comando«systemctl» que aparece a continuación para iniciar el servicio MariaDB y aplicar los nuevos cambios. A continuación, comprueba y verifica qué dirección IP está ejecutando MariaDB. Deberías ver que el servicio MariaDB se está ejecutando ahora en la dirección IP interna«192.168.5.10«.
sudo systemctl start mariadb
ss -plnt
Ahora tendrás que crear un nuevo usuario de MariaDB que se utilizará para replicar los datos entre los servidores de MariaDB. Accede al shell de MariaDB como«root» utilizando el comando«mysql» que aparece a continuación.
sudo mysql -u root -p
Ejecuta las siguientes consultas para crear un nuevo usuario MariaDB y la contraseña«replusr«. A continuación, concede los privilegios correctos al usuario.
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;
A continuación, ejecuta la siguiente consulta para comprobar el registro binario actual y su posición exacta. En este ejemplo, el archivo de registro binario del servidor MariaDB es«mariadb-bin.000001» con la posición«773«. Estas salidas se utilizarán en la siguiente fase para configurar el servidor«master2«.
SHOW MASTER STATUS;
Escribe«quit» para salir del shell de MariaDB.
Configuración del servidor MariaDB master2
Ahora pasa al servidor «master2» y empieza a configurar el servidor MariaDB. La configuración de la Replicación Maestro-Maestro de MariaDB no es especialmente diferente para todos los servidores MariaDB.
Ejecuta el siguiente comando para detener el servicio de MariaDB.
sudo systemctl stop mariadb
Edita el archivo de configuración de MariaDB«/etc/mysql/mariadb.conf.d/50-server.cnf» con el siguiente comando.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Cambia la«dirección binaria» por la dirección IP local del servidor«master2«. A continuación, habilita el registro binario en el servidor MariaDB«master2″ para activar la replicación. Asegúrate de añadir la siguiente configuración en la opción «[mysqld]«.
[mysqld]
bind-address = 192.168.5.11
server-id = 2
report_host = master2
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
Guarda y cierra el archivo cuando hayas terminado.
A continuación, inicia el servicio MariaDB para aplicar los nuevos cambios. A continuación, comprueba y verifica la dirección IP actual en la que se ejecuta el servidor MariaDB. Si tu configuración es correcta, verás que el servidor MariaDB no se está ejecutando en la dirección IP interna del servidor«master2«, que es «192.168.5.11».
sudo systemctl start mariadb
ss -plnt
Una vez que el servicio MariaDB esté funcionando, ejecuta el siguiente comando para entrar en el shell de MariaDB como usuario«root».
sudo mysql -u root -p
Ejecuta las siguientes consultas para crear un nuevo usuario MariaDB que se utilizará para replicar los datos entre todos los servidores MariaDB. Este usuario debe coincidir con el que acabas de crear en el servidor «master1».
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;
Después, tendrás que hacer cambios en el servidor «master2» de MariaDB y definir el nodo«maestro» utilizando la configuración detallada del servidor«master1» de MariaDB.
Ejecuta las siguientes consultas para detener el esclavo. A continuación, añade información detallada sobre el servidor MariaDB «maestro1». En este ejemplo, el servidor MariaDB «master1» utiliza el nombre de host«master1«, el usuario y la contraseña para la replicación de datos es«replusr» y, por último, el archivo binlog es«mariadb-bin.000001» con la posición«773«.
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;
Ahora inicia de nuevo el esclavo utilizando la siguiente consulta. A continuación, comprueba y verifica el estado del esclavo en el servidor«maestro2«. Si obtienes resultados como «Esclavo_IO_Ejecución: Sí» y «Ejecución_SQL_esclavo: Sí«, significa que la replicación de MariaDB está activa y en funcionamiento. Además, puedes ver que el archivo de registro binario del servidor «maestro2» es «mariadb-bin.000001» con la posición «773«, que debería ser la misma que en el servidor «maestro1«. Además, puedes ver que el valor de MariaDB «Host_maestro» es «maestro1«.
START SLAVE;
SHOW SLAVE STATUS\G
También puedes verificar el archivo de registro binario maestro y la posición en el servidor«maestro2″ mediante la siguiente consulta. Y deberías obtener la misma salida del archivo de registro binario«mariadb-bin.000001» con la posición«773» que en el servidor«master1″.
SHOW MASTER STATUS;
Iniciar la replicación maestro-maestro en el servidor MariaDB maestro1
Como esta guía es para configurar la Replicación maestro-maestro de MariaDB, entonces también tienes que añadir y definir la configuración detallada de «maestro2» en el servidor «maestro1«.
Vuelve al servidor«maestro1″ y entra en el shell de MariaDB utilizando el comando«mysql» que aparece a continuación.
sudo mysql -u root -p
Detén el esclavo utilizando el siguiente comando. A continuación, añade la información detallada del servidor «master2«, que incluye el nombre de host del servidor «master2«, el usuario y la contraseña de MariaDB para la replicación, y el archivo de registro binario y su posición.
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;
Ahora arranca de nuevo el esclavo utilizando el siguiente comando. A continuación, comprueba y verifica el esclavo en el servidor «maestro1» del servidor. Y deberías ver la salida como «Esclavo_IO_Ejecución: Sí» y «Esclavo_SQL_Ejecución: Sí«, lo que significa que la replicación de MariaDB está activa y funcionando en el servidor «maestro1» servidor MariaDB. Además, puedes ver que el valor «Maestro_Host» es el servidor «maestro2» del servidor.
START SLAVE;
SHOW SLAVE STATUS\G
Probar la replicación de la base de datos
Para verificar la replicación maestro-maestro de MariaDB, crea una nueva base de datos en el servidor «maestro1» e introduce algunos datos en ella. A continuación, inicia sesión en el «maestro2» y verifica la base de datos, e introduce otros datos en ella.
Ve al servidor«master1″ y entra en el shell de MariaDB como usuario root con el siguiente comando.
sudo mysql -u root -p
Crea una nueva base de datos «testdb» utilizando la siguiente consulta.
CREATE DATABASE testdb;
USE testdb;
Ahora crea algunas tablas en la base de datos «testdb» utilizando la siguiente consulta.
CREATE TABLE users (id INT AUTO_INCREMENT,
firstname VARCHAR(30),
lastname VARCHAR(30),
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id));
Después, inserta algunos datos en la«testdb» utilizando la siguiente consulta MariaDB.
INSERT INTO users(firstname,lastname) VALUES ('Alice','Wonders');
Para comprobar tus datos en el servidor MariaDB, utiliza la consulta«SELECT» como se indica a continuación. Y deberías ver los datos que acabas de insertar.
SELECT * FROM users;
A continuación, pasa al servidor«master2» y entra en el shell de MariaDB utilizando el comando«mysql» que aparece a continuación.
sudo mysql -u root -p
Comprueba y verifica la lista de bases de datos en el servidor«master2″ utilizando la siguiente consulta. Y deberías obtener la base de datos«testdb» que acabas de crear.
SHOW DATABASES;
USE testdb;
A continuación, inserta otros datos en la base de datos «testdb» desde el servidor«master2″. A continuación, comprueba y verifica los datos mediante la consulta«SELECT«. Y deberías obtener los nuevos datos insertados desde el servidor«master2″.
INSERT INTO users(firstname,lastname) VALUES ('Bob','Burgers');
SELECT * FROM users;
Ahora vuelve al «maestro1» para comprobar y verificar los nuevos datos que acabas de insertar desde el servidor «maestro2». Ejecuta la siguiente consulta para comprobar los nuevos datos del servidor «master1«. Y deberías ver que los nuevos datos que acabas de insertar desde el servidor «maestro2» se replican en el servidor «maestro1«.
select @@hostname;
SELECT * FROM users;
Conclusión
¡Enhorabuena! Ya has desplegado con éxito la Replicación Maestro-Maestro de MariaDB en los servidores de Debian 11. También has configurado la sincronización horaria en los servidores MariaDB mediante el servicio Chrony. Además, también has asegurado el despliegue del servidor MariaDB utilizando el cortafuegos UFW. Al final, tienes un servidor MariaDB con replicación automática entre dos servidores MariaDB, puedes escribir en todos esos servidores MariaDB y todos los datos se replicarán automáticamente.