Scaling Redis: Guida alla configurazione di un Cluster Redis
Scopri come configurare e gestire un Cluster Redis per l'alta disponibilità e lo scaling orizzontale. Questa guida passo-passo copre l'installazione, la configurazione di nodi Redis multipli, la creazione del cluster tramite redis-trib.rb, l'aggiunta di repliche per la tolleranza ai guasti e i comandi di gestione essenziali. Lettura essenziale per scalare il tuo deployment Redis.
Scalare Redis: Guida alla Configurazione di un Cluster Redis
Redis Cluster aiuta quando una singola istanza Redis non è più sufficiente per la dimensione dei tuoi dati, il traffico o l'obiettivo di disponibilità. Suddivide le chiavi su più nodi primari e può promuovere repliche quando un primario fallisce.
Questa guida mostra il flusso di lavoro corrente redis-cli --cluster, un esempio locale a sei nodi e i comandi di gestione necessari dopo che il cluster è in esecuzione.
Comprensione dei Concetti di Redis Cluster
Redis Cluster è costruito attorno ad alcune idee pratiche:
- Sharding: Redis Cluster divide lo spazio delle chiavi in 16.384 slot di hash. Ogni nodo primario possiede un intervallo di slot, e i client che supportano il cluster instradano i comandi al nodo che possiede lo slot della chiave.
- Replicazione: Ogni primario può avere una o più repliche. Se un primario fallisce e il cluster può ancora raggiungere il quorum, una replica può essere promossa.
- Bus del cluster: I nodi comunicano tra loro sulla porta del client e su una porta del bus del cluster, di solito la porta del client più 10000. Per la porta
7000, ciò significa porta bus17000. - Supporto client: Il tuo client applicativo deve supportare i reindirizzamenti di Redis Cluster come
MOVEDeASK. Un client che non supporta il cluster si comporterà male una volta che le chiavi risiedono su nodi diversi.
Prerequisiti
Per un cluster in stile produzione, pianifica almeno sei nodi Redis: tre primari e una replica per ogni primario. Puoi eseguire l'esempio seguente su una singola macchina per esercitarti, ma i nodi di produzione dovrebbero essere distribuiti su host o zone di disponibilità.
Hai anche bisogno di Redis installato, redis-cli disponibile e accesso di rete tra tutti i nodi sia sulle porte client Redis che sulle porte del bus del cluster. Usa una versione di Redis attualmente supportata quando possibile.
Configurazione di un Cluster Redis Passo dopo Passo
Questo esempio utilizza sei processi Redis locali sulle porte 7000 fino a 7005.
1. Installare Redis
Su Debian o Ubuntu, l'installazione del pacchetto appare così:
sudo apt update
sudo apt install redis-server
Le versioni dei pacchetti variano a seconda della distribuzione. Se hai bisogno di una versione più recente di Redis, usa i pacchetti ufficiali di Redis o il servizio Redis gestito della tua piattaforma.
2. Configurare le Istanze Redis per la Modalità Cluster
Crea una directory e un file di configurazione per ogni processo Redis:
mkdir cluster
cd cluster
for port in 7000 7001 7002 7003 7004 7005; do
mkdir "$port"
cp /etc/redis/redis.conf "$port/redis.conf"
done
Modifica ogni redis.conf e imposta i valori specifici della porta. Per 7000/redis.conf, usa:
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1
Ripeti lo stesso schema per 7001 fino a 7005, cambiando sia port che cluster-config-file. Il file nodes-7000.conf è gestito da Redis. Non modificarlo manualmente.
Per server remoti, esegui il bind all'interfaccia di rete privata invece di 127.0.0.1 e proteggi l'accesso con firewall, autenticazione e TLS dove supportato dalla tua build o servizio Redis.
3. Avviare le Istanze Redis
Avvia ogni istanza con la propria configurazione:
for port in 7000 7001 7002 7003 7004 7005; do
redis-server "$port/redis.conf"
done
Se il tuo gestore di pacchetti esegue già un servizio Redis predefinito sulla porta 6379, tienilo separato da questo cluster di test o fermalo mentre sperimenti.
4. Creare il Cluster con redis-cli --cluster
Usa redis-cli --cluster create per assegnare slot e repliche:
redis-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
Redis mostrerà la disposizione proposta degli slot e chiederà conferma. Digita yes se il posizionamento di primari e repliche sembra corretto.
5. Verificare il Cluster
Controlla il cluster da qualsiasi nodo:
redis-cli -c -p 7000 CLUSTER INFO
redis-cli -c -p 7000 CLUSTER NODES
redis-cli --cluster check 127.0.0.1:7000
CLUSTER INFO dovrebbe mostrare cluster_state:ok. Il flag -c dice a redis-cli di seguire i reindirizzamenti del cluster, utile quando testi comandi su chiavi che appartengono a un altro nodo.
Prova una scrittura e lettura di base:
redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1
Anche se la chiave appartiene a uno slot servito da un altro nodo, un client che supporta il cluster può seguire il reindirizzamento.
Aggiungere Repliche a un Cluster Esistente
Se hai già un cluster e vuoi aggiungere una nuova replica, avvia una nuova istanza Redis con la modalità cluster abilitata. Quindi trova l'ID del nodo primario:
redis-cli -p 7000 CLUSTER NODES
Aggiungi il nuovo nodo come replica di quel primario:
redis-cli --cluster add-node \
127.0.0.1:7006 127.0.0.1:7000 \
--cluster-slave \
--cluster-master-id <master_node_id>
Il primo indirizzo è il nuovo nodo. Il secondo indirizzo è qualsiasi nodo raggiungibile nel cluster esistente. Sostituisci <master_node_id> con l'ID da CLUSTER NODES.
Gestire il Cluster
Le attività di gestione comuni includono:
- Controllare la salute:
redis-cli --cluster check 127.0.0.1:7000 - Aggiungere un primario:
redis-cli --cluster add-node <nuovo_host:porta> <host_esistente:porta> - Ripartire gli slot:
redis-cli --cluster reshard <host_esistente:porta> - Rimuovere un nodo: sposta prima gli slot lontano dal nodo se è un primario, poi esegui
redis-cli --cluster del-node <host_esistente:porta> <node_id> - Test di failover manuale: esegui
CLUSTER FAILOVERda una replica, non dal primario
Evita di spostare manualmente gli slot con comandi di basso livello a meno che tu non conosca l'intera sequenza di migrazione. Gli helper redis-cli --cluster riducono la possibilità di lasciare gli slot in uno stato incoerente.
Migliori Pratiche per Redis Cluster
- Usa almeno sei nodi: Tre primari e tre repliche danno al cluster spazio per tollerare un guasto di un primario.
- Distribuisci le repliche tra domini di guasto: Non posizionare un primario e la sua replica sullo stesso host o zona di disponibilità quando puoi evitarlo.
- Proteggi Redis: Non esporre Redis direttamente a reti non fidate. Usa reti private, regole firewall, autenticazione e TLS dove disponibile.
- Pianifica la memoria per primario: Redis Cluster suddivide le chiavi, ma ogni primario ha ancora bisogno di memoria sufficiente per i dati assegnati, l'overhead e la crescita.
- Usa client che supportano il cluster: Conferma che la tua libreria client supporti Redis Cluster prima di trasferire il traffico.
- Monitora il failover e il bilanciamento degli slot: Tieni traccia di memoria, latenza, connessioni rifiutate, ritardo di replicazione e stato del cluster.
Conclusione
Per un Redis Cluster pratico, inizia con almeno tre primari e una replica per primario, crea il cluster con redis-cli --cluster create e verificalo con CLUSTER INFO più redis-cli --cluster check. Dopodiché, il tuo lavoro quotidiano è monitorare memoria, bilanciamento degli slot, comportamento del failover e compatibilità del client.