La replicación en MariaDB consiste básicamente en copiar datos de una base de datos a otra, o incluso a varias, para que todo esté sincronizado, o al menos debería estarlo. Si alguna vez te has preguntado por qué tus datos no se muestran en los servidores o por qué tus copias de seguridad no se ejecutan, esta guía te ayudará. Configurar la replicación no siempre es sencillo, especialmente en CentOS 7, pero si se hace correctamente, puede simplificarte mucho la vida, ofreciéndote opciones de balanceo de carga y conmutación por error sin demasiados problemas. Una vez configurada, podrás crear o actualizar datos en un servidor principal y hacer que se propaguen automáticamente a las copias de seguridad u otros servidores maestros. Solo asegúrate de dominar los fundamentos para evitar los problemas clásicos, como problemas de firewall o configuraciones incompatibles. Puede que tengas que probar varias veces, pero esto debería ser una ventaja considerable para cualquiera que intente ejecutar una configuración resiliente de MariaDB.
Cómo solucionar problemas de replicación de MariaDB en CentOS 7
Configurar la replicación maestro-maestro: ¿por qué no casi siempre?
En algunas configuraciones, este tipo de sincronización flotante bidireccional puede resultar complicado, pero es muy útil para lograr alta disponibilidad. En esencia, ambos servidores pueden gestionar lecturas y escrituras, actuando como respaldo mutuo. La clave está en configurar correctamente el binlog y asegurarse de que cada servidor tenga su ID único. Si no lo hace, MariaDB se confunde rápidamente; créame. Esto es lo que debe hacer.
Método 1: Prepare ambos servidores maestros
- Abra /etc/my.cnf en cada servidor y agregue este fragmento (uno para Master-1, luego un server_id diferente para Master-2):
#replication server_id = 1 report_host = master log_bin = /var/lib/mysql/mariadb-bin log_bin_index = /var/lib/mysql/mariadb-bin.index relay_log = /var/lib/mysql/relay-bin relay_log_index = /var/lib/mysql/relay-bin.index
Asegúrese de hacer esto para el segundo servidor, pero cambie server_id a 2 y ajuste report_host en consecuencia, probablemente a su IP o nombre de host.
service mariadb restart
A veces, reiniciar ayuda, pero reiniciar suele ser suficiente. Después, cree un usuario dedicado para la replicación:
mysql -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'somepassword';" mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';"
SHOW MASTER STATUS\G
Algo como:
File: mariadb-bin.000002 Position: 664
Si tu maestro no muestra esta información, es posible que esos registros no estén habilitados, así que vuelve a verificar tu configuración.
Método 2: Conectar los maestros usando la información de Binlog
- Ahora, conéctese al segundo servidor y configure la replicación para que apunte al primero, usando la información de
SHOW MASTER STATUS. - En el segundo servidor, ejecute:
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='IP_of_Master1', MASTER_USER='repl_user', MASTER_PASSWORD='somepassword', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664; START SLAVE;
Esto establece el enlace de replicación. Repita el mismo proceso en el primer servidor, pero intercambiando la información maestra para que apunte al segundo servidor.
¿Cómo confirmar si la replicación está funcionando?
Una vez que ambos servidores reconozcan la conexión, es hora de realizar la prueba. Cree una nueva base de datos o tabla en Master-1:
CREATE DATABASE test_replication; USE test_replication; CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
Y comprueba si aparece automáticamente en Master-2. No te sorprendas si no aparece al instante; a veces se producen retrasos en la replicación, sobre todo si realizas escrituras intensivas. Si después de un tiempo sigue sin aparecer, revisa tus registros SHOW SLAVE STATUS\Gy busca errores como «Detenido» u otros problemas. Normalmente, los bloqueos del firewall son la causa; el puerto predeterminado 3306 de MariaDB debe estar abierto en cada nodo para que esto funcione correctamente.
Cómo configurar un sistema maestro-esclavo clásico
Este modo es el que la mayoría de la gente busca cuando dice «copia de seguridad de la base de datos» y «distribuir la carga de lectura».Se selecciona un servidor como escritor principal y uno o más como copias de solo lectura. La configuración para el esclavo es similar: se establece el mismo ID de servidor, se habilitan los registros binarios y se le indica la ubicación del maestro. No olvide configurarlo read_only=ONen el esclavo si no desea escrituras accidentales. Es recomendable realizar un volcado inicial de la base de datos para evitar errores en la configuración de my.cnf si se realiza una actualización o una sincronización inicial.
Básicamente, haces esto:
- Edite /etc/my.cnf en el esclavo: asegúrese de que server_id sea único y configure log_bin.
- Reinicie MariaDB y luego ejecute:
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='IP_of_Master', MASTER_USER='repl_user', MASTER_PASSWORD='somepassword', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664; START SLAVE;
SHOW SLAVE STATUS\G. Si Slave_IO_Running y Slave_SQL_Running son «Sí», todo está bien.Algunos problemas, como el bloqueo del puerto 3306 por parte de Firewalld en CentOS, son comunes. Necesitará abrir el puerto si desea una conexión externa; tenga en cuenta las reglas de iptables:
iptables -I INPUT -p tcp -s slave_ip --dport 3306 -j ACCEPT
Si está ejecutando firewalld, considere las reglas de firewalld o al menos deshabilítelo temporalmente durante la configuración (¡no se recomienda a largo plazo!).
Comprobando si todo funciona correctamente
Realiza un cambio en tu servidor maestro (por ejemplo, crea una base de datos, añade tablas o inserta datos) y luego revisa el servidor esclavo. Si aparecen los datos, ¡genial! Si no, la SHOW SLAVE STATUS\Gsalida te indicará qué falla: errores, desconexión o retraso. A veces, tendrás que reiniciar el servidor esclavo o corregir los permisos, sobre todo si ves que Last_Error está rellenado. En algunas máquinas, esta configuración falla la primera vez, pero funciona como por arte de magia tras reiniciar o corregir las reglas del firewall. Es un poco raro, pero así es CentOS.
Resumen
- Configure my.cnf correctamente con identificadores de servidor únicos y rutas de registro binario.
- Cree un usuario de replicación dedicado con los permisos adecuados.
- Obtenga la información binlog actual de los servidores maestros.
- Configure los comandos CHANGE MASTER TO con cuidado, apuntando a las IP y registros correctos.
- Verifique periódicamente el estado del esclavo y corrija los errores a medida que aparezcan.
- Abra el puerto 3306 en su firewall si las conexiones externas no funcionan.
Resumen
La replicación de MariaDB en CentOS 7 puede ser un poco complicada a veces, especialmente con firewalls y archivos de configuración. Pero si se configuran correctamente los elementos esenciales (ID de servidor, binlogs, permisos de usuario), es bastante fiable. A veces, las cosas no salen bien a la primera, especialmente con reglas de firewall o configuraciones incompatibles, pero una vez que funciona, los resultados valen la pena. Es posible que haya que probar y fallar; pero con paciencia, se obtendrá una configuración que no solo se respalda a sí misma, sino que también equilibra la carga y ofrece alta disponibilidad.