Come configurare la replica di Redis (con cluster-mode disabilitato) in CentOS 8 – Parte 1

Redis (Remote Dictionary Server) è un server di database/struttura dati in memoria molto popolare e ampiamente utilizzato, open source, veloce, distribuito ed efficiente.

Offre un ricco set di funzionalità che lo rendono efficace per una vasta gamma di casi d’uso: come database, livello di caching, message broker o coda; applicabile in applicazioni web, chat e messaggistica, giochi, analisi dati in tempo reale e molto altro ancora.

Supporta strutture dati flessibili, replicazione asincrona master-slave per scalare le prestazioni di lettura e proteggersi dalla perdita di dati, sharding lato client per scalare le prestazioni di scrittura, due forme di persistenza per scrivere i dati in memoria su disco in un formato compatto, clustering e partizionamento. Presenta inoltre failover automatici per distribuzioni ad alta disponibilità tramite Redis Sentinel, scripting Lua, transazioni e molto altro ancora.

Essendo un database NO SQL o non relazionale, Redis offre alcuni vantaggi prestazionali rispetto ai sistemi di database tradizionali (come MySQL/MariaDB, PostgreSQL, ecc.), poiché tutti i suoi dati risiedono o sono memorizzati in memoria, rendendoli facilmente accessibili a un’applicazione, mentre i database tradizionali devono scrivere tutti i dati su disco o leggerli da esso o da una fonte esterna.

Redis è diventato una scelta sempre più diffusa per la memorizzazione nella cache, che consente il riutilizzo dei dati memorizzati nella cache (all’interno dello spazio di memoria principale di un’applicazione) anziché interrogare sempre un database per i dati utilizzati frequentemente. Quindi è un compagno fantastico di RDMS (Sistemi di Gestione di Database Relazionali) per migliorare in definitiva le prestazioni dell’applicazione.

In questa serie di tutorial in tre parti su Redis, copriremo come configurare e utilizzare alcune delle principali funzionalità di Redis che sono la replica, l’alta disponibilità utilizzando Redis Sentinel e Redis Cluster, gli articoli sono:

Part 1: How To Setup Redis Replication(with Cluster-Mode Disabled) in CentOS 8

Questa guida mostra come configurare la Replica di Redis (con Modalità Cluster Disabilitata) in CentOS 8 Linux, inclusa l’installazione di Redis, la configurazione del master e delle repliche, e il test della replica.

Importante: Un Cluster Redis (cioè un Cluster di Replica) con la modalità cluster disabilitata ha un singolo gruppo di nodi (ad esempio un master e uno o due repliche), mentre un cluster Redis con la modalità cluster abilitata può essere composto da due o più gruppi di nodi (ad esempio tre master ciascuno con slave o due).

Prerequisiti:

  1. Server con Installazione CentOS 8

Configurazione dell’Ambiente di Test

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34
Logical Representation of Redis Replication Diagram

Con la configurazione sopra (che ha un singolo nodo primario/master di lettura/scrittura e 2 nodi replica di sola lettura), abbiamo un singolo gruppo di nodi che contiene tutti i dati del cluster in ciascun nodo. Una volta che uno slave si connette a un master, riceve una copia iniziale del database completo e tutti i dati che esistevano precedentemente nello slave verranno scartati.

Inoltre, un client può scrivere solo sul master ma leggere da qualsiasi nodo nel cluster. E poiché le scritture vengono eseguite sul master, vengono propagate a tutti gli slave connessi per l’aggiornamento dei dataset slave in tempo reale.

Passo 1: Installazione di Redis su CentOS 8

1. Per iniziare, accedi a tutti i nodi CentOS 8 tramite SSH, quindi installa il pacchetto Redis su tutti i nodi (master e repliche) utilizzando il gestore dei pacchetti DNF come mostrato.

# dnf install @redis

2. Al termine dell’installazione del pacchetto Redis, avvia il servizio Redis, abilita l’avvio automatico ad ogni avvio del sistema e verifica se è in esecuzione come segue.

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

