Replicación maestro-esclavo de MySQL (4): la construcción de la arquitectura de replicación en cascada
Las capacidades de replicación de MySQL son la base para la creación de aplicaciones grandes y de alto rendimiento. Distribuir datos MySQL a múltiples sistemas Este mecanismo de distribución se realiza copiando los datos de un determinado maestro MySQL (maestro) a otros maestros (esclavos) y ejecutándolo nuevamente. Durante el proceso de replicación, un servidor actúa como servidor maestro y uno o más servidores actúan como servidores esclavos.
Uno, la arquitectura de replicación maestro-esclavo comúnmente utilizada por MySQL
La arquitectura de replicación debe seguir los siguientes principios básicos:
(1) Cada esclavo solo puede tener un maestro;
(2) Cada esclavo tiene una ID de servidor única (ID de servidor);
(3) Cada maestro puede tener uno o Muchos esclavos;
(4) Al configurar log_slave_updates, un esclavo puede convertirse en el maestro de otros esclavos.
La arquitectura de replicación maestro-esclavo comúnmente utilizada de MySQL es la siguiente:
1. Un maestro y un esclavo o un maestro y varios esclavos
Una arquitectura de replicación maestro-esclavo es un sistema de replicación compuesto por un maestro y un esclavo. La arquitectura de replicación de un maestro y varios esclavos se compone de un maestro y varios esclavos. Los esclavos no se comunican entre sí, sino que solo pueden comunicarse con el maestro. En escenarios de aplicaciones reales, más del 90% de la replicación de MySQL es un patrón de arquitectura en el que un maestro se replica en uno o más esclavos, que se utiliza principalmente para aplicaciones con alta presión de lectura. La arquitectura de replicación de un maestro y varios esclavos se muestra en la siguiente figura:
Esta estructura es adecuada para menos operaciones de escritura y muchas operaciones de lectura. La operación de lectura se puede distribuir a otros esclavos, reduciendo así la presión sobre el maestro. Sin embargo, cuando el esclavo aumenta a un cierto número, la carga del esclavo en el maestro y el ancho de banda de la red se convertirán en el cuello de botella.
Las ventajas de esta estructura son: simple, flexible y capaz de satisfacer las necesidades de la mayoría de aplicaciones.
2. Replicación de master master (master-master)
Los dos servidores de la arquitectura de replicación maestro-maestro son tanto el maestro como el esclavo del otro servidor. De esta manera, los cambios realizados por cualquiera de las partes se replicarán en la base de datos de la otra parte. La arquitectura de replicación maestro-maestro se muestra en la siguiente figura:
El mayor problema con la arquitectura de replicación maestro-maestro son los conflictos de actualización. Suponiendo que una tabla tiene solo una fila y una columna de datos, su valor es 1. Si dos servidores ejecutan las siguientes declaraciones
al mismo tiempo: ejecutar en el primer servidor:
mysql> UPDATE tbl SET col = col + 1;
ejecutar en el segundo servidor :
Mysql> UPDATE tbl SET col = col * 2;
Entonces , ¿cuál es el resultado? Un servidor es 4 y el otro servidor es 3. Sin embargo, esto no produce un error.
3. Arquitectura de replicación en cascada (maestro-esclavo-esclavo)
En algunos escenarios de aplicación, la presión de lectura y escritura puede ser bastante diferente, y la presión de lectura es particularmente alta. Un Maestro puede necesitar 10 o más esclavos para soportar la presión de lectura. En este momento, el maestro será más extenuante, porque hay más subprocesos de E / S esclavos conectados solo, por lo que cuando la presión de escritura es ligeramente mayor, el maestro consumirá más recursos debido a la replicación, lo que fácilmente puede causar retrasos en la replicación. Hora.
En este caso, podemos utilizar MySQL para registrar la información del Registro Binario de los cambios generados por la replicación en el lado Esclavo, es decir, activar la opción de actualización de registro-esclavo. Luego, la replicación secundaria se usa para reducir la presión en el lado maestro debido a la replicación. La arquitectura de replicación en cascada se muestra en la siguiente figura:
4. Maestro-maestro con esclavos con servidor esclavo
La arquitectura de replicación maestro-maestro con servidores esclavos se muestra en la siguiente figura:
En segundo lugar, la construcción de una arquitectura de replicación en cascada
1. Entorno del sistema
Versión de MySQL: MySQL5.7
Versión de Linux: CentOS7.0
Dirección maestra: 192.168.1.11
La dirección de la base de datos esclava (esclava, que sirve como maestra de 13): 192.168.1.12
Dirección esclava: 192.168.1.13
2. La construcción maestro-esclavo entre 192.168.1.11 y 192.168.1.12
Consulte el artículo anterior: Replicación maestro-esclavo de MySQL (2): la construcción de una arquitectura maestro-esclavo (https://blog.csdn.net/weixin_44377973/article/details/107136733).
3. Construcción maestro-esclavo entre 192.168.1.12 y 192.168.1.13
1. Configure el servidor 192.168.1.12
(1) Agregue el siguiente contenido en el archivo de configuración
[mysqld]
log-bin=mysql-bin
logbin_format=mixed
#### 把relay log中的记录写入binlog日志
log_slave_updates=1
(2) Cree un usuario de copia
mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,authentication_string from mysql.user;
+-------------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-------------+---------------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | wgx | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 192.168.1.% | repl | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+---------------+-------------------------------------------+
5 rows in set (0.02 sec)
(3) Exporte los datos en la base de datos y registre el archivo de registro y la ubicación
Paso 1. Antes de exportar la base de datos, bloquee la base de datos para evitar cualquier operación de escritura en la base de datos.
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)
mysql> use hist;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop table t1;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
paso 2, exportar todos los datos de la base de datos en la biblioteca principal
[root@Mysql11 ~]# mysqldump -uroot -p123456 --all-databases --master-data=2 --events > /tmp/all_bak.sql
Paso 3, copie los datos de la base de datos maestra de respaldo a la base de datos esclava
[root@Mysql11 ~]# scp /tmp/all_bak.sql 192.168.1.13:/tmp/
[email protected]'s password:
all_bak.sql 100% 834KB 833.7KB/s 00:00
[root@Mysql11 ~]#
paso 4, desbloquear, ver información de registro binario
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 866214 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2. Configure el servidor 192.168.1.13
(1) Agregue el siguiente contenido en el archivo de configuración
[mysqld]
server-id=3
relay-log = mysql-relay-log
(2) Una vez completada la configuración, reinicie el servicio mysql y verifique la información del archivo de registro de retransmisión:
[root@localhost ~]# ll /var/lib/mysql/mysql-relay*
-rw-r-----. 1 mysql mysql 207 7月 5 21:31 /var/lib/mysql/mysql-relay-log.000001
-rw-r-----. 1 mysql mysql 320 7月 5 21:31 /var/lib/mysql/mysql-relay-log.000002
-rw-r-----. 1 mysql mysql 76 7月 5 21:31 /var/lib/mysql/mysql-relay-log.index
(3) Importe los datos en el servidor principal
[root@localhost ~]# mysql -uroot -p123456 < /tmp/all_bak.sql
(4) Configurar los parámetros de sincronización maestro-esclavo
Ejecute los siguientes comandos en el servidor esclavo:
change master to
master_host='192.168.1.12',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000005',
master_log_pos=866214;
(5) Abra el servicio desde la biblioteca (inicie subprocesos IO y SQL)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
(6) Ver el estado de la replicación maestro-esclavo
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.12
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 866214
Relay_Log_File: mysql-relay-log.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 866214
Relay_Log_Space: 527
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: 800e4f85-2e00-11ea-a7ce-000c29cd5d3e
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
En cuarto lugar, pruebe el estado de funcionamiento de la replicación maestro-esclavo
1. Cree una base de datos en el servidor 192.168.1.11, agregue una tabla e ingrese los datos
mysql> create database mydb;
Query OK, 1 row affected (0.04 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mydb |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
7 rows in set (0.00 sec)
mysql> use mydb;
Database changed
mysql> create table goods(id int primary key auto_increment,name char(20));
Query OK, 0 rows affected (0.28 sec)
mysql> insert into goods(name) values('mobile');
Query OK, 1 row affected (0.09 sec)
mysql> insert into goods(name) values('computer');
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> select * from goods;
+----+----------+
| id | name |
+----+----------+
| 1 | mobile |
| 2 | computer |
+----+----------+
2 rows in set (0.00 sec)
2. Ver los datos de la biblioteca esclava 192.168.1.12
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mydb |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
7 rows in set (0.00 sec)
mysql>
mysql> use mydb;
Database changed
mysql> select * from goods;
+----+----------+
| id | name |
+----+----------+
| 1 | mobile |
| 2 | computer |
+----+----------+
2 rows in set (0.00 sec)
3. Ver los datos de la biblioteca esclava 192.168.1.13
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mydb |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
7 rows in set (0.00 sec)
mysql> use mydb;
Database changed
mysql> select * from goods;
+----+----------+
| id | name |
+----+----------+
| 1 | mobile |
| 2 | computer |
+----+----------+
2 rows in set (0.00 sec)
4. Elimine mydb en 192.168.1.11
mysql> drop database mydb;
Query OK, 1 row affected (0.58 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
6 rows in set (0.00 sec)
5. Ver los datos en 192.168.1.12
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
6 rows in set (0.00 sec)
6. Ver los datos en 192.168.1.13
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hist |
| mysql |
| performance_schema |
| sys |
| wanggx |
+--------------------+
6 rows in set (0.00 sec)