Sådan opsættes en Redis-klynge i CentOS 8 - Del 3


Redis Cluster er en indbygget Redis-funktion, der understøtter automatisk sharding, replikering og høj tilgængelighed, som tidligere blev implementeret ved hjælp af Sentinels. Det er designet til to hovedformål: det ene er at opdele dit datasæt automatisk mellem flere forekomster og for det andet at give en vis grad af tilgængelighed under partitioner, at fortsætte operationer, når nogle forekomster (især mestre) mislykkes eller ikke er i stand til at kommunikere med størstedelen af noder i klyngen.

Klyngen stopper dog for at fungere i tilfælde af større fejl (f.eks. Når de fleste masterforekomster ikke er tilgængelige). Også, hvis en master og slave mislykkes på samme tid, kan klyngen ikke fortsætte normale operationer (selvom løsningen er at tilføje flere noder eller oprette en asymmetri i klyngen for automatisk at ændre klyngelayoutet).

I henhold til Redis-klyngedokumentationen kræver den "minimale klynge", der fungerer som forventet, at indeholde mindst 3 masternoder. Men den mest passende opsætning til høj tilgængelighed skal have mindst 6 noder med tre mestre og tre slaver, hvor hver mester har en slave.

Vigtigt: Redis Cluster har også nogle begrænsninger, som mangler support til NATted-miljøer, også dem, hvor IP-adresser eller TCP-porte omkortes for eksempel under Docker. Derudover understøtter ikke alle klientbiblioteker det.

Denne artikel viser, hvordan du opretter en Redis-klynge (med klyngetilstand deaktiveret) i CentOS 8. Den inkluderer, hvordan du installerer Redis, konfigurerer klyngenoder, opretter en klynge og tester klyngens failover.

Bemærk: I denne vejledning bruger vi friske/tomme Redis-forekomster til at køre klyngetilstand. Klyngetilstand fungerer ikke med nogle konfigurationer, der er udført i de første to hjælpelinjer i vores Redis-serie, især fungerer den ikke, når replikaen af parameteren bruges.

  1. Servere med CentOS 8-installation

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

Vores opsætning har 3 læse/skrive-masternoder og 3 skrivebeskyttede replikanoder, hvor hver master har en replika, så tre skår indeholder alle klyngens data i hver node. En applikations-API eller CLI-klient kan kun skrive til masternoderne, men læse fra enhver node i klyngen.

Trin 1: Installation af Redis på alle noder

1. Log ind på alle forekomster via SSH, og kør derefter følgende kommando for at installere Redis-modulet ved hjælp af DNF-pakkehåndteringen som vist.

# dnf module install redis

2. Start derefter Redis-tjenesten, gør det muligt for den automatisk at starte ved systemstart og kontrollere dens status for at kontrollere, at den kører (bekræft tjenesten i alle de 6 tilfælde):

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

Trin 2: Konfiguration af Redis-forekomster på alle noder

3. Dette afsnit beskriver, hvordan du konfigurerer Redis-klyngenoder. Husk at udføre konfigurationerne her på alle knudepunkter.

Brug /etc/redis.conf-konfigurationsfilen til at konfigurere Redis-serveren. Som en anbefalet praksis skal du oprette en sikkerhedskopi af den originale fil, før du redigerer den ved hjælp af en kommandolinjeteksteditor efter eget valg.

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

4. Find derefter følgende konfigurationsparametre, og rediger deres værdier som vist. Bind-parameteren indstiller grænsefladen til Redis-serveren, der skal lyttes til, indstiller dens værdi til LAN-IP-instansen. Fjern 127.0.0.1, fordi vi indså, at vi efterlod den der, bremser processen med oprettelse af klynger, især scenen med at slutte sig til klyngen.

bind  10.42.0.247

Indstil derefter den beskyttede tilstand til no for at tillade forbindelser fra de andre forekomster i klyngen.

protected-mode no

Portparameteren definerer den port, som Redis-serveren lytter til for forbindelser, standard er 6379. Dette er dataporten til kommunikation med klienter.

port 6379

5. Det næste sæt parametre aktiverer klyngetilstanden og indstiller nogle af dens nyttige funktioner. Den klyngeaktiverede parameter aktiverer klyngetilstanden, når den er indstillet til ja .

cluster-enabled yes

Dernæst indstiller cluster-config-fil-parameteren navnet på en klyngeknudes klyngekonfigurationsfil (f.eks. Noder-6379.conf). Filen oprettes i arbejdskataloget (standard er/var/lib/redis defineret ved hjælp af dir-parameteren) og kan ikke redigeres af brugeren.