3. Puoi anche confermare che il server Redis è in esecuzione controllando le porte in ascolto utilizzando il comando ss, come segue.

# ss -ltpn | grep redis-server
Confirm Redis Server Ports

Passo 2: Configurazione del server master di Redis

4. Redis è configurato utilizzando il file di configurazione /etc/redis.conf, un file di configurazione di esempio auto-documentato. Prima, creare un backup del file originale, quindi aprirlo per la modifica utilizzando il tuo editor a riga di comando preferito.

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

5. Per impostazione predefinita, un’istanza di Redis è configurata per ascoltare e accettare connessioni sull’interfaccia loopback, utilizzando la direttiva bind. Per comunicare con le repliche, il master dovrebbe essere configurato per ascoltare sull’indirizzo di loopback IPv4 e sul suo indirizzo IP LAN cioè 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. Successivamente, impostare il parametro protected-mode su no per consentire la comunicazione con le repliche come mostrato.

protected-mode no

Inoltre, Redis ascolta sulla porta 6379 che è impostata utilizzando la direttiva port. Questa è la porta dati per comunicare con le API dell’applicazione o i client CLI.

port 6379
Configuring Redis Master Server

7. Per proteggere facoltativamente le comunicazioni master-replica, possiamo proteggere il master utilizzando la direttiva requirepass, in modo che i client/repliche debbano emettere una password di autenticazione prima di eseguire eventuali comandi o avviare un processo di sincronizzazione della replica, altrimenti il master rifiuterà la richiesta del client/replica (ricordarsi di impostare una password sicura).

Utilizzeremo l’opzione seguente a scopo dimostrativo, per mostrare come funziona.

requirepass  Securep@55Here
Set Authentication Password

8. Inoltre, i log di Redis sono memorizzati nel file /var/log/redis/redis.log, questo è impostato utilizzando la direttiva logfile e il livello di verbosità predefinito del server è notice, definito utilizzando il parametro loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log
Set Redis Log File and Log Level

9. Poiché systemd è il sistema e il gestore di servizi predefinito in CentOS 8, è possibile configurare Redis per interagire con l’albero di supervisione di systemd impostando il parametro supervised su systemd.

supervised systemd
Set Redis Supervisor to Systemd

10. Dopo aver apportato tutte le configurazioni necessarie, salvare il file e chiuderlo. Quindi riavviare il servizio Redis per applicare le nuove modifiche.

# systemctl daemon-reload
# systemctl restart redis

11. Per accedere al server Redis, è necessario utilizzare il redis-cli (un’interfaccia a riga di comando per il redis-server). Per impostazione predefinita, si connette al server su localhost (a 127.0.0.1 porta 6379). Si noti che poiché il server è protetto da client che utilizzano una password, l’esecuzione di un comando prima dell’autenticazione dovrebbe fallire.

Utilizzare il comando auth per fornire la password di autenticazione come mostrato nella seguente schermata.

# redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list
Access Redis Server via Redis CLI

12. Per connettersi a una replica (dopo averle configurate come descritto nella sezione successiva), utilizzare le opzioni -h e -p per specificare rispettivamente l’indirizzo IP/nome host della replica e la porta (notare che la porta 6379 deve essere aperta nel firewall della replica).

# redis-cli -h 10.42.0.21 -p 6379

13. Successivamente, apri la porta dei dati del server Redis nel firewall per consentire connessioni in ingresso al master, e successivamente ricarica le regole del firewall usando il comando firewall-cmd come mostrato.

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

Passaggio 3: Configurazione dei server replica/schiavo di Redis

14. Per impostare rapidamente un’istanza Redis come replica al volo, utilizza l’utilità redis-cli e chiama il comando REPLICAOF come mostrato.

# redis-cli replicaof 10.42.0.247 6379
OR
# redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379
Connect to a Master Redis Instance

15. Per rendere permanente una connessione di replica, è necessario apportare le seguenti modifiche nel file di configurazione. Inizia facendo il backup del file originale, quindi aprilo per la modifica.

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

