Sitio para la difusión de conocimiento informático. 

Twitter RSS

MySQL – Replicación Master/Master

Cluster MySQL:

Un cluster mysql es una arquitectura compleja en la que se lograr una alta disponibilidad y rendimiento. Una de las ventajas del Cluster MySQL  es que cada nodo es un par de los otros, mientras que en un sistema de replicación normal, usted tiene un maestro y varios esclavos, y las solicitudes deben tener cuidado de escribir sólo para el maestro. Hay algunos casos en que el MySQL Cluster es la solución perfecta, pero para la gran mayoría, la replicación sigue siendo la mejor opción.

Uso de las características introducidas en MySQL 5,0 y 5,1, es que es posible construir un sistema de replicación, donde todos los nodos actúan como maestro y esclavo, al mismo tiempo, con un sistema incorporado en el mecanismo de conmutación por error.

Configuración de un sistema de replicación Multimaster:

Un problema difícil de resolver en un entorno de replicación multimaestro, es el conflicto que puede suceder con las auto-claves generadas. La característica AUTO_INCREMENT es muy conveniente, pero en un entorno de replicación será perjudicial. Si el nodo A y el nodo B insertan una clave de incremento automático en la misma tabla, los conflictos surgen de inmediato. MySQL 5 introduce un par de variables para replicar el auto-incremento que abordan este problema específico y permitir la creación de una matriz de nodos peer-to-peer con la replicación de MySQL.

Citando el manual:

auto_increment_increment controla el incremento entre los sucesivos valores AUTO_INCREMENT.
auto_increment_offset determina el punto de partida para los valores de columna AUTO_INCREMENT.

Para configurar servidores maestros establezca las variables de esta manera:
– Establecer auto_increment_increment a «N» en cada master.
– Ajuste cada uno de los maestros de «N» para tener una auto_increment_offset diferente, usando los valores 1, 2, … , N.

Con esas dos variables que se describen en el manual, puede asegurarse de que todos los nodos de la matriz de replicación utilizan diferentes números de secuencias de incrementación automática. Por ejemplo, usando auto_increment_increment = 10 y auto_increment_offset = 3, los números generados al insertar tres registros será 3, 13, 23. Con 10, 7, obtendrás 7, 17, 27, y así sucesivamente. De esta forma se establece el valor de la variable auto_increment_increment a 10 para cada nodo, y auto_increment_offset a 1 en el primer nodo, 2 en la segunda, y así sucesivamente.

Esta teoría es clara, pero para que quede claro cómo se transforman estos servidores en los nodos peer-to-peer, la respuesta es una repetición circular, donde cada nodo es el maestro del nodo siguiente y esclavo de la anterior.

 

Replicación circular con dos nodos:

En su forma más simple, la replicación circular tiene dos nodos, donde cada uno es maestro en el mismo tiempo y esclavo del otro.

1) Creamos los usuarios utilizados para la replicación de las bases de datos:
GRANT REPLICATION SLAVE ON *.* TO ‘rep-user’@’%’ IDENTIFIED BY ‘password’; FLUSH PRIVILEGES;
2) Editamos el archivo de configuración de MySQL «/etc/my.cnf» y comentamos las siguientes líneas si están descomentadas:
#skip-networking
#bind-address            = 127.0.0.1

3) Editamos el archivo de configuración de MySQL «/etc/my.cnf» y modificamos las siguientes líneas:

# Nodo A - (agua) setup
[mysqld]
server-id                       = 10
 auto_increment_increment      = 10
 auto_increment_offset         = 1
master-host                     = aire.stardata.org
master-user     = rep-user 
master-password = password 
master-port     = 3306
master-connect-retry = 60
# Indicamos las bases de datos a replicar:
replicate-do-db = mydatabase
innodb_lock_wait_timeout = 5
innodb_flush_log_at_trx_commit = 1
# En caso de detectar un error durante la replicación lo podemos saltar de la sigueiente forma:
slave-skip-errors = 1062

# Nodo B - (aire) setup
[mysqld]
server-id                       = 20
 auto_increment_increment      = 10
 auto_increment_offset         = 2
master-host                     = agua.stardata.org
master-user     = rep-user 
master-password = password
master-port     = 3306
master-connect-retry = 60
# Indicamos las bases de datos a replicar:
replicate-do-db = mydatabase
innodb_lock_wait_timeout = 5
innodb_flush_log_at_trx_commit = 1
# En caso de detectar un error durante la replicación lo podemos saltar de la sigueiente forma:
slave-skip-errors = 1062

4) Reiniciamos el servicio de MySQL para que los cambios tengan efecto.

5) Ejecutamos los siguientes comandos en cada nodo:

En el Nodo A:
mysql -u root -p
Enter password:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='aire.stardata.org', MASTER_USER='repuser', MASTER_PASSWORD='<password>';
Slave Start; 
Quit

En Nodo B:
mysql -u root -p
Enter password:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='agua.stardata.org', MASTER_USER='repuser', MASTER_PASSWORD='<password>';
Slave Start; 
Quit

Finalizado el paso 5 comenzará la replicación de nuestra base de datos.
 
Home Linux OS MySQL MySQL – Replicación Master/Master