Zoeken op website

Een Redis-cluster instellen in CentOS 8 - Deel 3


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

Het cluster stopt echter met werken in het geval van grotere fouten (bijvoorbeeld wanneer de meerderheid van de master-instances niet beschikbaar is). Als een master en een slave tegelijkertijd uitvallen, kan het cluster de normale werking niet voortzetten (hoewel de oplossing is om meer knooppunten toe te voegen of een asymmetrie in het cluster te creëren, om de clusterindeling automatisch te wijzigen).

Volgens de Redis clusterdocumentatie moet het “minimale cluster ” dat werkt zoals verwacht ten minste drie hoofdknooppunten bevatten. Maar de meest geschikte opstelling voor hoge beschikbaarheid zou minimaal zes knooppunten moeten hebben met drie masters en drie slaves, waarbij elke master een slave heeft.

Belangrijk: Redis Cluster heeft ook enkele beperkingen, namelijk een gebrek aan ondersteuning voor NATted-omgevingen en omgevingen waarvoor IP-adressen of TCP-poorten opnieuw worden toegewezen instantie onder Docker. Bovendien ondersteunt niet elke clientbibliotheek dit.

Dit artikel laat zien hoe u een Redis Cluster instelt (met Cluster-Mode uitgeschakeld) in CentOS 8. Het omvat hoe u Redis installeert, de clusterknooppunten configureert, een cluster maakt en de clusterfailover test.

Opmerking: voor deze handleiding gebruiken we nieuwe/lege Redis-instanties 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, en werkt vooral niet wanneer de replica van de parameter wordt gebruikt.

Vereisten:

  1. Servers met CentOS 8-installatie

Testomgeving instellen

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

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

Stap 1: Redis op alle knooppunten installeren

1. Log in op alle instanties via SSH en voer vervolgens de volgende opdracht 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 te starten bij het opstarten van het systeem en controleer de status ervan om te verifiëren dat deze actief is (verifieer de service op alle 6 instanties ):

systemctl start redis
systemctl enable redis
systemctl status redis

Stap 2: Redis-instanties configureren op alle knooppunten

3. In deze sectie wordt beschreven hoe u de Redis-clusterknooppunten configureert. Vergeet niet om de configuraties hier op alle knooppunten uit te voeren.

Gebruik het /etc/redis.conf configuratiebestand om de Redis server te configureren. Het wordt aanbevolen om een back-up te maken van het originele bestand voordat u het bewerkt met een opdrachtregelteksteditor van uw 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 parameter bind stelt de interface in waarop de Redis-server zal luisteren, en stelt de waarde ervan in op het LAN-IP-instantie van de instantie. Verwijder de 127.0.0.1 omdat we ons realiseerden dat het daar laten staan het proces van clustercreatie vertraagt, met name de fase van deelname aan het cluster.

bind  10.42.0.247

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

protected-mode no

De poortparameter definieert de poort waarop de Redis-server naar verbindingen luistert. De standaardwaarde is 6379. Dit is de datapoort voor communicatie met klanten.

port 6379

5. De volgende set parameters schakelt de clustermodus in en stelt enkele nuttige functies in. Als de parameter cluster-enabled is ingesteld op yes, wordt de clustermodus geactiveerd.

cluster-enabled yes

Vervolgens stelt de parameter cluster-config-file de naam in van het clusterconfiguratiebestand van een clusterknooppunt (bijvoorbeeld nodes-6379.conf). Het bestand wordt gemaakt in de werkmap (standaard is /var/lib/redis gedefinieerd met behulp van de parameter dir) en kan niet door de gebruiker worden bewerkt.

cluster-config-file nodes-6379.conf

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

cluster-node-timeout 15000

6. We moeten ook Redis-persistentie op schijf inschakelen. We kunnen een van de persistentiemodi gebruiken, namelijk het Append Only File (AOF): het logt (in het aangemaakte bestand appendonly.aof onder de werkmap) elke schrijfbewerking die met succes door de server is ontvangen. De gegevens worden afgespeeld tijdens het opstarten van de server om de originele dataset te reconstrueren.

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

appendonly yes

7. Nadat u alle wijzigingen heeft aangebracht, start u de Redis-service opnieuw 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 op /var/log/redis/redis.log.

cat /var/log/redis/redis.log

9. Open vervolgens poort 6397 en 16379 voor alle instanties. De latere poort wordt gebruikt voor de clusterbus (een knooppunt-naar-knooppunt communicatiekanaal dat gebruik maakt van een binair protocol). Dit is een basisvereiste voor de Redis cluster TCP-verbindingen.

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

Stap 3: Het Redis-cluster maken

10. Om het cluster te maken, gebruikt u de redis-cli opdrachtregel-client als volgt. De --cluster create maakt het maken van clusters mogelijk en --cluster-replicas 1 betekent dat er één replica per master moet worden gemaakt.

Voor onze opstelling met 6 knooppunten hebben we 3 masters en 3 slaves.

Houd er rekening mee dat de eerste zes knooppunten worden beschouwd als masters (M) en de volgende drie worden beschouwd als slaven (S). De eerste slave, d.w.z. 10.42.0.200:6379 repliceert de eerste master, d.w.z. 10.42.0.247:6379, de tweede slave repliceert de tweede master, in die volgorde.

De volgende opdracht is zo geformatteerd dat de uitkomst onze logische opstelling 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

11. Zodra het aanmaken van het cluster is gelukt, voert u de volgende opdracht uit op een willekeurige host (specificeer het IP-adres met de vlag -h) 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 slaven hun meesters aangeven, zoals weergegeven in de volgende schermafbeelding.

De verschillende velden zijn in deze volgorde: knooppunt-ID, IP-adres: poort, vlaggen, laatste ping verzonden, laatste pong ontvangen, configuratie-tijdperk, link-status, slots (voor masters).

Stap 4: Redis Cluster-failover testen

12. In deze sectie laten we zien hoe u een clusterfailover kunt testen. Laten we eerst eens kijken naar de meesters.

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

Let ook op de Redis-slaven.

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

13. Laten we vervolgens de Redis-service stoppen op een van de hoofdknooppunten, bijvoorbeeld 10.42.0.197 en alle hoofdknooppunten in het cluster controleren.

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

Uit de volgende schermafbeelding kunt u zien dat het knooppunt 10.42.0.197:6367 zich in de mislukte status bevindt en dat zijn slaaf 10.42.0.21:6379 is gepromoveerd tot de masterstatus.

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

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

Controleer ook de clusterslaven om te bevestigen dat de defecte master nu een slaaf is.

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

Stap 5: Gegevensreplicatie testen in het Redis-cluster

15. In dit laatste gedeelte wordt uitgelegd hoe u de replicatie van clustergegevens kunt verifiëren. We zullen een sleutel en waarde creëren op een van de masters en deze vervolgens als volgt van alle clusterknooppunten proberen te lezen. Gebruik de schakeloptie -c om clusterondersteuning in te schakelen onder het redis-cli-hulpprogramma 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

Het komt erop neer dat het Redis Cluster de beste manier is om automatische sharding, replicatie en hoge beschikbaarheid te verkrijgen. Er zijn veel andere goed gedocumenteerde configuratieparameters in de rest van het bestand /etc/redis.conf. Meer informatie kunt u vinden in de officiële documentatie: Redis-clustertutorial en Redis-clusterspecificatie.

Dit brengt ons aan het einde van de driedelige Redis-tutorialserie. Via onderstaand feedbackformulier kunt u vragen of opmerkingen plaatsen.