Redis Psync

Redis Psync

Introducción a la replicación de Redis

Redis está construido con varias características para garantizar la alta disponibilidad de sus instancias. Además de las características avanzadas de alta disponibilidad como Clustering y Sentinel, la replicación maestra-replica está disponible para configurar y usar con un esfuerzo mínimo. Una instancia maestra (líder) puede tener múltiples instancias de seguidor en las que cada seguidor es una copia exacta de la instancia del líder. Cada vez que una réplica se desconecta de su instancia de líder, se vuelve a establecer la conexión nuevamente y clonar el maestro automáticamente.

Como puede ver en la ilustración dada, cuando el maestro y las réplicas están bien conectados, el maestro envía todos los comandos de escritura y las acciones que cambian el conjunto de datos maestro a las réplicas asincrónicamente. Este proceso es de baja latencia y optimización de rendimiento.

Además, en caso de un descanso maestro-replica, las réplicas se volverán a conectar e intentarán adquirir solo los comandos perdidos debido a la desconexión. Se llama sincronización parcial. En algunos casos, la sincronización parcial no es posible. Por lo tanto, una resincronización completa ocurre donde la instancia maestra genera una instantánea de sus datos, la empuja a las réplicas y envía todos los comandos que afectan las modificaciones del conjunto de datos.

El comando psync/sync

Cuando las réplicas se conectan a un maestro, usan el comando PSYNC para comunicarse con la instancia maestra. En este proceso de sincronización parcial, la réplica dada envía la ID de replicación maestra y los valores de compensación al servidor maestro. En el extremo receptor, estas dos piezas de información se utilizan para transmitir los cambios incrementales del conjunto de datos del maestro a la instancia de réplica.

En resumen, el ID y el compensación de replicación maestra representan una versión exacta del conjunto de datos maestro. A cada nodo maestro se le asigna una cadena pseudo-azar única que se llama ID de replicación. Además, el maestro mantiene un valor de desplazamiento que se incrementa para cada parte de los datos producidos para ser empujados a las réplicas.

Como se muestra en la ilustración anterior, dado que el conjunto de datos maestro se ha cambiado debido a las escrituras del cliente, el valor de compensación de replicación ha cambiado de 12324 a 15693. Por lo tanto, la réplica llama al comando PSYNC con el valor de desplazamiento actualizado.

Sintaxis
El comando PSYNC tiene la siguiente sintaxis:

Psync maestro_replication_id master_replication_offset

maestro_replication_id: Esta es la cadena pseudo-aleatorio generada que representa un conjunto de datos dado.

maestro_replication_offset: El valor de desplazamiento que se incrementa por cada parte del byte generado para enviar a las réplicas.

Este comando devuelve una pieza de datos y escribe del maestro a una instancia de réplica. En resumen, el comando PSYNC inicia una secuencia de replicación desde la instancia del líder a la instancia de réplica que transfiere el conjunto de datos y las solicitudes de escritura del cliente cambiaron de la compensación anterior.

Caso de uso: réplica de sincronización con maestro

Comencemos con un par de instancias de servidor Redis en diferentes puertos como 6379 y 6380. Puede usar el siguiente comando:

Redis-server-Port 6379
Redis-server --port 6380

A continuación, convertimos una instancia de Redis en una réplica utilizando el comando réplica de. Antes de eso, debemos conectarnos a esa instancia con el Redis-Cli como se muestra en lo siguiente:

redis -cli -p 6380

Ahora, la conexión se realiza a la instancia del servidor Redis en funcionamiento en el puerto 6380. Hagamos de esta instancia una réplica de la otra instancia de Redis que se ejecuta en el puerto 6379.

Ahora, podemos probar si esta instancia se ha convertido en una réplica al emitir el siguiente comando:

Como puede ver, el rol se muestra como esclavo para esta instancia. Ejecutemos el mismo comando contra la otra instancia e inspeccionemos:

Es un nodo maestro como se muestra en la ventana de salida anterior.

Inspeccionemos de cerca cómo ocurre la sincronización entre las instancias maestro y esclavo. Para fines de demostración, se utiliza el comando de sincronización. Se comporta lo mismo que el comando psync, excepto que no se permite la sincronización parcial.

Emitir el comando de sincronización de la réplica.

Ahora, emitimos un comando de escritura a la instancia maestra a través de la CLI.

Como se esperaba, el comando de escritura se transfiere a la réplica inmediatamente seguido de pings. El comando PSYNC funciona igual que el comando de sincronización pero con sincronización parcial habilitada.

Conclusión

En resumen, Redis viene con diferentes características que permiten una alta disponibilidad. El patrón Master-Replica es una de las técnicas compatibles con Redis para asegurarse de que al menos una instancia del servidor Redis esté disponible en un momento determinado. Cada réplica se sincroniza con su maestro y emite el comando PSYNC para crear un flujo de replicación que transmite el conjunto de datos cambiado y escriba las solicitudes del maestro. Como se mencionó, el comando PSYNC se comporta lo mismo que el antiguo comando de sincronización pero con sincronización parcial habilitada.