Conceptos básicos de MySQL (37) replicación maestro-esclavo

1. Descripción general de la replicación maestro-esclavo

1.1 Cómo mejorar las capacidades de concurrencia de la base de datos

Insertar descripción de la imagen aquí
Además, las aplicaciones generales son " 读多写少" para bases de datos, lo que significa que la presión sobre la base de datos para leer datos es relativamente alta. Una idea es utilizar una solución de clúster de base de datos para hacer 主从架构y ejecutar 读写分离, que también puede mejorar las capacidades de procesamiento concurrente de la base de datos. base de datos. Pero no todas las aplicaciones necesitan configurar una arquitectura maestro-esclavo para la base de datos, después de todo, configurar la arquitectura en sí es costoso.

Si nuestro propósito es mejorar la eficiencia del acceso altamente concurrente a la base de datos, entonces lo primero que debemos considerar es cómo 优化SQL和索引este método es simple y efectivo; el segundo es adoptar 缓存的策略, como usar Redis para guardar datos calientes en un base de datos de memoria para mejorar la eficiencia de la lectura; finalmente, la única forma de utilizar la base de datos 主从架构es separar la lectura y la escritura.

1.2 El papel de la replicación maestro-esclavo

El diseño de sincronización maestro-esclavo no solo puede mejorar el rendimiento de la base de datos, sino que también tiene los siguientes tres aspectos.
第1个作用:读写分离
Insertar descripción de la imagen aquí
第2个作用就是数据备份。
第3个作用是具有高可用性。

2. Principio de replicación maestro-esclavo

SlaveLa sincronización de datos se realizará desde Masterla lectura binlog.

2.1 Análisis de principios

三个线程
De hecho, el principio de sincronización maestro-esclavo se basa en binlog para la sincronización de datos. Durante el proceso de replicación maestro-esclavo, 3 个线程las operaciones se basarán en un subproceso de biblioteca principal y dos subprocesos de biblioteca esclava.
Insertar descripción de la imagen aquí
二进制日志转储线程(Subproceso de volcado de Binlog) es un subproceso de la biblioteca principal. Cuando el hilo de la biblioteca esclava está conectado, la biblioteca principal puede enviar el registro binario a la biblioteca esclava. Cuando la biblioteca principal lee el evento (Evento), estará en el Binlog. Una vez completada la lectura, se liberará el bloqueo. 加锁.

从库 I/O 线程Se conectará a la biblioteca principal y enviará una solicitud a la biblioteca principal para actualizar Binlog. En este momento, el subproceso de E/S de la biblioteca esclava puede leer la parte de actualización de Binlog enviada por el subproceso de volcado del registro binario de la biblioteca principal y copiarla al registro de retransmisión local (registro de retransmisión).

从库 SQL 线程Se leerá el registro de retransmisión en la biblioteca esclava y los eventos en el registro se ejecutarán para mantener los datos de la biblioteca esclava sincronizados con la biblioteca maestra.
Insertar descripción de la imagen aquí
复制三步骤

Paso 1: Masterregistrar operaciones de escritura en el registro binario ( binlog).

Paso 2: SlaveCopie Masterlos eventos del registro binario en su registro de retransmisión ( relay log);

Paso 3: Slaverehaga los eventos en el registro de retransmisión y aplique los cambios a su propia base de datos. La replicación de MySQL es asincrónica y serializada, y 接入点la replicación comienza después del reinicio.

复制的问题

El mayor problema con la replicación:延时

2.2 Principios básicos de replicación

  • Slavesolo uno de cadaMaster
  • Cada uno Slavesolo puede tener una ID de servidor única
  • Cada uno Masterpuede tener múltiplesSlave

3. Construcción de una arquitectura maestra y esclava.

Uno 主机se utiliza para procesar todo 写请求y el otro 从机es responsable de todo 读请求. El diagrama de arquitectura es el siguiente:
Insertar descripción de la imagen aquí

3.1 Preparación

1. Prepare 2台la máquina virtual CentOS
2. MySQL debe estar instalado en cada máquina virtual (puede ser MySQL8.0)

3.2 Archivo de configuración del host

Se recomienda que la versión de mysql sea consistente y se ejecute como un servicio en segundo plano.Todos los elementos de configuración del maestro y el esclavo se configuran bajo [mysqld]el nodo y todos están en letras minúsculas. La configuración de parámetros específicos es la siguiente:

  • requerido