16. Per consentire ai client di connettersi alla replica per leggere i dati, aggiungi l’indirizzo IP della replica alla direttiva bind.

# replica1
bind 127.0.0.1 10.42.0.21

# replica2
bind 127.0.0.1 10.42.0.34

Impostazione di un’istanza Redis come replica

17. Per configurare un’istanza Redis come replica, utilizza il parametro replicaof e imposta l’indirizzo IP del nodo master (o il nome host) e la porta come valori.

replicaof 10.42.0.247 6379

Impostazione della Replica per Autenticarsi al Master

18. Successivamente, poiché la nostra istanza master è protetta da una password, è necessario impostare la password nella configurazione della replica per consentirle di autenticarsi al master, utilizzando il parametro masterauth.

masterauth Securep@55Here

19. Inoltre, quando una replica perde la connessione con il master, o quando la replica è in corso, la replica è configurata per rispondere alle richieste dei client, eventualmente con dati “obsoleti“. Ma se è la prima sincronizzazione, allora il set di dati potrebbe essere semplicemente vuoto. Questo comportamento è controllato dal parametro replica-serve-stale-data.

E, poiché Redis 2.6 di default le repliche sono in sola lettura, questo è controllato dal parametro replica-read-only. Puoi apportare altre modifiche alla configurazione della replica per adattarle alle esigenze della tua applicazione.

20. Una volta apportate tutte le modifiche necessarie, riavvia il servizio Redis su tutte le repliche.

# systemctl restart redis

21. Inoltre, apri la porta 6379 nel firewall per consentire le connessioni dal master e dai client alle repliche, e ricarica le regole del firewall.

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

Passaggio 4: Controlla lo Stato della Replicazione Master-replica

22. Una volta completata la configurazione della replicazione master-replica, possiamo verificare se l’installazione funziona correttamente come segue.

Sul master, esegui i seguenti comandi.

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication
Check Redis Relocation Info on Master

23. Controlla anche lo stato della replicazione sulle repliche/slave come segue.

# redis-cli
127.0.0.1:6379> info replication
Check Redis Replication Info on Redis Replica 1
Check Redis Replication Info on Redis Replica 2

23. Ora testiamo la replicazione impostando una chiave-valore nell’istanza master e verifichiamo se i dati sono sincronizzati sulle repliche.

Sul master, fai questo:

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'www.tecmint.com'
Set Key Value in Master Instance

24. Quindi controlla se i dati sono stati sincronizzati sulle repliche come mostrato.

# redis-cli
127.0.0.1:6379> get domain
Check Data Sync Status on Replicas

Proteggere l’istanza principale dal rischio di perdere alcune scritture

25. Redis ha una funzionalità che consente a un’istanza principale di limitare il rischio di perdere alcune scritture nel caso in cui non siano disponibili abbastanza repliche, entro un numero specificato di secondi.

Ciò significa che un’istanza principale può smettere di accettare scritture se ci sono meno di N repliche collegate, con un ritardo inferiore o uguale a M secondi, come controllato rispettivamente dalle opzioni min-replicas-to-write e min-replicas-max-lag.

Per impostarle, decommentale e imposta i valori in base ai requisiti della tua configurazione in /etc/redis.conf, come mostrato nella seguente schermata. Questa configurazione significa che, dall’ultimo ping alle repliche, dopo 10 secondi, se ci sono meno di 2 repliche online, il master smetterà di accettare scritture.

min-replicas-to-write 2
min-replicas-max-lag 10
Protecting the Redis Master Against Loss of Write

Puoi trovare più opzioni nel resto del file di configurazione /etc/redis.conf e per ulteriori dettagli leggi sulla replica nella documentazione di Redis.

Nel prossimo articolo, affronteremo come configurare Redis per l’alta disponibilità con Sentinel in CentOS 8. Fino ad allora, resta sintonizzato e ricorda di condividere i tuoi pensieri e domande utilizzando il nostro modulo di commento qui sotto a tua disposizione per contattarci.

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