Guida alla configurazione della replica Primary-Replica di Redis.

Questa guida esperta offre un tutorial completo e passo-passo sulla configurazione della replica primary-replica di Redis per l'alta disponibilità e la scalabilità di lettura. Scopri come Redis gestisce la sincronizzazione completa e parziale, implementa la direttiva cruciale `replicaof` tramite file di configurazione o dinamicamente e monitora efficacemente lo stato della sincronizzazione utilizzando il comando `INFO replication`. Descriviamo in dettaglio le migliori pratiche per le configurazioni di produzione, comprese le configurazioni di sicurezza e i suggerimenti per l'ottimizzazione di dataset di grandi dimensioni.

40 visualizzazioni

Guida alla Configurazione della Replicazione Redis Primario-Replica

La replicazione Redis è un pattern fondamentale per ottenere alta disponibilità, ridondanza dei dati e scalabilità in lettura. Configurando un primario (precedentemente chiamato master) e una o più repliche (precedentemente chiamate slave), si garantisce che i dati scritti sul primario vengano copiati automaticamente su tutte le repliche connesse.

Questa guida fornisce un tutorial completo e passo-passo sulla configurazione della replicazione Redis primario-replica. Tratteremo le direttive di configurazione essenziali, i metodi di configurazione dinamica e i passaggi critici di monitoraggio necessari per costruire un deployment Redis robusto e affidabile.


1. Comprendere i Fondamentali della Replicazione Redis

La replicazione Redis è asincrona (il che significa che il primario non attende che la replica confermi le scritture), consentendo prestazioni elevate. Opera principalmente attraverso due fasi: sincronizzazione iniziale e sincronizzazione continua.

Sincronizzazione Completa (SYNC)

Quando una replica si connette a un primario per la prima volta, o dopo un'interruzione di rete che impedisce una risincronizzazione parziale, si verifica una sincronizzazione completa:

  1. La replica invia un comando PSYNC al primario.
  2. Il primario avvia un processo di salvataggio in background per generare un file snapshot RDB (.rdb).
  3. Il primario memorizza in un buffer tutti i nuovi comandi di scrittura ricevuti mentre l'RDB viene creato.
  4. Una volta completato il file RDB, il primario lo invia alla replica.
  5. La replica carica il file RDB in memoria.
  6. Infine, il primario invia tutti i comandi di scrittura bufferizzati alla replica per allinearsi.

Risincronizzazione Parziale (PSYNC)

Redis 2.8+ supporta la risincronizzazione parziale. Se il collegamento tra il primario e la replica si interrompe brevemente, la replica può richiedere solo i comandi mancanti da quando il collegamento si è interrotto, utilizzando il buffer di backlog della replicazione (un buffer circolare configurabile sul primario).

2. Prerequisiti e Configurazione

Prima di configurare la replicazione, assicurati di avere almeno due istanze Redis separate in esecuzione (o configurazioni separate in esecuzione su porte diverse sullo stesso server per scopi di test).

Per questa guida, assumiamo la seguente configurazione:

Istanza Ruolo Indirizzo IP Porta File di Configurazione
Primario Primario 192.168.1.100 6379 redis-primary.conf
Replica 1 Replica 192.168.1.101 6380 redis-replica-1.conf

Passo 2.1: Configurare l'Istanza Primario

Assicurati che la tua istanza primaria sia pronta ad accettare connessioni dalle repliche e sia configurata per gestire la persistenza (RDB o AOF) se richiesta per la propria stabilità del primario.

Impostazioni Cruciali del Primario:

  1. Binding: Assicurati che il primario sia associato a un indirizzo IP pubblico o a 0.0.0.0 se in esecuzione su più macchine. Se utilizzi firewall, assicurati che la porta 6379 sia aperta per gli IP delle repliche.
  2. Persistenza: Sebbene non strettamente richiesta per la replicazione stessa, l'abilitazione di RDB/AOF è fortemente raccomandata per la persistenza dei dati del primario.
# redis-primary.conf
port 6379
bind 0.0.0.0 # Si lega a tutte le interfacce (necessario per repliche esterne)
# Abilita la persistenza RDB
save 900 1
save 300 10
save 60 10000

Passo 2.2: Configurare l'Istanza Replica

Il cuore della configurazione di una replica risiede nella direttiva replicaof. Questa indica all'istanza con quale primario deve sincronizzare i suoi dati.

Impostazioni Cruciali della Replica:

  1. Porta: Utilizza una porta diversa se in esecuzione sulla stessa macchina.
  2. Direttiva di Replicazione: Usa replicaof o slaveof (il nome legacy).
# redis-replica-1.conf
port 6380

# *** Configurazione Essenziale della Replicazione ***
replicaof 192.168.1.100 6379

# Assicurati che le repliche siano di sola lettura (default da Redis 5)
replica-read-only yes

# Si consiglia di disabilitare la persistenza sulle repliche se l'HA è gestito da Sentinel/Cluster
# Se la persistenza è necessaria per riavvii rapidi, mantienila abilitata.
save ""

Nota: Se il primario è protetto da una password (usando requirepass), la replica deve essere configurata con masterauth <password> per autenticarsi correttamente.

3. Metodi di Implementazione