#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,指名路径。比如:自己本地的路径/log/mysqlbin
log-bin=atguigu-bin
  • Opcional
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选]设置需要复制的数据库,默认全部记录。比如:binlog-do-db=atguigu_master_slave
binlog-do-db=需要复制的主数据库名字
#[可选]设置binlog格式
binlog_format=STATEMENT

binlog格式设置:
Formato 1: STATEMENT模式(replicación basada en sentencias SQL (SBR))

binlog_format=STATEMENT

Cada declaración SQL que modifique datos se registrará en el binlog. Este es el formato binlog predeterminado.

  • Ventajas de SBR:
    • Larga historia y tecnología madura
    • No es necesario registrar cambios en cada línea, lo que reduce la cantidad de registros binlog y hace que el archivo sea más pequeño.
    • El binlog contiene toda la información de cambios de la base de datos, que se puede utilizar para auditar la seguridad de la base de datos.
    • binlog se puede utilizar para restauración en tiempo real, no solo para replicación
    • Las versiones maestra y esclava pueden ser diferentes y la versión del servidor esclavo puede ser superior a la versión del servidor maestro.
  • Desventajas de SBR:
    • No todas las declaraciones UPDATE se pueden replicar, especialmente si contienen operaciones indeterminadas.
  • Las declaraciones que utilizan las siguientes funciones no se pueden copiar: LOAD_FILE(), UUID(), USER(), FOUND_ROWS(), SYSDATE() (a menos que la opción --sysdate-is-now esté habilitada al inicio)
    • INSERT... SELECT generará más bloqueos a nivel de fila que RBR
    • Al copiar una ACTUALIZACIÓN que requiere un escaneo completo de la tabla (no se utiliza ningún índice en la declaración WHERE), se requieren más bloqueos a nivel de fila que RBR.
    • Para tablas InnoDB con campos AUTO_INCREMENT, la declaración INSERT bloquea otras declaraciones INSERT.
    • Para algunas declaraciones complejas, el consumo de recursos en el servidor esclavo será más grave y, en modo RBR, solo afectará el registro modificado.
    • Si se producen errores al ejecutar declaraciones complejas, se consumirán más recursos.
    • La tabla de datos debe ser casi coherente con la del servidor principal; de lo contrario, puede provocar errores de replicación.

Formato 2: ROW模式(replicación basada en filas (RBR))

binlog_format=ROW

MySQL versión 5.1.5 recién ha comenzado a admitir esto: no registra la información de contexto de cada declaración SQL, solo registra qué datos se han modificado y cuál ha sido la modificación.

  • Ventajas de RBR:
    • Se puede copiar cualquier situación, que es la mejor para la replicación 安全可靠. (Por ejemplo: no habrá problema de que los procedimientos almacenados, funciones, llamadas de activador y activadores no se puedan copiar correctamente en determinadas circunstancias)
    • En la mayoría de los casos, la replicación será mucho más rápida si la tabla en el servidor esclavo tiene una clave principal.
    • Replica los siguientes tipos de declaraciones con menos bloqueos de fila: INSERT... SELECT, INSERT que contiene un campo AUTO_INCREMENT, declaraciones UPDATE o DELETE sin condiciones o sin modificar muchos registros.
    • Menos bloqueos al ejecutar declaraciones INSERT, UPDATE, DELETE
    • 多线程Es posible realizar la replicación desde el servidor usando
  • Desventajas de RBR:
    • binlog es mucho más grande
    • Durante una reversión compleja, el binlog contendrá una gran cantidad de datos.
    • Cuando se ejecuta la instrucción UPDATE en el servidor principal, todos los registros modificados se escribirán en el binlog, pero SBR solo los escribirá una vez, lo que provocará frecuentes problemas de escritura concurrente en el binlog.
    • No se puede ver qué declaraciones se copiaron del binlog

Formato 2: MIXED模式(replicación de base mixta (MBR))

binlog_format=MIXED

A partir de la versión 5.1.8, MySQL proporciona formato mixto, que en realidad es una combinación de Declaración y Fila.

En el modo mixto, las modificaciones de declaraciones generales utilizan el formato de declaración para guardar el binlog. Por ejemplo, algunas funciones y declaraciones no pueden completar la operación de replicación maestro-esclavo, por lo que el binlog se guarda en formato de fila.