cluster-config-file nodes-6379.conf

Den næste nyttige klyngeindstilling er cluster-node-timeout, den bruges til at indstille den maksimale tid i millisekunder, en instans kan være utilgængelig for at blive betragtet i en fejltilstand. En værdi på 15000 svarer til 15 sekunder.

cluster-node-timeout 15000

6. Vi er også nødt til at aktivere Redis-persistens på disken. Vi kan bruge en af vedvarende tilstande, det vil sige den kun tilføje fil (AOF): den logger (i filen appendonly.aof oprettet under arbejdskataloget) hver skrivefunktion, der er modtaget af serveren. Dataene afspilles under serverens opstart for at rekonstruere det originale datasæt.

For at aktivere det skal du indstille den appendonly-parameter til ja .

appendonly yes

7. Efter at have foretaget alle ændringer, genstart Redis-tjenesten på alle knudepunkter for at anvende de seneste ændringer.

# systemctl restart redis

8. På dette tidspunkt skal hver klyngenode nu have et ID. Du kan kontrollere dette i logfilen på /var/log/redis/redis.log.

# cat /var/log/redis/redis.log

9. Åbn derefter port 6397 og 16379 i alle forekomster. Den senere port bruges til klyngebussen (en node-til-node kommunikationskanal ved hjælp af en binær protokol). Dette er et grundlæggende krav til TCP-forbindelser fra Redis-klyngen.

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

Trin 3: Oprettelse af Redis-klyngen

10. For at oprette klyngen skal du bruge kommandolinjeklienten redis-cli som følger. --cluster create muliggør oprettelse af klynger og --cluster-replicas 1 betyder at oprette en replika pr. Master.

Til vores opsætning, der har 6 noder, har vi 3 mestre og 3 slaver.

Bemærk, at de første 6 noder betragtes som masters (M) , og de næste tre vil blive betragtet som slaver (S) . Den første slave dvs. 10.42.0.200:6379 replikerer den første master dvs. 10.42.0.247:6379, den anden slave replikerer den anden master i den rækkefølge.

Den følgende kommando er formateret på en måde, så resultatet repræsenterer vores logiske opsætning ovenfor.

# 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. Når oprettelsen af klyngen er vellykket, skal du køre følgende kommando på en hvilken som helst vært (angiv dens IP-adresse ved hjælp af -h -flagget) for at liste alle klyngenoder.

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

Du skal være i stand til at se alle klyngenoder, hvor slaverne angiver deres mestre, som vist i det følgende skærmbillede.

De forskellige felter er i denne rækkefølge: node-id, IP-adresse: port, flag, sidste sendte ping, sidste pong modtaget, konfigurationsperiode, link-tilstand, slots (for mestre).

Trin 4: Test af Redis Cluster Failover

12. I dette afsnit vil vi demonstrere, hvordan man tester en cluster failover. Lad os først tage mestrene til efterretning.

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

Vær også opmærksom på Redis slaver.

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

13. Lad os derefter stoppe Redis-tjenesten på en af masternoderne f.eks. 10.42.0.197 og kontrollere alle masternoder i klyngen.

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

Fra det følgende skærmbillede kan du se, at noden 10.42.0.197:6367 er i fejltilstand, og dens slave 10.42.0.21:6379 er forfremmet til masterstatus.

14. Lad os nu starte Redis-tjenesten igen på den mislykkede node og kontrollere alle mestre i klyngen.

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

Kontroller også klyngeslaverne for at bekræfte, at den mislykkede master nu er en slave.

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

Trin 5: Test af datareplikering på tværs af Redis-klyngen

15. Dette sidste afsnit forklarer, hvordan man verificerer replikering af klyngedata. Vi opretter en nøgle og værdi på en af mestrene, og prøv derefter at læse den fra alle klyngenoder som følger. Brug kontakten -c til at aktivere klyngesupport under redis-cli-hjælpeprogrammet og få adgang til data i klyngetilstand.

# 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

Bundlinjen er, at Redis Cluster er den foretrukne måde at få automatisk sharding, replikering og høj tilgængelighed på. Der er mange andre veldokumenterede konfigurationsparametre i resten af filen /etc/redis.conf, du kan finde mere information i den officielle dokumentation: Redis cluster tutorial og Redis cluster specification.

Dette bringer os til slutningen af den tredelte Redis tutorial-serie. Feedbackformularen nedenfor kan bruges til at stille spørgsmål eller kommentarer.