Redis Psync

Redis Psync

Introduzione alla replicazione Redis

Redis è costruito con varie caratteristiche per garantire l'alta disponibilità delle sue istanze. Oltre alle funzionalità avanzate ad alta disponibilità come il clustering e Sentinel, la replica Master-Replica è disponibile per la configurazione e l'uso con uno sforzo minimo. Un'istanza master (leader) può avere più casi di follower in cui ogni follower è una copia esatta dell'istanza leader. Ogni volta che una replica viene disconnessa dalla sua istanza di leader, si rivolge per stabilire nuovamente la connessione e clonare automaticamente il master.

Come puoi vedere nell'illustrazione data, quando il master e le repliche sono ben connesse, il maestro invia tutti i comandi di scrittura e le azioni che cambiano il set di dati Master in replicas in modo asincrono. Questo processo è a bassa latenza e ottimizzato per le prestazioni.

Inoltre, in caso di pausa Master-Replica, le repliche si riconnetteranno e proveranno ad acquisire solo i comandi mancati a causa della disconnessione. Si chiama sincronizzazione parziale. In alcuni casi, la sincronizzazione parziale non è possibile. Quindi, si verifica una risincronizzazione completa in cui l'istanza principale genera un'istantanea dei suoi dati, la spinge alle repliche e invia tutti i comandi che influiscono sulle modifiche del set di dati.

Il comando Psync/Sync

Quando le repliche si collegano a un master, usano il comando psync per comunicare con l'istanza principale. In questo processo di sincronizzazione parziale, la replica data invia l'ID di replicazione principale e i valori di offset al server principale. All'estremità ricevente, queste due informazioni vengono utilizzate per trasmettere le modifiche incrementali del set di dati dal master all'istanza di replica.

In breve, l'ID replica e l'offset rappresentano una versione esatta del set di dati master. A ogni nodo principale viene assegnata una stringa pseudo-casuale univoca che si chiama ID di replica. Inoltre, il master mantiene un valore di offset che viene incrementato per ogni pezzo di dati prodotti per essere spinto alle repliche.

Come mostrato nell'illustrazione precedente, poiché il set di dati Master è stato modificato a causa delle scritture del cliente, il valore di offset di replica è cambiato da 12324 a 15693. Quindi, la replica chiama il comando psync con il valore di offset aggiornato.

Sintassi
Il comando psync ha la seguente sintassi:

Psync Master_Replication_id Master_Replication_Offset

Master_Replication_id: Questa è la stringa pseudo-casuale generata che rappresenta un determinato set di dati.

Master_replication_offset: Il valore di offset che viene incrementato per ogni pezzo di byte generato da inviare alle repliche.

Questo comando restituisce un pezzo di dati e scrive dal master a un'istanza di replica. In breve, il comando PSYNC avvia un flusso di replica dall'istanza leader all'istanza di replica che trasferisce le richieste di scrittura del set di dati e client modificate dall'offset precedente.

Caso d'uso: sincronizzazione della replica con il master

Cominciamo con un paio di istanze del server Redis in diverse porte come 6379 e 6380. È possibile utilizzare il seguente comando:

Redis-Server-Porta 6379
Redis-Server-Porta 6380

Successivamente, convertiamo un'istanza Redis in una replica usando il comando replicaf. Prima di allora, dobbiamo collegarci a tale istanza con Redis-Cli come mostrato da segue:

Redis -cli -p 6380

Ora, la connessione viene stabilita all'istanza del server Redis attivo e in esecuzione nella porta 6380. Facciamo questa istanza una replica dell'altra istanza di Redis che funziona alla porta 6379.

Ora, possiamo verificare se questa istanza è diventata una replica emettendo il seguente comando:

Come si può vedere, il ruolo viene visualizzato come schiavo per questa istanza. Eseguiamo lo stesso comando contro l'altra istanza e ispezioniamo:

È un nodo principale come mostrato nella finestra di uscita precedente.

Ispezioniamo da vicino come avviene la sincronizzazione tra le istanze master e slave. Ai fini dimostrativi, viene utilizzato il comando di sincronizzazione. Si comporta uguale al comando psync, tranne per il fatto che la sincronizzazione parziale non è consentita.

Emettiamo il comando di sincronizzazione dalla replica.

Ora emettiamo un comando di scrittura all'istanza principale tramite la CLI.

Come previsto, il comando di scrittura viene trasferito alla replica immediatamente seguita da ping. Il comando psync funziona come il comando di sincronizzazione ma con sincronizzazione parziale abilitata.

Conclusione

In sintesi, Redis viene fornito con diverse funzionalità che consentono un'alta disponibilità. Il modello Master-Replica è una delle tecniche supportate da Redis per assicurarsi che almeno un'istanza del server Redis sia disponibile in un determinato momento. Ogni replica è sincronizzata con il suo master e emette il comando PSYNC per creare un flusso di replica che trasmetta il set di dati modificato e scrive le richieste dal master. Come accennato, il comando psync si comporta come il vecchio comando di sincronizzazione ma con la sincronizzazione parziale abilitata.