MySQL distinguirá el formulario de registro que se registrará en función de cada declaración SQL específica ejecutada, es decir, elegirá uno entre Declaración y Fila.

3.3 Archivo de configuración esclavo

Se requiere que todos los elementos de configuración del maestro y esclavo estén configurados en el campo de y todos estén en letras minúsculas my.cnf.[mysqld]

  • requerido
    #[必须]从服务器唯一ID
    server-id=2
    
  • Opcional
    #[可选]启用中继日志
    relay-log=mysql-relay
    

Reinicie el servicio mysql en segundo plano para que la configuración surta efecto.

Nota: Tanto la máquina maestra como la esclava apagan el
servicio de firewall iptables stop #CentOS 6
systemctl stop firewalld.service #CentOS 7

3.4 Anfitrión: Crear una cuenta y autorizarla

#在主机MySQL里执行授权主从复制的命令
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'从机器数据库IP' IDENTIFIED BY 'abc123';
#5.5,5.7

注意:如果使用的是MySQL8,需要如下的方式建立账户,并授权slave:

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则见下面。
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

Nota: Al ejecutar show Slave status\G en el esclavo, se informa un error: Last_IO_Error: error al conectar con el maestro '[email protected]:3306' - tiempo de reintento: 60 reintentos: 1 mensaje: Se informó el complemento de autenticación 'caching_sha2_password' error: la autenticación requiere una conexión segura.

Consulta el estado del Maestro y registra los valores de Archivo y Posición.

show master status;

Insertar descripción de la imagen aquí

  • Registre los valores de Archivo y Posición

Nota: Después de realizar este paso 不要再操作主服务器MySQL, evite que cambie el valor de estado del servidor maestro.

3.5 Esclavo: configure el host que debe copiarse

步骤1: Copie el comando del host desde la máquina esclava

CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

Ejemplo:

CHANGE MASTER TO
MASTER_HOST='192.168.1.150',MASTER_USER='slave1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='atguigu-bin.000007',MASTER_LOG_POS=154;

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
步骤2:

#启动slave同步
START SLAVE;

Insertar descripción de la imagen aquí
Si se informa un error:
Insertar descripción de la imagen aquí
puede realizar las siguientes operaciones para eliminar la información anterior de Relay_log. Luego vuelva a ejecutar la instrucción CHANGE MASTER TO....

mysql> reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件

A continuación, verifique el estado de sincronización:

SHOW SLAVE STATUS\G;

Insertar descripción de la imagen aquí

Si los dos parámetros anteriores son Sí, significa que la configuración maestro-esclavo se realizó correctamente.

La siguiente situación explícita es incorrecta. Las posibles razones del error son:

1. 网络不通
2. 账户密码错误
3. 防火墙
4. mysql配置文件问题
5. 连接服务器时语法
6. 主服务器mysql权限

Insertar descripción de la imagen aquí

3.6 Pruebas

El host crea una nueva biblioteca, una nueva tabla e inserta registros, y el esclavo copia:

CREATE DATABASE master_slave;
CREATE TABLE mytbl(id INT,NAME VARCHAR(16));
INSERT INTO mytbl VALUES(1, 'zhang3');
INSERT INTO mytbl VALUES(2,@@hostname);

3.7 Detener la sincronización maestro-esclavo

  • Detener el comando de sincronización maestro-esclavo:

    stop slave;
    
  • Cómo reconfigurar el maestro y el esclavo.Si
    detiene la función de replicación del servidor esclavo, deberá reconfigurar el maestro y el esclavo nuevamente. De lo contrario, se informará el siguiente error:
    Insertar descripción de la imagen aquí
    La reconfiguración del maestro y el esclavo debe ejecutarse en la máquina esclava:

    stop slave;
    reset master; #删除Master中所有的binglog文件,并将日志索引文件清空,重新开始所有新的日志文件(慎用)
    

3.8 Seguimiento

搭建主从复制:双主双从
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

4. Problemas de coherencia de los datos de sincronización

主从同步的要求:

  • Los datos en la base de datos de lectura y la base de datos de escritura son consistentes (eventualmente consistentes);

  • Los datos de escritura deben escribirse en la biblioteca de escritura;

  • Los datos de lectura deben ir a la biblioteca de lectura (no necesariamente);

