basada en la replicación de alto rendimiento de MySQL --- mitad de GDIT

A, la replicación MySQL

1.1 MySQL concepto de patrón de sincronización de varios:

1, La replicación asíncrona (replicación asíncrona)

Esa es la replicación de MySQL por defecto es asíncrona, la biblioteca principal después de la finalización de la ejecución de la transacción presentada por el cliente será inmediatamente devolver los resultados al cliente, y no le importa si ha recibido tratamiento de la biblioteca, por lo que no será un problema, si el accidente principal cabo, la transacción en este momento en la biblioteca principal ha sido presentada no pueda transferirse de la biblioteca, si en este momento, la biblioteca principal obligará a la biblioteca para mejorar, puede dar lugar a los datos en la nueva base de datos principal es incompleta.

2,La replicación completa (replicación síncrona totalmente)

Significa que cuando se devuelve al cliente la biblioteca principal de la ejecución de la transacción, todas las bibliotecas se ha realizado la operación. Todo debido a la necesidad de esperar a la finalización de la operación ejecutada desde la biblioteca hasta el retorno, por lo que toda la actuación replicación síncrona está obligado a recibir un impacto serio.

3,replicación semisincrónicas (replicación semisincrónicas)

De un modo multi-maestro, un retorno con éxito desde el nodo, es decir, el éxito, sin esperar a que toda la pluralidad de nodos de retorno. Tener entre la replicación asíncrona y la replicación totalmente sincrónico, la base de datos maestra Después de realizar una transacción presentada por el cliente no devuelve inmediatamente al cliente, sino que espere al menos una información recibida desde la biblioteca hasta el log retardado y lo escribe de vuelta al cliente. Con respecto a la replicación asincrónica, la replicación semisincrónica mejora la seguridad de los datos, sino que también causó cierto retraso, el retraso es al menos un tiempo de ida y vuelta de TCP / IP. Por lo tanto, semi-sync se usa preferiblemente en de baja latencia de red.
Aquí Insertar imagen Descripción

1.2 MySQL tecnología de replicación semi-síncrona

En general, una replicación ordinaria, es decir, la replicación MySQL asíncrono, se basan en MySQL registro binario que es la replicación de datos de registro binario. Por ejemplo, dos máquinas, Un host (Master), el otro es el esclavo (esclavo).

  • replicación normal a: Binlog conducta tampón puesto de control;; Una transacción (t1) tampón binlog escrito; dumper notifica flujo esclavo nuevo t1 transacción esclavo de hilo io recibe t1 y escrito de poseer un registro de relé; esclavo de escribir el hilo sql base de datos local. En este momento, maestro y esclavo pueden ver esta nueva operación, incluso si el ahorcamiento maestro, esclavo puede ser promovido a un nuevo maestro.

  • copia anormal es: Una transacción (t1) tampón binlog escrito; notifica hilo dumper esclavo nueva T1 transacción; binlog
    conducta puesto de control Buffer; esclavo porque la red es inestable, no ha recibido t1; maestro cuelgue, promovido al nuevo maestro esclavo, t1 perdida.

  • La gran pregunta es: Maestro y el esclavo no está sincronizado asuntos de actualización, incluso si no hay otras anomalías de la red o del sistema, cuando el servicio hasta concurrente, lote maestro esclavo a ser ejecutados desde la secuencia de la transacción, lo que resulta en retrasos significativos.

Con el fin de compensar la falta de más de un par de escenas, MySQL 5.5 lanzado desde una réplica semisincrónica. En comparación con la replicación asincrónica, la replicación semisincrónica mejora la integridad de los datos, porque está claro que saber,Después de un exitoso confirmaciones de transacción, la transacción estará presente en al menos dos lugares. Ese es el hilo en el dumper después maestro de la notificación de esclavos, añade un acuse de recibo (mensaje de confirmación), es decir, si t1 recibido correctamente el código de la bandera, que es además de enviar dumper t1 hilo para el esclavo, también asumió el acuse de recibo de trabajo del esclavo que recibe. Si se produce una excepción, no reciben ACK, automáticamente se rebajó a una copia simple, reparación anormal hasta entonces se convertirá automáticamente la replicación semi-sincrónica. dispositivo maestro que sólo uno de los cuales recibe la información de retorno ESCLAVO, se comprometerán, de lo contrario, esperar hasta que el tiempo de espera se cambia entonces a la asincrónica presentar.

Las propiedades específicas de semi-sync 1,3

Una biblioteca a otra primaria del archivo maestro binlog productos binlog, de la biblioteca log retardado difusión, y de la aplicación de base de datos; que se transmite es asíncrono, la aplicación también asíncrona. replicación Semi-sincrónico se refiere a síncrono de transmisión, asíncrono o aplicación!

  • Bibliotecas le dirá cuando está conectado a la biblioteca principal de la biblioteca principal, se configura en el semi-sincrónica.
  • Si se abre la replicación semi-síncrona en el lado principal, y hay al menos una replicación semi-sincrónica de los nodos de la biblioteca, entonces la biblioteca principal hilo transacción será bloqueada y esperando el momento de presentar resultados, hay dos posibilidades, ya sea al menos que ha recibido una notificación del nodo de biblioteca binlog todos los eventos de esta transacción, o tiempos de espera hasta que la configuración de más de un cierto punto en el tiempo, pero esta vez, la replicación semi-síncrono se apagará automáticamente, convertido a la replicación asíncrona.
  • Sólo después de todo binlog recibió una transacción, está escrito desde el nodo de biblioteca y archivos a ras del relé de registro, correspondencia notificará a la espera de rosca por encima de la biblioteca principal.
  • Si la espera, ha superado el tiempo de espera el tiempo de espera, sin ningún aviso desde los nodos de transacción actual, entonces la biblioteca principal se convierte automáticamente a la replicación asíncrona, cuando al menos una semi-sincrónica llegar desde el nodo, la biblioteca principal será convertido automáticamente a modo de replicación semi-síncrona.
  • la replicación semi-sincrónica y el trabajo debe ser abierto por los dos extremos de la biblioteca son las principales bibliotecas, la biblioteca principal o utilizan la replicación asíncrona por defecto.