È possibile implementare la configurazione di replicazione modificando il file di configurazione (redis.conf) e riavviando il server, oppure dinamicamente utilizzando il comando CONFIG SET.

Metodo 3.1: File di Configurazione (Raccomandato per la Produzione)

Dopo aver aggiornato redis-replica-1.conf come mostrato sopra, avvia entrambe le istanze:

# Avvia Primario
redis-server redis-primary.conf

# Avvia Replica 1
redis-server redis-replica-1.conf

All'avvio, Replica 1 tenterà immediatamente di connettersi al primario all'indirizzo 192.168.1.100:6379 e inizierà il processo di sincronizzazione.

Metodo 3.2: Configurazione Dinamica

Se un'istanza Redis è già in esecuzione e desideri configurarla come replica senza riavviarla, usa CONFIG SET tramite redis-cli.

  1. Connettiti all'istanza che desideri convertire in una replica (in esecuzione sulla porta 6380 nel nostro esempio):

    bash redis-cli -p 6380

  2. Esegui il comando di replicazione:

    bash 127.0.0.1:6380> replicaof 192.168.1.100 6379 OK

L'istanza sulla porta 6380 eliminerà tutti i dati precedenti e avvierà una sincronizzazione completa (SYNC) con il nuovo primario.

⚠️ Avviso: Disabilitazione della Replicazione

Per trasformare una replica nuovamente in un'istanza primaria standalone, esegui replicaof no one su tale istanza.

4. Monitoraggio dello Stato della Replicazione

Il monitoraggio dello stato della connessione è vitale per garantire la coerenza dei dati. Utilizza il comando INFO replication tramite redis-cli sia sul primario che sulla replica.

4.1 Controllo dello Stato del Primario

Connettiti al primario (6379) e controlla quante repliche sono connesse e il loro stato:

redis-cli -p 6379 INFO replication

Estratto Output Atteso (Primario):

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6380,state=online,offset=2048,lag=0
master_replid:a9b1c2...
master_replid2:000000...
master_repl_offset:2048
  • role:master conferma il suo ruolo.
  • connected_slaves:1 conferma che la replica è visibile.
  • state=online è lo stato stabile desiderato.
  • lag=0 (o un numero molto basso) indica una performance di trasferimento dati sincrono riuscita.

4.2 Controllo dello Stato della Replica

Connettiti alla replica (6380) e controlla lo stato del collegamento con il primario:

redis-cli -p 6380 INFO replication

Estratto Output Atteso (Replica):

# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
  • role:slave conferma il suo ruolo.
  • master_link_status:up conferma che la connessione è attiva e in salute.
  • master_sync_in_progress:0 significa che la sincronizzazione iniziale è completa.

5. Best Practice e Ottimizzazione della Replicazione

5.1 Modalità di Sola Lettura per la Replica

Per impostazione predefinita, le repliche sono di sola lettura (replica-read-only yes). Questo è un meccanismo di sicurezza critico. Tentare di scrivere su una replica risulterà in un errore, garantendo la coerenza dei dati attraverso il cluster.

Se disabiliti la modalità di sola lettura, qualsiasi scrittura sulla replica sarà locale e verrà sovrascritta se il collegamento di replicazione si interrompe e si verifica una sincronizzazione completa.

5.2 Ottimizzare il Tempo di Sincronizzazione

Se il tuo dataset è molto grande, il processo SYNC iniziale può essere lento. Considera questi fattori:

  1. Larghezza di Banda della Rete: Assicurati una larghezza di banda sufficiente tra il primario e le repliche per il trasferimento RDB.
  2. Generazione RDB: Il primario necessita di CPU e I/O del disco per generare il file RDB. Assicurati che il server disponga di risorse disponibili durante la sincronizzazione.
  3. Disabilitare la Persistenza su Disco sulle Repliche (Opzionale): Se il primario gestisce tutta la persistenza e la replica serve solo per la scalabilità in lettura, impostare save "" sulla replica evita il sovraccarico di I/O dovuto alla scrittura dei file RDB, accelerando i riavvii.

5.3 Sicurezza e Configurazione di Rete

È fondamentale che il primario non esponga pubblicamente la sua porta di replicazione (6379 o altra) a Internet. Configura le regole del firewall per consentire il traffico di replicazione solo dagli indirizzi IP designati dei server di replica.

5.4 Utilizzare le Repliche per la Scalabilità in Lettura

Il vantaggio principale della replicazione è la distribuzione del carico di lettura. Indirizza le applicazioni che eseguono principalmente operazioni di lettura alle istanze di replica, riservando il primario per le operazioni di scrittura, migliorando la produttività complessiva del sistema.

Conclusione

Configurare la replicazione Redis primario-replica è essenziale per costruire applicazioni resilienti e ad alte prestazioni. Configurando correttamente la direttiva replicaof e monitorando regolarmente lo stato del collegamento utilizzando INFO replication, crei le basi per l'alta disponibilità e un'efficace scalabilità in lettura.

Anche se questa guida si concentra sulla configurazione di base, gli ambienti di produzione spesso integrano ulteriori livelli di automazione, come Redis Sentinel per la promozione automatica del primario e il rilevamento dei guasti, o Redis Cluster per il partizionamento e la distribuzione automatica dei dati su più nodi.