4.1 Comprender el problema del retraso maestro-esclavo

El contenido de la sincronización maestro-esclavo es el registro binario, que es un archivo. Durante el proceso de transmisión de la red, habrá un retraso maestro-esclavo (como 500 ms), lo que puede provocar que el usuario lea los datos de la biblioteca esclava. no ser el último Datos, es decir,
inconsistencia .

4.2 Causas del problema de retraso maestro-esclavo

Cuando la red es normal, el tiempo necesario para transferir el registro desde la base de datos maestra a la base de datos esclava es muy corto, es decir, el valor de T2-T1 es muy pequeño. Es decir, en condiciones normales de red, la principal fuente de retraso entre las bases de datos primaria y secundaria es la diferencia de tiempo entre la base de datos secundaria que recibe el binlog y ejecuta la transacción.

主备延迟最直接的表现是,从库消费中继日志(relay log)的速度,比主库生产binlog的速度要慢. Causa de:

1. El rendimiento de la máquina de la base de datos esclava es peor que el de la base de datos principal.

2. Hay mucha presión sobre la biblioteca esclava.

3. Ejecución de asuntos importantes.

举例1: Se eliminan demasiados datos con una declaración de eliminación a la vez
Conclusión: al eliminar datos más adelante, es necesario controlar la cantidad de datos eliminados por cada transacción y dividirlos en varias eliminaciones.

举例2: Se insertan demasiados datos usando insertar...seleccionar a la vez

举例3: DDL de tabla grande.
Por ejemplo, si se necesitan 10 minutos para agregar un campo a una tabla de 500 W en la base de datos principal, también tomará 10 minutos en el nodo esclavo.

4.3 Cómo reducir el retraso maestro-esclavo

Si desea reducir el tiempo de retardo maestro-esclavo, puede utilizar los siguientes métodos:

  1. Reduzca la probabilidad de que se produzcan grandes transacciones simultáneas con subprocesos múltiples y optimice la lógica empresarial
  2. Para optimizar SQL, evitar SQL lento y reducir las operaciones por lotes, se recomienda escribir scripts en forma de actualización-suspensión.
  3. Mejore la configuración de la máquina de base de datos esclava y reduzca la diferencia de eficiencia entre el binlog de escritura de la base de datos maestra y el binlog de lectura de la base de datos esclava.
  4. Intente utilizar enlaces cortos, es decir, la distancia entre la base de datos maestra y el servidor de la base de datos esclava debe ser lo más corta posible para aumentar el ancho de banda del puerto y reducir el retraso de la red en la transmisión binlog.
  5. Las lecturas comerciales que requieren requisitos en tiempo real se ven obligadas a ir a la base de datos principal, y la base de datos esclava solo se usa para recuperación y respaldo ante desastres.

4.4 Cómo resolver problemas de consistencia

Si los datos operados se almacenan en la misma base de datos, al actualizar los datos, puede agregar un bloqueo de escritura al registro, para que no se produzcan inconsistencias en los datos al leer. 备份Pero en este momento , la función de la biblioteca esclava es 读写分离compartir 读压力la función de la biblioteca principal.
Insertar descripción de la imagen aquí
En el caso de la separación de lectura y escritura, el problema de la inconsistencia de datos en la sincronización maestro-esclavo es resolver 数据复制方式el problema entre maestro y esclavo. Si 从弱到强se divide según la coherencia de los datos, existen los siguientes tres métodos de replicación.

Método 1: replicación asincrónica
Insertar descripción de la imagen aquí

Método 2: replicación semisincrónica
Insertar descripción de la imagen aquí

Método 3: ni la replicación asincrónica ni la replicación semisincrónica en la replicación grupal
pueden garantizar en última instancia la coherencia de los datos. La replicación semisincrónica determina si se devuelve al cliente juzgando el número de respuestas de la base de datos. Aunque la coherencia de los datos es mejor que la replicación asincrónica Ha habido mejoras, pero todavía no puede cumplir con escenarios que requieren una alta coherencia de los datos, como en el campo financiero. MGR compensa muy bien las deficiencias de estos dos modos de replicación.

Tecnología de replicación de grupo, denominada MGR (MySQL Group Replication). Es una nueva tecnología de replicación de datos lanzada por MySQL en la versión 5.7.17, que se basa en la replicación de la máquina de estados del protocolo Paxos.

MGR 是如何工作的

