2011-01-31 14 views
7

No me queda claro desde el documentation on replication si el SYNC command está bloqueando.¿Al agregar un esclavo redis se emite una llamada de bloqueo al maestro?

Parece que no debería ser (después de todo, hacer girar un nuevo esclavo detendría el maestro desde solicitudes de publicación), pero me gustaría obtener una confirmación al respecto.

Por contexto, estoy buscando agregar un esclavo a un host maestro de aproximadamente 8 GB de datos sin sincronización de disco *.

* Históricamente, la pérdida de datos no ha sido una preocupación. Estamos cambiando eso, por lo que la replicación y la persistencia están siendo "respaldadas" en cierta medida.

Respuesta

18

el maestro simplemente realizará un BGSAVE en la solicitud SYNC del esclavo, por lo que no es una operación de bloqueo.

Así que la secuencia es:

  • esclavo pide SINC
  • BGSAVE
  • maestro, esclavo espera
  • BGSAVE maestro terminado, los datos por lotes iniciales (el archivo .rdb) se transfiere al esclavo
  • maestro acumula todas las nuevas diferencias para el esclavo
  • maestro termina enviando el archivo rdb inicial al esclavo
  • ma Ester comienza a alimentar al esclavo con el buffer acumulado, y con cualquier cosa nueva que llegue de los clientes, si están escritos.

También funciona si el maestro no está configurado para guardar, simplemente producirá un .rdb solo para el maestro < -> sincronización esclava. En instancias maestras configuradas sin líneas "guardar" en redis.conf, BGSAVE no se llama automáticamente, pero el usuario puede llamarlo si es necesario guardar un archivo .rdb.

+0

¿Cómo puedo evitar un bgsave? Quiero saltar al último paso. Pero de otra manera, tengo ambas mismas instancias redis, esclavas de otra instancia, que sé que no tengo que hacer lo de rdb SYNC. es posible ? – wener

+0

Hay una rama experimental que hace esto en realidad, si marca en Github se llama "nosync", y está codificado contra "inestable". – antirez

+0

Gracias, comprobaré – wener

Cuestiones relacionadas