jueves, 18 de junio de 2015

Configurar replicación Master-Master #MySQL

Configurando la replicación de master a master.

La replicación es un proceso de pasar la información de una base de datos de un servidor y se copia a otra base de datos a un segundo servidor.

Normalmente configuramos la replicación en espejo (master-slave), para tener un plan de contingencia ante una eventualidad donde podamos poner un servidor esclavo(slave) como master(maestro).

¿Para qué?

  • Permitir la escalibilidad de las aplicaciones.
  • Distribuir las cargas en dos servidores.
  • Redundancia e incrementar la eficiencia.


PASO 1: Instalar y configurar MySQL en el servidor 1

sudo apt-get install mysql-server mysql-client
Editar el archivo /etc/mysql/my.cnf y modificar los valores de las siguientes variables:
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log #binlog_do_db = include_database_name bind-address = 127.0.0.1
server-id es un identificador único por servidor.
log_bin nombre de archivo donde se guardaran los logs.
bin_log_do_db nombre de la o las base de datos a replicar.
bind-address las ips donde se podrán o no conectar al servidor MySQL.

Debería quedar así:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = basedatos_prueba
# bind-address            = 127.0.0.1
Ahora reiniciamos el servicio mysql.

sudo service mysql restart
Entramos a la consola con usuario root, nos pedirá la contraseña:

mysql -u root -p 
Ejecutaremos unas consultas, crearemos usuario para que se ejecute la replicación entre los servidores.

create user 'replicator'@'%' identified by 'password'; 
Otorgamos los derechos al usuario a las base de datos.

grant replication slave on *.* to 'replicator'@'%'; 
Finalmente obtener información del servidor configurado para despues ser utilizada (GUARDAR LOS DATOS EXTRAIDOS)

show master status; 
La salida similar a esta:

+------------------+----------+----------------+------------------+
| File             | Position | Binlog_Do_DB   | Binlog_Ignore_DB |
+------------------+----------+----------------+------------------+
| mysql-bin.000001 |      59 | basedatos_prueba|                  |
+------------------+----------+----------------+------------------+
1 row in set (0.00 sec)
PASO 2: Instalar y configurar MySQL en el servidor 2

sudo apt-get install mysql-server mysql-client
Editar el archivo /etc/mysql/my.cnf y AHORA cambiaremos el id, por otro numero único:
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log #binlog_do_db = include_database_name bind-address = 127.0.0.1
Debería quedar así:

server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = basedatos_prueba
# bind-address            = 127.0.0.1
Después de cambiar el archivo reiniciamos el servicio mysql.

sudo service mysql restart
Entramos a la consola con usuario root, nos pedirá la contraseña:

mysql -u root -p 
Crearemos usuario para que se ejecute la replicación entre los servidores.

create user 'replicator'@'%' identified by 'password'; 
Creamos la base de datos que queremos replicar, si ya existe se omite el paso.

create database basedatos_prueba; 
Otorgamos los derechos al usuario a las base de datos.

grant replication slave on *.* to 'replicator'@'%'; 
El siguiente paso permitirá comenzar con la replica de los datos, detenemos el espejo, configuramos con la información que extrajimos con anterioridad con el comando "show master status"

slave stop; 
CHANGE MASTER TO MASTER_HOST = '3.3.3.3', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 54; 
slave start; 
Necesitamos remplazar la contraseña por la que elegimos anteriormente cuando se creo el usuario y se dio derechos.


Lo ultimo que tenemos que realizar es obtener los datos del master (segundo servidor) para realizar la sincronización en el sentido contrario.

SHOW MASTER STATUS; 
La salida será similar a esta:

+------------------+----------+-----------------+------------------+
| File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB |
+------------------+----------+-----------------+------------------+
| mysql-bin.000004 |      125 | basedatos_prueba|                  |
+------------------+----------+-----------------+------------------+
1 row in set (0.00 sec)
Guardamos los datos nuevamente, para aplicarlos en el primer servidor y que la replicación sea en ambos sentidos.

PASO 3:  Configuración del regreso de la replicación

En el primer servidor, ejecutar lo siguiente en la linea de comandos.

 
slave stop; 
CHANGE MASTER TO MASTER_HOST = '4.4.4.4', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 125; 
slave start; 
PASO 4: Probar la replicación

Si no existiera la base de datos configurada:

create database basedatos_prueba; 
Se crea la tabla en el primer servidor.

CREATE TABLE basedatos_prueba.ejemplo (`id` integer(10)); 
Revisamos en el segundo servidor que exista la tabla (comprobar que se replico):

SHOW TABLES IN basedatos_prueba; 
En ese mismo segundo servidor eliminamos la tabla:

DROP TABLE basedatos_prueba.ejemplo; 
Y comprobamos que no exista en el primer servidor.




Nota: Tener cuidado al realizar este tipo de replicación cuando se tengan estructuras de tabla donde existan campos que sean auto_increment.
















No hay comentarios.:

Publicar un comentario