Come Configurare un Cluster Redis in CentOS 8 – Parte 3

Redis Cluster è una funzionalità integrata di Redis che supporta lo sharding automatico, la replica e l’alta disponibilità che in precedenza venivano implementati utilizzando Sentinels. È progettato per due scopi principali: uno è quello di suddividere automaticamente il tuo dataset tra più istanze e in secondo luogo di fornire un certo grado di disponibilità durante le partizioni, per continuare le operazioni quando alcune istanze (specialmente i master) falliscono o non sono in grado di comunicare con la maggior parte dei nodi nel cluster.

Tuttavia, il cluster smette di funzionare in caso di guasti più grandi (ad esempio quando la maggior parte delle istanze master non è disponibile). Inoltre, se un master e uno slave falliscono contemporaneamente, il cluster non può continuare le operazioni normali (anche se la soluzione alternativa è aggiungere più nodi o creare un’asimmetria nel cluster, per modificare automaticamente la disposizione del cluster).

Secondo la documentazione del cluster Redis, il “cluster minimo” che funziona come previsto deve contenere almeno 3 nodi master. Ma la configurazione più adatta per l’alta disponibilità dovrebbe avere almeno 6 nodi con tre master e tre slave, ciascun master con uno slave.

Importante: Redis Cluster ha anche alcune limitazioni che sono la mancanza di supporto per ambienti NATted così come quelli in cui gli indirizzi IP o le porte TCP vengono riassegnati ad esempio sotto Docker. Inoltre, non tutte le librerie client lo supportano.

Questo articolo mostra come configurare un Cluster Redis (con Cluster-Mode Disabilitato) in CentOS 8. Include come installare Redis, configurare i nodi del cluster, creare un cluster e testare il failover del cluster.

Nota: Per questa guida, utilizzeremo istanze Redis fresche/vuote per eseguire la modalità cluster. La modalità cluster non funzionerà con alcune configurazioni effettuate nei primi due guide della nostra Serie Redis, in particolare non funziona quando viene utilizzato il parametro replica.

Prerequisiti:

  1. Server con Installazione CentOS 8

Configurazione dell’Ambiente di Test

Redis Master1: 10.42.0.247
Redis Master2: 10.42.0.197
Redis Master3: 10.42.0.132

Redis Slave1: 10.42.0.200
Redis Slave2: 10.42.0.21
Redis Slave3: 10.42.0.34
Redis Cluster Logical Diagram

La nostra configurazione prevede 3 nodi master read/write e 3 nodi replica read-only, ciascun master con una replica, quindi tre shard contengono tutti i dati del cluster in ciascun nodo. Un’applicazione API o un client CLI può scrivere solo sui nodi master ma leggere da qualsiasi nodo nel cluster.

Passaggio 1: Installazione di Redis su Tutti i Nodi

1. Accedi a tutte le istanze tramite SSH, quindi esegui il seguente comando per installare il modulo Redis utilizzando il gestore di pacchetti DNF come mostrato.

# dnf module install redis

2. Successivamente, avvia il servizio Redis, abilita l’avvio automatico al boot del sistema e controlla lo stato per verificare che sia in esecuzione (verifica il servizio su tutte e 6 le istanze):

# systemctl start redis
# systemctl enable redis
# systemctl status redis

Passaggio 2: Configurazione delle istanze Redis su tutti i nodi

3. Questa sezione descrive come configurare i nodi del cluster Redis. Ricorda di eseguire le configurazioni qui su tutti i nodi.

Utilizza il file di configurazione /etc/redis.conf per configurare il server Redis. Come pratica consigliata, crea un backup del file originale prima di modificarlo utilizzando un editor di testo da riga di comando a tua scelta.

# cp /etc/redis.conf /etc/redis.conf.orig
# vi /etc/redis.conf

4. Successivamente, trova i seguenti parametri di configurazione e modifica i loro valori come mostrato. Il parametro bind imposta l’interfaccia su cui il server Redis ascolterà, imposta il suo valore sull’IP LAN dell’istanza. Rimuovi il 127.0.0.1 perché abbiamo notato che lasciarlo lì rallenta il processo di creazione del cluster, in particolare la fase di unione al cluster.

bind  10.42.0.247

Quindi impostare la modalità protetta su no per consentire connessioni dalle altre istanze nel cluster.

protected-mode no

Il parametro della porta definisce la porta su cui il server Redis sarà in ascolto per le connessioni, il valore predefinito è 6379. Questa è la porta dati per comunicare con i clienti.

port 6379
Set Redis Listen Interface and Port

5. Il prossimo insieme di parametri abiliterà la modalità cluster e impostará alcune delle sue utili funzionalità. Il parametro cluster-enabled, quando impostato su , attiva la modalità cluster.

cluster-enabled yes

Successivamente, il parametro cluster-config-file imposta il nome del file di configurazione del cluster di un nodo del cluster (ad es. nodes-6379.conf). Il file viene creato nella directory di lavoro (predefinito è /var/lib/redis definito utilizzando il parametro dir) e non è modificabile dall’utente.

cluster-config-file nodes-6379.conf

La prossima opzione utile del cluster è cluster-node-timeout, viene utilizzata per impostare il tempo massimo in millisecondi per cui un’istanza può essere non disponibile affinché venga considerata in uno stato di errore. Un valore di 15000 è equivalente a 15 secondi.