En segundo lugar, la configuración de semi-síncrono de replicación (un GDIT basado semi-sync)

Los plug-ins instalados en la base de datos es una salida temporal será el fracaso volver a iniciar sesión y permanente se puede configurar en el fichero de configuración de escritura
entorno de prueba: la replicación asíncrona básico basado en

Paso 1 plug-in de servicio principal biblioteca de instalación, y abrir la replicación semi-sincrónico:

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; #安装半同步模块
Query OK, 0 rows affected (0.01 sec)

mysql> select plugin_name,plugin_status
    -> from information_schema.plugins
    -> where plugin_name like '%semi%';  #查看插件
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec)

mysql> set global rpl_semi_sync_master_enabled=ON; #开启半同步,也就是激活插件
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%semi%';    #环境变量

mysql> show status like '%rpl_semi_sync%';	#状态变量

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Paso 2 desde el extremo de la clavija está montado también, la replicación semi-síncrona abierta:

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)

mysql> set global rpl_semi_sync_slave_enabled=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%semi%';  

Aquí Insertar imagen Descripción
Nota: Para volver a empezar a partir de los hilos de IO, si no se reinicie, el valor predeterminado o la replicación asíncrona, después de la reanudación, el esclavo se registrará como un esclavo de replicación semisincrónica en la función de maestro

mysql> stop slave io_thread;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave io_thread; #重启IO线程使半同步生效
Query OK, 0 rows affected (0.00 sec)

mysql> show status like '%rpl%'; 查看变量的状态
mysql> show variables like '%rpl%'; 查看变量的值
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
		### 是否开启半同步
| rpl_semi_sync_master_timeout              | 10000      | 
		###切换复制的timeout
| rpl_semi_sync_master_trace_level          | 32         | 
		###用于开启半同步复制模式时的调试级别,默认是32
| rpl_semi_sync_master_wait_for_slave_count | 1          |
		###至少有N个slave接收到日志
| rpl_semi_sync_master_wait_no_slave        | ON         |
		###是否允许master 每个事物提交后都要等待slave的receipt信号。默认为on 
| rpl_semi_sync_master_wait_point           | AFTER_SYNC | 
		###等待的point
| rpl_stop_slave_timeout                    | 31536000   |
+-------------------------------------------+------------+    
		###控制stop slave 的执行时间,在重放一个大的事务的时候,突然执行stop slave,命令 
		###stop slave会执行很久,这个时候可能产生死锁或阻塞,严重影响性能

Aquí Insertar imagen Descripción

III. Prueba

1. Fallo semisincrónico

No caso por la replicación semi-sincrónico:

Paso 1 desde el extremo para apagar los hilos IO:

mysql> stop slave io_thread;
Query OK, 0 rows affected (0.01 sec)

Paso 2 insertado en los datos de tabla principal, espera 10 segundos, 10 segundos se convierte en la replicación asíncrona:

mysql> insert into userlist values ('user5','555');
Query OK, 1 row affected (10.01 sec)

En este caso el step3 maestro encontraron fallos semi-síncronos +1:

Rpl_semi_sync_master_no_tx表示没有成功接收slave提交的次数,也就是使用半同步失败的次数,10s后没有得到反馈信息,会转为异步复制
Rpl_semi_sync_master_yes_tx使用半同步成功的次数,数据的一致性能提高

mysql> show status like '%rpl%';

Comprobar el estado semi-síncrono está apagado, la transacción es para ser sincronizado 1
Aquí Insertar imagen Descripción
Desde el final se encuentra que no hay sincronización a través de, abra el proceso de IO vez más, los datos pueden sincronizarse a través de, copiados en este momento es el resultado de la replicación asíncrona

mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)

mysql> use westos;
Database changed
mysql> select * from userlist;

Aquí Insertar imagen Descripción

2. Las circunstancias normales semi-síncronos

Paso 1 IO abierta desde finales:

mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)

final step2 de los nuevos datos de inserción principal:

mysql> insert into userlist values ('user6','666');
Query OK, 1 row affected (0.01 sec)

mysql> select * from userlist;

mysql> show status like '%rpl%';  #Rpl_semi_sync_master_yes_tx 变为1,成功一次

Aquí Insertar imagen Descripción
Paso 3 verificar resultados de sincronización de la terminal:

mysql> select * from userlist;

Aquí Insertar imagen Descripción

Publicados 168 artículos originales · ganado elogios 6 · vistas 2792

Supongo que te gusta

Origin blog.csdn.net/weixin_43936969/article/details/104801811
Recomendado
Clasificación