Replicación maestro-esclavo de MySQL (4): la construcción de la arquitectura de replicación en cascada

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:
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí

4. Maestro-maestro con esclavos con servidor esclavo

La arquitectura de replicación maestro-maestro con servidores esclavos se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

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)

Supongo que te gusta

Origin blog.csdn.net/weixin_44377973/article/details/107145637
Recomendado
Clasificación