cluster-node-timeout 15000
Set Cluster Node Timeout

6. È anche necessario abilitare la persistenza di Redis su disco. È possibile utilizzare una delle modalità di persistenza, che è il File Append Only (AOF): registra (nel file appendonly.aof creato nella directory di lavoro) ogni operazione di scrittura ricevuta con successo dal server. I dati verranno riprodotti durante l’avvio del server per ricostruire l’insieme di dati originale.

Per abilitarlo, impostare il parametro appendonly su .

appendonly yes
Set Persistence Options

7. Dopo aver apportato tutte le modifiche, riavviare il servizio Redis su tutti i nodi per applicare le modifiche recenti.

# systemctl restart redis

8. A questo punto, ogni nodo del cluster dovrebbe ora avere un ID. Puoi verificarlo nel file di log situato in /var/log/redis/redis.log.

# cat /var/log/redis/redis.log
Check Cluster Node Log File

9. Successivamente, aprire le porte 6397 e 16379 su tutte le istanze. La seconda porta è utilizzata per il bus del cluster (un canale di comunicazione da nodo a nodo utilizzando un protocollo binario). Questo è un requisito fondamentale per le connessioni TCP del cluster Redis.

# firewall-cmd --zone=public --permanent --add-port=6379/tcp 
# firewall-cmd --zone=public --permanent --add-port=16379/tcp 
# firewall-cmd --reload

Passaggio 3: Creazione del cluster Redis

10. Per creare il cluster, utilizzare il client a riga di comando redis-cli come segue. Il comando --cluster create abilita la creazione del cluster e --cluster-replicas 1 significa creare una replica per ogni master.

Per la nostra configurazione che ha 6 nodi, avremo 3 master e 3 slave.

Nota che i primi 6 nodi saranno considerati master (M) e i successivi tre saranno considerati slave (S). Il primo slave cioè 10.42.0.200:6379 replica il primo master cioè 10.42.0.247:6379, il secondo slave replica il secondo master, in quell’ordine.

Il comando seguente è formattato in modo che l’output rappresenti la nostra configurazione logica sopra.

# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1
Create Redis Cluster

11. Una volta che la creazione del cluster è avvenuta con successo, eseguire il seguente comando su qualsiasi host (specificare il suo indirizzo IP utilizzando il flag -h) per elencare tutti i nodi del cluster.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Dovresti essere in grado di vedere tutti i nodi del cluster, con gli slave che indicano i loro master, come mostrato nello screenshot seguente.

Check All Cluster Nodes on Any Node

I diversi campi sono in quest’ordine: ID nodo, indirizzo IP:porta, flag, ultimo ping inviato, ultimo pong ricevuto, epoca di configurazione, stato del collegamento, slot (per i master).

Passaggio 4: Test del Failover del Cluster Redis

12. In questa sezione, dimostreremo come testare un failover del cluster. Prima di tutto, prendiamo nota dei master.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
List Redis Cluster Masters

Prendere nota anche degli slave Redis.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
List All Redis Cluster Slaves

13. Successivamente, fermiamo il servizio Redis su uno dei nodi master, ad esempio 10.42.0.197 e controlliamo tutti i nodi master nel cluster.

# systemctl stop redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

Dallo screenshot seguente, puoi vedere che il nodo 10.42.0.197:6367 è in stato di fallimento e il suo slave 10.42.0.21:6379 è stato promosso a stato di master.

Check Cluster Failover Status

14. Ora riavviamo il servizio Redis sul nodo fallito e controlliamo tutti i master nel cluster.

# systemctl start redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
Check All Redis Cluster Master Status

Controllare anche gli slave del cluster per confermare che il master fallito è ora uno slave.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
Check All Redis Cluster Slaves

Passaggio 5: Test della Replica dei Dati Attraverso il Cluster Redis

15. Quest’ultima sezione spiega come verificare la replica dei dati del cluster. Creeremo una chiave e un valore su uno dei master, quindi cercheremo di leggerli da tutti i nodi del cluster come segue. Utilizzare l’opzione -c per abilitare il supporto del cluster nell’utilità redis-cli e accedere ai dati in modalità cluster.

# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com'
# redis-cli -c -h 10.42.0.247 -p 6379 get name
# redis-cli -c -h 10.42.0.21 -p 6379 get name
# redis-cli -c -h 10.42.0.132 -p 6379 get name
# redis-cli -c -h 10.42.0.200 -p 6379 get name
# redis-cli -c -h 10.42.0.197 -p 6379 get name
# redis-cli -c -h 10.42.0.34 -p 6379 get name
Verify Redis Cluster Data Replication

In definitiva, il Redis Cluster è il modo preferito per ottenere sharding automatico, replica e alta disponibilità. Ci sono molti altri parametri di configurazione ben documentati nel resto del file /etc/redis.conf, è possibile trovare ulteriori informazioni nella documentazione ufficiale: Tutorial sul cluster Redis e specifica del cluster Redis.

Questo ci porta alla fine della serie di tutorial su Redis in tre parti. Il modulo di feedback qui sotto può essere utilizzato per inviare domande o commenti.

Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/