Kako postaviti Redis klaster u CentOS 8 - dio 3


Redis Cluster je ugrađena Redis funkcija koja podržava automatsko dijeljenje, replikaciju i visoku dostupnost što je prethodno implementirano pomoću Sentinels. Dizajniran je za dvije glavne svrhe: jedna je da automatski podijeli vaš skup podataka između više instanci i druga da obezbijedi određeni stepen dostupnosti tokom particija, da nastavi sa radom kada neke instance (posebno master) ne uspeju ili nisu u mogućnosti da komuniciraju sa većinom čvorova u klasteru.

Međutim, klaster prestaje da radi u slučaju većih kvarova (npr. kada je većina glavnih instanci nedostupna). Također, ako glavni i podređeni pokvare u isto vrijeme, klaster ne može nastaviti normalne operacije (iako je zaobilazno rješenje dodavanje više čvorova ili stvaranje asimetrije u klasteru, kako bi se automatski promijenio raspored klastera).

Prema Redis dokumentaciji klastera, “minimalni klaster” koji radi kako se očekuje zahtijeva da sadrži najmanje 3 glavna čvora. Ali najprikladnije podešavanje za visoku dostupnost trebalo bi da ima najmanje 6 čvorova sa tri mastera i tri slave, pri čemu svaki master ima slave.

Važno: Redis Cluster također ima neka ograničenja koja su nedostatak podrške za NATted okruženja, kao i ona za koja se ponovo mapiraju IP adrese ili TCP portovi instanca pod Docker. Osim toga, ne podržava ga svaka klijentska biblioteka.

Ovaj članak pokazuje kako postaviti Redis Cluster (sa Cluster-Mode onemogućen) u CentOS 8. Uključuje kako instalirati Redis, konfigurirati čvorove klastera, kreirati klaster i testirati prelazak na grešku klastera.

Napomena: Za ovaj vodič koristit ćemo svježe/prazne Redis instance za pokretanje klastera. Klaster način rada neće raditi s nekim konfiguracijama napravljenim u prva dva vodiča naše Redis serije, posebno ne radi kada se koristi replika parametra.

Preduvjeti:

  1. Serveri sa instalacijom CentOS 8

Postavljanje testnog okruženja

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

Naša postavka ima 3 glavna čvora za čitanje/pisanje i 3 replika čvora samo za čitanje, od kojih svaki master ima jednu repliku, tako da tri dijela sadrže sve podatke klastera u svakom čvoru. Aplikacijski API ili CLI klijent može pisati samo na glavne čvorove, ali čitati sa bilo kojeg čvora u klasteru.

Korak 1: Instaliranje Redis-a na svim čvorovima

1. Prijavite se na sve instance putem SSH, a zatim pokrenite sljedeću naredbu da instalirate Redis modul koristeći DNF paket menadžer kao što je prikazano.

dnf module install redis

2. Zatim pokrenite Redis uslugu, omogućite joj da se automatski pokrene pri pokretanju sistema i provjerite njen status da provjerite da li radi (provjerite uslugu na svih 6 instanci ):

systemctl start redis
systemctl enable redis
systemctl status redis

Korak 2: Konfiguriranje Redis instanci na svim čvorovima

3. Ovaj odjeljak opisuje kako konfigurirati Redis cluster čvorove. Ne zaboravite izvršiti konfiguracije ovdje na svim čvorovima.

Koristite /etc/redis.conf konfiguracioni fajl da konfigurišete Redis server. Kao preporučenu praksu, napravite sigurnosnu kopiju originalne datoteke prije nego što je uredite pomoću uređivača teksta na komandnoj liniji po vašem izboru.

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

4. Zatim pronađite sljedeće konfiguracijske parametre i uredite njihove vrijednosti kao što je prikazano. Parametar bind postavlja interfejs Redis servera koji će slušati, postavlja njegovu vrijednost na instancu LAN IP. Uklonite 127.0.0.1 jer smo shvatili da ostavljanje tamo usporava proces stvaranja klastera, posebno fazu pridruživanja klasteru.

bind  10.42.0.247

Zatim postavite protected-mode na no da omogućite veze sa drugih instanci na klasteru.

protected-mode no

Parametar porta definira port na kojem će Redis server osluškivati veze, zadana vrijednost je 6379. Ovo je data port za komunikaciju sa klijentima.

port 6379

5. Sljedeći skup parametara će omogućiti klaster mod i postaviti neke od njegovih korisnih karakteristika. Parametar cluster-enabled, kada je postavljen na yes, aktivira način rada klastera.

cluster-enabled yes

Zatim, parametar cluster-config-file postavlja ime konfiguracijske datoteke klastera čvora klastera (npr. nodes-6379.conf). Datoteka je kreirana u radnom direktoriju (podrazumevano je /var/lib/redis definisana pomoću parametra dir) i nije moguće uređivati je korisnik.

