Hoe een Redis-cluster in te stellen in CentOS 8 – Deel 3

Redis Cluster is een ingebouwde functie van Redis die automatische sharding, replicatie en hoge beschikbaarheid ondersteunt, wat eerder werd geïmplementeerd met behulp van Sentinels. Het is ontworpen voor twee belangrijke doeleinden: ten eerste om uw dataset automatisch te verdelen over meerdere instanties, en ten tweede om enige mate van beschikbaarheid te bieden tijdens partities, om de werking voort te zetten wanneer sommige instanties (vooral masters) falen of niet kunnen communiceren met de meerderheid van de nodes in het cluster.

De cluster stopt echter met werken bij grotere storingen (bijvoorbeeld wanneer de meerderheid van de master-instanties niet beschikbaar is). Bovendien kan de cluster normale operaties niet voortzetten als een master en slave tegelijkertijd uitvallen (hoewel de oplossing is om meer nodes toe te voegen of een asymmetrie in het cluster te creëren, om de lay-out van het cluster automatisch te wijzigen).

Volgens de documentatie van het Redis-cluster vereist het “minimale cluster” dat zoals verwacht werkt minimaal 3 master-nodes bevat. Maar de meest geschikte opstelling voor hoge beschikbaarheid zou minimaal 6 nodes moeten hebben met drie masters en drie slaves, waarbij elke master een slave heeft.

Belangrijk: Redis Cluster heeft ook enkele beperkingen, zoals het ontbreken van ondersteuning voor NATted-omgevingen, evenals die waar IP-adressen of TCP-poorten bijvoorbeeld onder Docker worden omgeleid. Bovendien ondersteunt niet elke clientbibliotheek het.

Dit artikel laat zien hoe je een Redis-cluster (met Cluster-Modus Uitgeschakeld) instelt in CentOS 8. Het omvat hoe je Redis installeert, de clusterknooppunten configureert, een cluster maakt en de cluster failover test.

Opmerking: Voor deze handleiding zullen we frisse/lege Redis-instanties gebruiken om de clustermodus uit te voeren. De clustermodus werkt niet met sommige configuraties die zijn uitgevoerd in de eerste twee handleidingen van onze Redis-serie, met name wanneer de replica van de parameter wordt gebruikt.

Vereisten:

  1. Servers met CentOS 8 Installatie

Opzetten van Testomgeving

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

Onze opstelling heeft 3 lees-/schrijfmasterknooppunten en 3 alleen-lezen replica-knooppunten, waarbij elke master één replica heeft, dus drie shards bevatten alle gegevens van de cluster in elk knooppunt. Een applicatie API of CLI-client kan alleen naar de masterknooppunten schrijven maar vanaf elk knooppunt in de cluster lezen.

Stap 1: Redis Installeren op Alle Knooppunten

1. Log in op alle instanties via SSH, voer vervolgens het volgende commando uit om de Redis-module te installeren met behulp van de DNF-pakketbeheerder zoals weergegeven.

# dnf module install redis

2. Start vervolgens de Redis-service, schakel deze in om automatisch op te starten bij het opstarten van het systeem en controleer de status om te verifiëren dat deze draait (controleer de service op alle 6 instanties):

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

Stap 2: Configuratie van Redis-instanties op alle knooppunten

3. In dit gedeelte wordt beschreven hoe de Redis-clusterknooppunten moeten worden geconfigureerd. Vergeet niet om de configuraties hier uit te voeren op alle knooppunten.

Gebruik het configuratiebestand /etc/redis.conf om de Redis-server te configureren. Als aanbevolen praktijk, maak een back-up van het originele bestand voordat u het bewerkt met een command-line teksteditor naar keuze.

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

4. Zoek vervolgens de volgende configuratieparameters en bewerk hun waarden zoals weergegeven. De bind-parameter stelt de interface in waar de Redis-server naar luistert, stel de waarde ervan in op het LAN-IP-adres van de instantie. Verwijder 127.0.0.1 omdat we hebben gemerkt dat dit de processnelheid van het clustercreatieproces vertraagt, met name bij het aansluiten op het cluster.

bind  10.42.0.247

Stel de protected-mode in op no om verbindingen van andere instanties op het cluster toe te staan.

protected-mode no

De poortparameter bepaalt de poort waarop de Redis-server zal luisteren voor verbindingen, standaard is dit 6379. Dit is de datapoort voor communicatie met cliënten.

port 6379
Set Redis Listen Interface and Port

5. De volgende reeks parameters zal de clustermode inschakelen en enkele van zijn nuttige functies instellen. De parameter cluster-enabled, wanneer ingesteld op yes, activeert de clustermode.

cluster-enabled yes

Vervolgens stelt de parameter cluster-config-file de naam in van het clusterconfiguratiebestand van een clusternode (bijv. nodes-6379.conf). Het bestand wordt aangemaakt in de werkdirectory (standaard is /var/lib/redis gedefinieerd met de dir parameter) en is niet door de gebruiker bewerkbaar.

