Ricerca nel sito web

Come configurare un cluster Redis in CentOS 8 - Parte 3


Redis Cluster è una funzionalità Redis integrata che supporta lo sharding automatico, la replica e l'alta disponibilità precedentemente implementata utilizzando Sentinels. È progettato per due scopi principali: il primo è dividere automaticamente il set di dati tra più istanze e il secondo è fornire un certo grado di disponibilità durante le partizioni, per continuare le operazioni quando alcune istanze (soprattutto 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ù gravi (ad esempio quando la maggior parte delle istanze master non sono disponibili). Inoltre, se un master e uno slave si guastano contemporaneamente, il cluster non può continuare le normali operazioni (sebbene la soluzione alternativa sia aggiungere più nodi o creare un'asimmetria nel cluster, per modificare automaticamente il layout del cluster).

Secondo la documentazione del cluster Redis, il "cluster minimo" che funziona come previsto richiede di 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, ciascuno dei quali ha uno slave.

Importante: Redis Cluster presenta anche alcune limitazioni, tra cui la mancanza di supporto per gli ambienti NATted e quelli in cui gli indirizzi IP o le porte TCP vengono rimappate per istanza in Docker. Inoltre, non tutte le librerie client lo supportano.

Questo articolo mostra come configurare un Cluster Redis (con Modalità cluster disabilitata) 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 nelle prime due guide della nostra serie Redis, in particolare non funziona quando viene utilizzata la replica del parametro.

Prerequisiti:

  1. Server con installazione CentOS 8

Configurazione dell'ambiente di prova

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

La nostra configurazione prevede 3 nodi master di lettura/scrittura e 3 nodi di replica di sola lettura, ciascun master ha una replica, quindi tre frammenti contengono tutti i dati del cluster in ciascun nodo. Un client API o CLI dell'applicazione 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 comando seguente per installare il modulo Redis utilizzando il gestore pacchetti DNF come mostrato.

dnf module install redis

2. Successivamente, avvia il servizio Redis, abilitalo all'avvio automatico all'avvio del sistema e controllane 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. Ricordatevi di eseguire qui le configurazioni 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 di 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 relativi valori come mostrato. Il parametro bind imposta l'interfaccia del server Redis su cui sarà in ascolto, imposta il suo valore sull'IP LAN dell'istanza. Rimuovi 127.0.0.1 perché ci siamo resi conto che lasciarlo lì rallenta il processo di creazione del cluster, in particolare la fase di unione al cluster.

bind  10.42.0.247

Quindi imposta la modalità protetta su no per consentire le connessioni dalle altre istanze sul cluster.

protected-mode no

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

port 6379

5. Il prossimo set di parametri abiliterà la modalità cluster e imposterà alcune delle sue funzioni utili. Il parametro abilitato per il cluster, se impostato su yes, 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 cluster (ad esempio nodes-6379.conf). Il file viene creato nella directory di lavoro (l'impostazione predefinita è /var/lib/redis definita utilizzando il parametro dir) e non è modificabile dall'utente.

cluster-config-file nodes-6379.conf

La successiva opzione utile del cluster è cluster-node-timeout, viene utilizzata per impostare il periodo di tempo massimo in millisecondi in cui un'istanza può essere non disponibile per essere considerata in uno stato di errore. Un valore di 15000 equivale a 15 secondi.

cluster-node-timeout 15000

6. Dobbiamo anche abilitare la persistenza Redis su disco. Possiamo utilizzare una delle modalità di persistenza, ovvero l'Append Only File (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 il set di dati originale.

Per abilitarlo, imposta il parametro appendonly su yes.

appendonly yes

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 registro situato in /var/log/redis/redis.log.

cat /var/log/redis/redis.log

9. Successivamente, apri le porte 6397 e 16379 su tutte le istanze. La porta successiva viene utilizzata per il bus del cluster (un canale di comunicazione nodo a nodo che utilizza un protocollo binario). Questo è un requisito di base 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 da riga di comando redis-cli come segue. --cluster create abilita la creazione del cluster e --cluster-replicas 1 significa creare una replica per master.

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

Tieni presente che i primi 6 nodi saranno considerati master (M) e i successivi tre saranno considerati slave (S). Il primo slave, ovvero 10.42.0.200:6379, replica il primo master, ovvero 10.42.0.247:6379, il secondo slave replica il secondo master, in quest'ordine.

Il seguente comando è formattato in modo che il risultato 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

11. Una volta che la creazione del cluster ha avuto esito positivo, esegui il seguente comando su qualsiasi host (specifica 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.

I diversi campi sono in questo 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. Innanzitutto, prendiamo nota dei maestri.

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

Inoltre, prendi nota degli schiavi Redis.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

13. Successivamente, interrompiamo 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

Dalla schermata seguente, puoi vedere che il nodo 10.42.0.197:6367 è in stato di errore e il suo slave 10.42.0.21:6379 è stato promosso allo stato di master.

14. Ora avviamo nuovamente il servizio Redis sul nodo guasto e controlliamo tutti i master nel cluster.

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

Inoltre, controllare gli slave del cluster per confermare che il master guasto sia ora uno slave.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

Passaggio 5: test della replica dei dati nel 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 proveremo a leggerlo da tutti i nodi del cluster come segue. Utilizza 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

La conclusione è che Redis Cluster è il modo preferito per ottenere partizionamento automatico, replica e disponibilità elevata. Ci sono molti altri parametri di configurazione ben documentati nel resto del file /etc/redis.conf; puoi trovare ulteriori informazioni nella documentazione ufficiale: tutorial sul cluster Redis e specifica del cluster Redis.

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