¿Cómo funciona realmente la replicación de MySQL?

Si bien tenemos muchas publicaciones de blog sobre la replicación en nuestro blog, como la replicación de subproceso único, en la replicación semisincrónica o sobre la estimación de la capacidad de replicación, no creo que tengamos una que cubra los conceptos básicos de cómo MySQL replicación. realmente funciona a un alto nivel. O ha pasado tanto tiempo desde que he sido capaz de encontrarlo. Entonces, decidí escribir uno ahora.

Por supuesto, hay muchos aspectos en la replicación de MySQL, pero mi enfoque principal estará en la logística: cómo se escriben los eventos de replicación en el maestro, cómo se transfieren al esclavo de replicación y luego cómo se aplican aquí. Tenga en cuenta que esto no es una replicación de configuración de CÓMO, sino más bien una cómo funciona Tipo de cosa.

Eventos de replicación de MySQL

yo digo eventos de replicación en este artículo por qué quiero evitar la discusión sobre diferentes formatos de replicación. Estos están bastante bien cubiertos. en el manual de MySQL aquí. En términos simples, los eventos pueden ser de dos tipos:

  • Basado en declaraciones – en cuyo caso estas son preguntas escritas
  • basado en filas – en este caso, hay cambios en los registros, una especie de fila diferencia si tu quieres

Pero aparte de eso, no volveré a las diferencias en la replicación con diferentes formatos de replicación, especialmente porque hay muy pocas diferencias cuando se trata de transportar cambios de datos.

en el maestro

Así que ahora permítanme comenzar con lo que sucede en el maestro. Para que la replicación funcione, en primer lugar, el profesor debe escribir los eventos de replicación en un registro especial llamado registro binario. Por lo general, esta es una actividad muy liviana (suponiendo que los eventos no estén sincronizados con el disco), porque los scripts están almacenados en búfer y porque son secuenciales. El archivo de registro binario almacena datos que el esclavo de replicación lee más tarde.

Cada vez que un esclavo de replicación se conecta a un maestro, el maestro crea un nuevo subproceso para la conexión (similar al que se usa para casi cualquier otro cliente de servidor) y luego hace lo que pide el cliente, el esclavo de replicación en este caso. La mayor parte de esto será (a) alimentar al esclavo de replicación con eventos del registro binario y (b) notificar al esclavo sobre eventos reescritos en su registro binario.

Los esclavos que se actualizan leerán principalmente los eventos que aún están almacenados en la memoria caché del sistema operativo en el maestro, por lo que no habrá lectura de disco físico en el maestro para alimentar los eventos de los registros binarios a los esclavos. Sin embargo, cuando conecta un esclavo de replicación que es unas horas o incluso días después, inicialmente comienza a leer registros binarios que se escribieron hace horas o días; el maestro ya no puede almacenarlos en caché porque el disco lee saranu. Si el maestro no tiene recursos de IO gratuitos, es posible que sienta un bache en ese punto.

en la réplica

Ahora vea lo que sucede en el esclavo. Cuando comience la replicación, dos cables comenzaron con el esclavo:

1. FiloIO

Este proceso se llama hijo se conecta a un maestro, lee eventos de registro binarios del maestro cuando inician sesión y los copia solo en un archivo de registro local llamado registro de retransmisión. Eso es todo.

Aunque solo hay un subproceso que lee el registro binario del maestro y un registro de retransmisión de escritura en el esclavo, muy rara vez la copia del evento de replicación es un elemento más lento de la replicación. Podría ser un retraso en la red, lo que provocará un retraso constante de unos pocos cientos de milisegundos, pero eso es todo.

Si desea ver dónde se encuentra actualmente el subproceso de IO, verifique lo siguiente en «mostrar estado de SlaveG»:

  • Archivo_de_registro_maestro – último archivo copiado por el profesor (la mayoría de las veces sería el mismo que el último registro binario escrito por un profesor)
  • Read_Master_Log_Pos – el registro binario del maestro se copia en el registro del relé en el esclavo hasta esta posición.