cluster-config-file nodes-6379.conf

De volgende nuttige clusteroptie is cluster-node-timeout, het wordt gebruikt om de maximale tijd in milliseconden in te stellen dat een instantie niet beschikbaar kan zijn voordat deze als in een falende toestand wordt beschouwd. Een waarde van 15000 komt overeen met 15 seconden.

cluster-node-timeout 15000
Set Cluster Node Timeout

6. We moeten ook Redis persistentie op schijf inschakelen. We kunnen een van de persistentiemodi gebruiken, dat is het Append Only File (AOF): het registreert (in het bestand appendonly.aof aangemaakt in de werkdirectory) elke schrijfbewerking die succesvol door de server is ontvangen. De gegevens worden afgespeeld tijdens het opstarten van de server om de oorspronkelijke dataset te reconstrueren.

Om dit in te schakelen, stelt u de parameter appendonly in op yes.

appendonly yes
Set Persistence Options

7. Na het doorvoeren van alle wijzigingen, herstart de Redis-service op alle knooppunten om de recente wijzigingen toe te passen.

# systemctl restart redis

8. Op dit punt zou elk clusterknooppunt nu een ID moeten hebben. U kunt dit controleren in het logbestand dat zich bevindt op /var/log/redis/redis.log.

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

9. Open vervolgens poort 6397 en 16379 op alle instanties. De laatste poort wordt gebruikt voor de clusterbus (een node-naar-node communicatiekanaal met behulp van een binair protocol). Dit is een basisvereiste voor de TCP-verbindingen van het Redis-cluster.

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

Stap 3: Het maken van het Redis-cluster

10. Gebruik de redis-cli command-line client als volgt om het cluster te maken. De --cluster create schakelt de clustercreatie in en --cluster-replicas 1 betekent dat er één replica per master wordt aangemaakt.

Voor onze setup, die 6 knooppunten heeft, zullen we 3 masters en 3 slaves hebben.

Merk op dat de eerste 6 knooppunten zullen worden beschouwd als masters (M) en de volgende drie zullen worden beschouwd als slaves (S). De eerste slave, d.w.z. 10.42.0.200:6379, dupliceert de eerste master, d.w.z. 10.42.0.247:6379, de tweede slave dupliceert de tweede master, op die volgorde.

De volgende opdracht is opgemaakt op een manier zodat het resultaat onze logische setup hierboven vertegenwoordigt.

# 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. Zodra de clustercreatie succesvol is, voer dan het volgende commando uit op een willekeurige host (specificeer het IP-adres met behulp van de -h vlag) om alle clusterknooppunten weer te geven.

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

Je zou alle clusterknooppunten moeten kunnen zien, waarbij de slaves hun masters aangeven, zoals te zien is in de volgende schermafbeelding.

Check All Cluster Nodes on Any Node

De verschillende velden zijn in deze volgorde: knooppunt-ID, IP-adres:poort, vlaggen, laatste ping verstuurd, laatste pong ontvangen, configuratie-epoch, koppelingsstatus, slots (voor masters).

Stap 4: Het testen van Redis Cluster Failover

12. In deze sectie zullen we demonstreren hoe een cluster failover te testen. Laten we eerst de masters noteren.

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

Let ook op de Redis-slaves.

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

13. Vervolgens stoppen we de Redis-service op een van de masterknooppunten bijvoorbeeld 10.42.0.197 en controleren alle masterknooppunten in de cluster.

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

Vanaf de volgende schermafbeelding kun je zien dat het knooppunt 10.42.0.197:6367 in een fouttoestand verkeert en zijn slave 10.42.0.21:6379 is gepromoveerd tot masterstatus.

Check Cluster Failover Status

14. Laten we nu de Redis-service opnieuw starten op het mislukte knooppunt en alle masters in de cluster controleren.

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

Ook controleren we de clusterslaves om te bevestigen dat de mislukte master nu een slave is.

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

Stap 5: Het testen van gegevensreplicatie over de Redis-cluster

15. Deze laatste sectie legt uit hoe u de replicatie van clustergegevens kunt verifiëren. We zullen een sleutel en waarde maken op een van de masters, en vervolgens proberen deze van alle clusterknooppunten te lezen zoals hieronder. Gebruik de -c-schakelaar om clusterondersteuning in te schakelen onder het hulpprogramma redis-cli en toegang te krijgen tot gegevens in clustermodus.

# 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

Het komt erop neer dat de Redis-cluster de voorkeursmethode is om automatische sharding, replicatie en hoge beschikbaarheid te krijgen. Er zijn nog veel andere goed gedocumenteerde configuratieparameters in de rest van het /etc/redis.conf-bestand; u kunt meer informatie vinden in de officiële documentatie: Redis-clusterzelfstudie en Redis-cluster specificatie.

Dit brengt ons aan het einde van de driedelige Redis-zelfstudie-serie. Het feedbackformulier hieronder kan worden gebruikt om vragen of opmerkingen te plaatsen.

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