Primero, formamos varios nodos en un grupo de replicación. En 执行读写(RW)事务ese momento, se requiere el acuerdo de la capa de protocolo de coherencia (capa de consenso), es decir, si se desean enviar transacciones de lectura y escritura, deben pasar por la "mayoría de personas" en el grupo (Correspondiente al acuerdo de Nodo (correspondiente a Nodo), la mayoría de ellos significa que el número de nodos acordados debe ser mayor que (N/2+1), para que se pueda realizar el envío, en lugar de que el iniciador original tenga la última palabra. Para 只读(RO)事务, no se requiere la aprobación del grupo, solo COMPROMETERSE directamente.

Un grupo de replicación consta de varios nodos, cada uno de los cuales mantiene su propia copia de datos e implementa mensajes atómicos y mensajes ordenados globales en la capa de protocolo de coherencia para garantizar la coherencia de los datos dentro del grupo.

Insertar descripción de la imagen aquí

MGR lleva a MySQL a la era de la fuerte coherencia de los datos, lo cual es una innovación que hace época. Una de las razones importantes es que MGR se basa en el protocolo Paxos. El algoritmo Paxos fue propuesto por Leslie Lamport, ganadora del Premio Turing 2013, en 1990. Puede buscar el mecanismo de toma de decisiones de este algoritmo. De hecho, el algoritmo Paxos se ha utilizado ampliamente como algoritmo de consenso distribuido desde su propuesta. Por ejemplo, ZooKeeper de Apache también se implementa en base a Paxos.

5. Extensión del conocimiento

En la configuración de la arquitectura maestro-esclavo, si queremos adoptar una estrategia de separación de lectura y escritura, 自己编写程序también podemos 第三方的中间件implementarla a través de.

  • La ventaja de escribir el programa usted mismo es que es más independiente. Podemos juzgar qué consultas ejecutar en la base de datos esclava. Para requisitos elevados en tiempo real, también podemos considerar qué consultas se pueden ejecutar en la base de datos principal. Al mismo tiempo, el programa se conecta directamente a la base de datos, lo que reduce la capa de middleware, lo que equivale a reducir la pérdida de rendimiento.
  • El método middleware tiene ventajas obvias: es potente y fácil de usar. Sin embargo, habrá cierta pérdida de rendimiento debido a la adición de una capa de middleware entre el cliente y la base de datos, y el middleware comercial también tiene costos de uso. También podemos considerar la adopción de algunas excelentes herramientas de código abierto.

Insertar descripción de la imagen aquí
CobarPertenece al grupo empresarial B2B de Alibaba. Comenzó en 2008 y ha trabajado en Alibaba durante más de 3 años. Ha asumido el esquema de más de 3000 bases de datos MySQL y el clúster procesa más de 5 mil millones de solicitudes SQL en línea por día. Debido a la renuncia del patrocinador de Cobar, Cobar dejó de mantener.

MycatLa comunidad de código abierto llevó a cabo un desarrollo secundario sobre la base de Alibaba cobar, que resolvió los problemas de cobar y agregó muchas
funciones nuevas. el alumno supera al maestro.

OneProxyBasado en la idea de proxy oficial de MySQL y desarrollado en lenguaje C, OneProxy es un middleware comercial pago
. Se abandonaron algunas funciones para centrarse 性能和稳定性上.

kingshardDesarrollado por un pequeño equipo que utiliza el lenguaje Go, aún necesita desarrollo y mejora continua.

⑤Lo Vitessutiliza la producción de Youtube y la estructura es muy compleja. El protocolo nativo MySQL no es compatible; utilice 需要大量改造成本.

AtlasEstá reescrito por el equipo 360 basado en el proxy mysql. La función debe mejorarse y es inestable en condiciones de alta concurrencia.

MaxScalees el middleware desarrollado por mariadb (una versión mantenida por el autor original de MySQL)

MySQLRoutees el middleware lanzado por la compañía oficial Oracle de MySQL

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Conmutación activa/en espera:
Insertar descripción de la imagen aquí

  • Conmutación activa
  • Conmutación pasiva
  • ¿Cómo determinar si hay un problema con la base de datos principal? ¿Cómo resolver inconsistencias de datos en el proceso?

Je suppose que tu aimes

Origine blog.csdn.net/zhufei463738313/article/details/130779029
conseillé
Classement