cluster-config-file nodes-6379.conf

Sljedeća korisna opcija klastera je cluster-node-timeout, koristi se za postavljanje maksimalnog vremena u milisekundama u kojem instanca može biti nedostupna da bi se smatrala u stanju kvara. Vrijednost 15000 je ekvivalentna 15 sekundi.

cluster-node-timeout 15000

6. Također moramo omogućiti Redis postojanost na disku. Možemo koristiti jedan od načina postojanosti, to je Dodaj samo datoteku (AOF): on se evidentira (u kreiranoj datoteci appendonly.aof u radnom direktoriju) svaku operaciju pisanja uspješno primio server. Podaci će se reprodukovati tokom pokretanja servera da bi se rekonstruisao originalni skup podataka.

Da biste to omogućili, postavite parametar appendonly na yes.

appendonly yes

7. Nakon što izvršite sve promjene, ponovo pokrenite uslugu Redis na svim čvorovima da biste primijenili nedavne promjene.

systemctl restart redis

8. U ovom trenutku, svaki čvor klastera sada bi trebao imati ID. Ovo možete provjeriti u datoteci evidencije koja se nalazi na /var/log/redis/redis.log.

cat /var/log/redis/redis.log

9. Zatim otvorite port 6397 i 16379 na svim instancama. Kasniji port se koristi za sabirnicu klastera (čvor-čvor komunikacioni kanal koji koristi binarni protokol). Ovo je osnovni zahtjev za TCP veze Redis klastera.

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

Korak 3: Kreiranje Redis klastera

10. Da kreirate klaster, koristite redis-cli komandnu liniju klijenta kako slijedi. --cluster create omogućava kreiranje klastera i --cluster-replicas 1 znači kreiranje jedne replike po masteru.

Za našu postavku koja ima 6 čvorova, imat ćemo 3 mastera i 3 slavea.

Imajte na umu da će se prvih 6 čvorova smatrati masterima (M), a sljedeća tri će se smatrati slavima (S) kod>. Prvi slave, tj. 10.42.0.200:6379, replicira prvog mastera, tj. 10.42.0.247:6379, drugi slave replicira drugog mastera, tim redoslijedom.

Sljedeća naredba je formatirana na način da će rezultat predstavljati našu logičku postavku iznad.

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. Kada je kreiranje klastera uspješno, pokrenite sljedeću naredbu na bilo kojem hostu (navedite njegovu IP adresu koristeći -h zastavicu) da biste izlistali sve čvorove klastera.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Trebalo bi da budete u mogućnosti da vidite sve čvorove klastera, sa slaveovima koji označavaju svoje mastere, kao što je prikazano na sledećem snimku ekrana.

Različita polja su ovim redom: ID čvora, IP adresa:port, zastavice, posljednji poslani ping, posljednji primljeni pong, epoha konfiguracije, stanje veze, slotovi (za mastere).

Korak 4: Testiranje Redis Cluster Failover

12. U ovom odeljku ćemo pokazati kako testirati prelazak na grešku klastera. Prvo, hajde da uzmemo u obzir majstore.

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

Takođe, obratite pažnju na Redis robove.

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

13. Zatim, zaustavimo Redis uslugu na jednom od glavnih čvorova, npr. 10.42.0.197 i provjerimo sve glavne čvorove u klasteru.

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

Sa sljedećeg snimka ekrana možete vidjeti da je čvor 10.42.0.197:6367 u stanju greške i da je njegov slave 10.42.0.21:6379 unapređen u status glavnog.

14. Hajdemo sada ponovo pokrenuti uslugu Redis na neuspjelom čvoru i provjeriti sve mastere u klasteru.

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

Također, provjerite slave klastera da potvrdite da je neuspjeli master sada slave.

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

Korak 5: Testiranje replikacije podataka preko Redis klastera

15. Ovaj posljednji odjeljak objašnjava kako provjeriti replikaciju podataka klastera. Napravit ćemo ključ i vrijednost na jednom od mastera, a zatim ga pokušati pročitati iz svih čvorova klastera na sljedeći način. Koristite prekidač -c da omogućite podršku za klastere pod redis-cli uslužnim programom i pristupite podacima u načinu rada klastera.

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

Suština je da je Redis klaster preferirani način za automatsko dijeljenje, replikaciju i visoku dostupnost. Postoji mnogo drugih dobro dokumentovanih konfiguracionih parametara u ostatku datoteke /etc/redis.conf, više informacija možete pronaći u zvaničnoj dokumentaciji: Redis tutorial za klaster i Redis specifikacija klastera.

Ovo nas dovodi do kraja trodijelne serije tutorijala za Redis. Obrazac za povratne informacije u nastavku se može koristiti za postavljanje pitanja ili komentara.