Y luego puede compararlo con la salida de «mostrar estado maestro» del maestro.

2. Hilo SQL

El segundo proceso – subproceso SQL – lea los eventos de un registro de retransmisión almacenado localmente en el esclavo de replicación (el archivo que se escribió desde el subproceso IO) y luego aplíquelo lo antes posible.

Este hilo es lo que la gente suele culpar por ser un solo hilo. Volviendo a «mostrar estado de SlaveG», puede obtener el estado actual del subproceso SQL a partir de las siguientes variables:

  • Relé_maestro_archivo_de_registro – registro binario del maestro, ese subproceso SQL está «funcionando» (en realidad funciona en el registro de retransmisión, por lo que es solo una forma conveniente de ver información)
  • Exec_Master_Log_Pos – qué posición del registro binario maestro ejecuta el subproceso SQL.

Retraso en la replicación

Ahora quiero referirme brevemente al tema del retraso en la replicación en este contexto. Cuando se trata de retrasos en la replicación, lo primero que debe saber es cuál de los dos subprocesos de replicación está detrás. La mayoría de las veces será el subproceso SQL, siempre tiene sentido verificarlo dos veces. Puede hacer esto comparando las variables de estado de replicación mencionadas anteriormente con el estado del registro binario maestro mediante la salida de «show master statusG» del maestro.

Si se trata de un subproceso IO, que, como he mencionado varias veces, es muy raro, una cosa que puede intentar resolver esto es activación del protocolo esclavo comprimido.

De lo contrario, si está seguro de que se trata de un subproceso de SQL, querrá saber cuál es el motivo y qué puede observar normalmente en vmstat. Supervise la actividad del servidor a lo largo del tiempo y vea si es la columna «r» o «b» la que tiene «puntuación» la mayor parte del tiempo. Si es «r», la replicación está vinculada a la CPU; de lo contrario, IO. Si no es concluyente, mpstat le dará una mejor visibilidad desde el subproceso de la CPU.

Tenga en cuenta que esto supone que no está ocurriendo ninguna otra actividad en el servidor. Si hay alguna actividad, es posible que también desee ver diskstats o incluso hacer una revisión de consulta para el subproceso SQL para obtener una buena imagen.

Si encuentra que la replicación está vinculada a la CPU, esto puede ser muy útil.

Si está vinculado a IO, entonces la reparación puede no ser tan fácil (o mejor, tan económica). Dejame explicar. Si la replicación está vinculada a IO, la mayoría de las veces significa que el subproceso SQL no puede leer lo suficientemente rápido porque las lecturas son un solo subproceso. Sí, tienes razón, es leer que limitan el rendimiento de la replicación, no escriben. Déjame explicar esto más.

Suponga que tiene un RAID10 con muchos discos y cachés de escritura. Escribir, incluso si están serializados, serán rápidos porque están almacenados en el caché del controlador y porque internamente la tarjeta RAID puede paralelizar las escrituras en los discos. Por lo tanto, el esclavo de replicación con hardware similar puede escribir tan rápido como el maestro.

Ahora Leer. Cuando su conjunto de trabajo no está almacenado en la memoria, los datos que se modificarán deben leerse primero desde el disco y aquí es donde está limitado por la naturaleza de un solo subproceso de replicación, porque un subproceso estará solo. nunca lea de un disco a la vez.

Dicho esto, una solución para reparar la replicación vinculada a E/S es aumentar la cantidad de memoria para que el conjunto de trabajo entre en la memoria. Otro: obtenga un dispositivo de E/S que pueda realizar muchas más operaciones de E/S por segundo incluso con un solo subproceso: las unidades tradicionales más rápidas pueden realizar hasta 250 iops, SSD, del orden de 10 000 iops.

¿Preguntas? ¿Comentarios? ¿Preocupaciones?

Más recursos

Entrada en el blog

seminarios web

Libro electrónico gratuito

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario