
Hace apenas un mes, pavel ivanov publicado Onda bajo la licencia Apache-2.0. Ripple es un servidor binlog MySQL: software que recibe registros binarios de mysql o MariaDB servidor y los reenvía a otro servidor MySQL o MariaDB. En la práctica, este es un maestro intermedio que no almacena datos, excepto los propios registros binarios, y no aplica eventos. Esta solución ahorra muchos recursos en el servidor, que solo actúa como intermediario entre el maestro y su(s) esclavo(s).
El servidor proxy, que solo mantiene los registros binarios y no realiza ningún otro trabajo, es un caso de uso frecuente que nos permite eliminar IO (lectura de binlog) y red (recuperación de binlog a través de la red) cargados por el propio propietario y liberar sus recursos para actualizaciones. . El maestro intermedio, que no realiza ningún trabajo, distribuye registros binarios a los esclavos conectados con él. De esta manera puede tener un mayor número de esclavos, conectados a dicho servidor, sin afectar la aplicación, realizando actualizaciones.
Actualmente, los usuarios lo están explotando. el motor de almacenamiento Blackhole para emular un comportamiento similar. Pero Blackhole solo tiene una solución: siempre ejecuta todos los eventos en registros binarios, requiere una instalación válida de MySQL y tiene muchos problemas. ¡Qué dolor!
Por lo tanto, vale la pena probar un nuevo producto que pueda hacer el mismo trabajo y se lance con una licencia de código abierto.
una prueba sencilla
Para este blog, hice una prueba simple. Primero, lo instalé como se describe en el LÉEME Archivo. Las instrucciones son bastante simples y he construido con éxito el servidor por mi cuenta. ubuntu 18.04.2 portátil LTS. Las pautas sugieren resolver
libmariaadbclient–desarrollador y lo reemplacé
clientelibmysql–desarrollador que ya tenía en mi coche. Probablemente esto no era necesario, pero dado que la herramienta afirma ser compatible con los formatos de registro binario MySQL y MariaDB, preferí instalar el cliente MariaDB.
No hay manual de usuario. Sin embargo, la herramienta mantiene
–ayuda comando, y es, de nuevo, simple.
El servidor se puede iniciar con las siguientes opciones:
$./bazel-bin/rippled -ripple_datadir =./data -ripple_master_address = 127.0.0.1 -ripple_master_port = 13001 -ripple_master_user = root -ripple_server_ports = 15000
PS./bazel–compartimiento/ondular –ripple_datadir=./datos –ripple_master_address=127.0.0.1 –ripple_master_port=13001 –ripple_master_user=radica –Ripple_server_ports=15000 |
Donde:
- –onda–directorio de datos : fecha en la que Ripple almacena registros binarios
- –ripple_master_address : invitado maestro
- –ripple_master_port : puerto maestro
- –ripple_master_user : Usuario de replicación
- –Ripple_server_ports : puertos separados por comas que Ripple escuchará
No he encontrado una opción para garantizar la recuperación de registros binarios. El esclavo puede conectarse al servidor Ripple con cualquier credencial. Tenga esto en cuenta cuando implemente Ripple en producción.
Ahora, hagamos una prueba simple. Tengo dos sirvientes. Ambos en el host local, uno con puerto 13001 (maestro) y otro con puerto 13002 (esclavo). La línea de comando que usé para comenzar
ondular , señala al profesor. Los registros binarios se almacenan en la carpeta de datos:
$ ls -l data / total 14920 -rw-rw-r– 1 sveta sveta 15251024 6 de marzo 01:43 binlog.000000 -rw-rw-r– 1 sveta sveta 71 6 de marzo 00:50 binlog.
PS ls –yo datos/ total 14920 –rw–rw–r– 1 sveta sveta 15251024 mar 6 01:43 binlog.000000 –rw–rw–r– 1 sveta sveta 71 mar 6 00:50 binlog.índice |
Apunté al esclavo al servidor Ripple con el comando
mysql> cambiar maestro a master_host = «127.0.0.1», master_port = 15000, master_user = «ripple»; Consulta OK, 0 filas afectadas, 1 alerta (0.02 seg)
mysql> cambio Maestro a anfitrión_maestro=‘127.0.0.1’,puerto_maestro=15000, usuario_maestro=onda; Pregunta está bien, 0 póngase en fila afectado, 1 advertencia (0.02 segundo) |
Entonces comienza el esclavo.
En el maestro, creé la base de datos.
prueba y corrió banco de sistema
oltp_read_write.lua prueba para una sola placa. Después de un tiempo, dejé de cargar y verifiqué el contenido de la tabla en el maestro y el esclavo:
profesor> seleccione contar
de sbtest1; + ———- + | contar | + ———- + | 10000 | + ———- + 1 fila en conjunto (0.08 seg) master> checksum table sbtest1; + —————- + ———— + | Mesa | Suma de comprobación | + —————- + ———— + | sbtest.sbtest1 | 4162333567 | + —————- + ———— + 1 fila en conjunto (0.11 seg) esclavo> seleccionar cuenta de sbtest1; + ———- + | contar | + ———- + | 10000 | + ———- + 1 fila en conjunto (0.40 seg) esclavo> tabla de suma de comprobación sbtest1; + —————- + ———— + | Mesa | Suma de comprobación | + —————- + ———— + | sbtest.sbtest1 | 1797645970 | + —————- + ———— + 1 fila en conjunto (0.13 seg) esclavo> tabla de suma de comprobación sbtest1; + —————- + ———— + | Mesa | Suma de comprobación | + —————- + ———— + | sbtest.sbtest1 | 4162333567 | + —————- + ———— + 1 fila en conjunto (0.10 seg) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
3637 3839 Maestro > selecciona el conteo sí sbprueba1; + ———- + | contar | + ———- + | 10000 | + ———- + 1 póngase en filaen colocar (0.08 segundo) Maestro > tabla de suma de control sbprueba1; + —————- + ——————- | Mesa | Suma de verificación | + —————- + ——————- | sbtest.sbtest1 | 4162333567 | + —————- + ——————- 1 póngase en filaen colocar(0.11 segundo) esclavo > selecciona el conteo sí sbprueba1; + ———- + | contar | + ———- + | 10000 | + ———- +1 póngase en fila en colocar (0.40 segundo) esclavo > tabla de suma de control sbprueba1; + —————- + ——————- | Mesa | Suma de verificación | + —————- + ——————- | sbtest.sbtest1 | 1797645970 | + —————- + ——————-1 póngase en fila en colocar (0.13 segundo) esclavo > tabla de suma de control sbprueba1; + —————- + ——————- | Mesa | Suma de verificación | + —————- + ——————- | sbtest.sbtest1 | 4162333567 |
|
+ —————- + ——————-
1 [ Previous_gtids len = 67 ]
póngase en fila
en colocar (0.10 segundo) El esclavo tardó un tiempo en hacerse cargo, pero todo se aplicó con éxito. Ripple tiene un buen registro detallado: $ ./bazel-bin/rippled -ripple_datadir =./data -ripple_master_address = 127.0.0.1 -ripple_master_port = 13001 -ripple_master_user = root -ripple_server_ports = 15000 ADVERTENCIA: Iniciar sesión antes de iniciar sesión en InitGoogle: 2417154850. ]InitPlugins I0306 15: 57: 13.642007 27908 rippled.cc :60]Configuración I0306 15: 57: 13.642937 27908 Binlog.cc :307]Inicio Binlog Recovery]1: 930306: 030606: 093030606: 030606: 030606: 030606: 030606: BinLog Archivo: binlog.000000 i0306 15: 57: 13.872016 27908 binlog.cc: 417]Archivo de recuperación completo Binlog Binlog: binlog.000000, offset: 15251088, gtid: 6ddac507-1007-100000000000000000000003 7192 i0306: 1330: 27908 ondled.cc :106]binlog Recuperar i0306 15: 57: 13.873811 27908 mysql_server_port_tcpip.cc:150:150:52:150:150:502:150:150:502:150:150:502:150:502:150: 502: 150: 57: 13: 57: 13.873811.8738]Inicio I0306 15: 57: 13.874511 27910 mysql_master_session.cc:181]Inicio de sesión maestra I0306 15: 57: 13.882601 27910 mysql_client_connection.cc:148]c conectado al host: 127.0.0.1, puerto: 13001 I0306 15: 57: 13.895349 27910 mysql_master_session.cc:137]Conectado al host: 127.0.0.1, puerto: 13001, server_id: 13001, server_id: 1595349, mysql_master_ession. : 197]Master no es compatible con SEMI-SYNC I0306 15: 57: 13.898583 27910 MYSQL_MASTER_SESESSION.CC :206]Inicie la replicación de ‘6DDAC507-3F90-11E9-8EE9-00163E0000-07000000000000000000000000000000 Ingrese el ciclo principal I0306 15: 57: 13.899550 27910 Binlog. cc:626]Actualizar posición binlog a end_pos: binlog.000000: 15251152, gtid: 0-0-7192 I0389713: 2296: 2296 .cc: 616]Saltar el evento de escritura I0306 15: 57: 13.899585 27910 binlog.cc:626]Actualizar posición binlog a end_pos: binlog.000000: 15251152, gtid: 0-0-7192… 1 2 3 4 5 6 7 8 9 10 11 12 13 |
14 15dieciséis1718192021 PS./bazel–compartimiento /ondular–ripple_datadir =./datos –ripple_master_address=127.0.0.1 –ripple_master_port=13001 –ripple_master_user = radica –Ripple_server_ports= 15000 ATENCIÓN : Inicio sesión primero InitGoogleLogging()estáescrito a STDERRI030615:57 : 13.641451 27908ondular.cc:48 ] InitPluginsI030615:57 : 13.642007 27908ondular.cc:60 ] ConfigurarI030615:57 : 13.642937 27908 binlog .cc:307]Dejando binlog recuperaciónI030615:57 : 13.644090 27908binlog .cc:350 ] ExploraciónbinlogArchivo:binlog . 000000I030615:57 : 13.872016 27908 binlog .cc: 417]binlogrecuperación completobinlog Archivo: binlog. 000000,compensar:15251088,gtid:6ddac507–3f90–11e9–8ee9 – 00163e000000:0–0 – 7192I030615:57 : 13.872050 27908 ondular.cc:106] Recuperado binlogI030615:57 : 13.873811 27908mysql_server_port_tcpip .cc: 150] Escucha sobre anfitrión:anfitrión local,Puerto : 15000I030615:57 : 13,874,282 27908ondular.cc:62 ] EmpezarI030615:57 : 13.874511 27910 mysql_master_session .cc:181]Maestría sesión empezadoI030615:57 : 13.882601 27910conexión_cliente_mysql .cc: 148] conectado a anfitrión:127.0.0.1,Puerto : 13001I030615:57 : 13.895349 27910mysql_master_session .cc: 137] Conectadoa anfitrión: 127.0.0.1, Puerto: 13001 ,id_servidor:1, nombre del servidor :WO30615:57 : 13.898556 27910 mysql_master_session .cc : 197 ]Maestrotú hacesNoapoyo semi sincronizarI030615:57 : 13.898583 27910 mysql_master_session .cc :206]comienzareproducir exactamente sí ‘6ddac507-3f90-11e9-8ee9-00163e000000: 0-0-7192’I030615:57 : 13.899031 27910 mysql_master_session .cc : 229]MaestríasesiónEntrada principal cicloI030615:57 : 13.899550 27910 binlog .cc: 626]Actualizarbinlogposicionesa fine_pos: binlog.000000:15251152 , gtid:0–0 – 7192I030615:57 : 13.899572 27910 [ Previous_gtids len = 67 ] binlog .cc:616]Salto escribiendo eventoI030615:57 : 13.899585 27910 binlog .cc: 626]Actualizarbinlogposicionesa fine_pos: binlog.000000:15251152 ,gtid: |
0
–
En conclusión, puede ser bueno realizar más pruebas antes de usar Ripple en producción y descubrir sus otras opciones, pero a primera vista parece ser un producto muy agradable y útil. — Foto de KishornantuUnsplash