Kako postaviti Redis klaster u CentOS 8 - 3. dio


Redis Cluster je ugrađena značajka Redis koja podržava automatsko dijeljenje, replikaciju i visoku dostupnost koja je prethodno implementirana pomoću Sentinels. Dizajniran je za dvije glavne svrhe: jedna je da automatski podijeli vaš skup podataka na više instanci, a druga da pruži određeni stupanj dostupnosti tijekom particija, da nastavi s operacijama kada neke instance (osobito glavne) zakažu ili ne mogu komunicirati s većinom čvorovi u klasteru.

Međutim, klaster prestaje raditi u slučaju većih kvarova (npr. kada je većina glavnih instanci nedostupna). Također, ako glavni i podređeni zakažu u isto vrijeme, klaster ne može nastaviti normalne operacije (iako je zaobilazno rješenje dodavanje više čvorova ili stvaranje asimetrije u klasteru, za automatsku promjenu izgleda klastera).

Prema dokumentaciji klastera Redis, “minimalni klaster” koji radi prema očekivanjima zahtijeva da sadrži najmanje 3 glavna čvora. Ali najprikladnija postavka za visoku dostupnost trebala bi imati najmanje 6 čvorova s tri glavna i tri podređena uređaja, pri čemu svaki glavni ima podređeni čvor.

Važno: Redis Cluster također ima neka ograničenja koja su nedostatak podrške za NATted okruženja, kao i ona u kojima su IP adrese ili TCP priključci ponovno mapirani za instanca pod Docker. Osim toga, ne podržava ga svaka biblioteka klijenta.

Ovaj članak pokazuje kako postaviti Redis klaster (s onemogućenim načinom klastera) u CentOS 8. Uključuje kako instalirati Redis, konfigurirati čvorove klastera, stvoriti klaster i testirati nadogradnju klastera.

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

Preduvjeti:

  1. Poslužitelji s 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 čvora replika samo za čitanje, svaki glavni ima jednu repliku, tako da tri fragmenta sadrže sve podatke klastera u svakom čvoru. Aplikacijski API ili CLI klijent može pisati samo u glavne čvorove, ali čitati iz bilo kojeg čvora u klasteru.

Korak 1: Instaliranje Redisa na svim čvorovima

1. Prijavite se na sve instance putem SSH, zatim pokrenite sljedeću naredbu za instalaciju Redis modula pomoću DNF upravitelja paketa kao što je prikazano.

dnf module install redis

2. Zatim pokrenite uslugu Redis, omogućite joj da se automatski pokrene pri pokretanju sustava i provjerite njen status kako biste potvrdili da 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 čvorove klastera. Ne zaboravite izvršiti konfiguracije ovdje na svim čvorovima.

Koristite konfiguracijsku datoteku /etc/redis.conf za konfiguraciju Redis poslužitelja. Kao preporučena praksa, napravite sigurnosnu kopiju izvorne datoteke prije nego što je uredite pomoću uređivača teksta naredbenog retka 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 sučelje Redis poslužitelja koje će slušati, postavite 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 kako biste omogućili veze s drugih instanci na klasteru.

protected-mode no

Parametar porta definira port na kojem će Redis poslužitelj osluškivati veze, zadana vrijednost je 6379. Ovo je podatkovni port za komunikaciju s klijentima.

port 6379

5. Sljedeći skup parametara omogućit će način klastera i postaviti neke od njegovih korisnih značajki. Parametar cluster-enabled, kada je postavljen na yes, aktivira način klastera.

cluster-enabled yes

Zatim, parametar cluster-config-file postavlja naziv konfiguracijske datoteke klastera čvora klastera (npr. nodes-6379.conf). Datoteka se stvara u radnom direktoriju (zadano je /var/lib/redis definirano pomoću parametra dir) i ne može je uređivati korisnik.

cluster-config-file nodes-6379.conf

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

cluster-node-timeout 15000

6. Također moramo omogućiti postojanost Redisa na disku. Možemo upotrijebiti jedan od načina postojanosti, to je Append Only File (AOF): zapisuje (u datoteci appendonly.aof stvorenoj pod radnim imenikom) svaka operacija pisanja koju je poslužitelj uspješno primio. Podaci će se reproducirati tijekom pokretanja poslužitelja kako bi se rekonstruirao izvorni skup podataka.

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

appendonly yes

7. Nakon što napravite sve promjene, ponovno pokrenite uslugu Redis na svim čvorovima kako biste primijenili nedavne promjene.

systemctl restart redis

8. U ovom trenutku, svaki čvor klastera sada bi trebao imati ID. To možete provjeriti u datoteci dnevnika 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 koristi se za sabirnicu klastera (komunikacijski kanal čvor-čvor 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: Stvaranje Redis klastera

10. Za stvaranje klastera koristite redis-cli naredbeni redak klijent na sljedeći način. --cluster create omogućuje stvaranje klastera, a --cluster-replicas 1 znači stvaranje jedne replike po masteru.

Za našu postavu koja ima 6 čvorova, imat ćemo 3 glavna i 3 podređena.

Imajte na umu da će se prvih 6 čvorova smatrati glavnim (M), a sljedeća tri podređenima (S). Prvi slave, tj. 10.42.0.200:6379 replicira prvi master, tj. 10.42.0.247:6379, drugi slave replicira drugi master, tim redoslijedom.

Sljedeća naredba oblikovana je na način da će ishod 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. Nakon što je stvaranje klastera uspješno, pokrenite sljedeću naredbu na bilo kojem hostu (odredite njegovu IP adresu pomoću oznake -h) za popis svih čvorova klastera.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Trebali biste moći vidjeti sve čvorove klastera, s podređenima koji označavaju svoje nadređene, kao što je prikazano na sljedećoj snimci zaslona.

Različita polja su ovim redoslijedom: ID čvora, IP adresa: port, zastavice, zadnji poslani ping, zadnji primljeni pong, konfiguracijska epoha, stanje veze, utori (za mastere).

Korak 4: Testiranje Redis Cluster Failover

12. U ovom ćemo odjeljku demonstrirati kako testirati nadilaženje klastera. Prvo, zabilježimo majstore.

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

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

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

13. Zatim, zaustavimo uslugu Redis 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

Na sljedećoj snimci zaslona možete vidjeti da je čvor 10.42.0.197:6367 u stanju greške, a njegov podređeni čvor 10.42.0.21:6379 promaknut je u status glavnog.

14. Sada ponovno pokrenimo uslugu Redis na neuspjelom čvoru i provjerimo sve mastere u klasteru.

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

Također, provjerite podređene klastere kako biste potvrdili da je pogrešni glavni sada podređeni.

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

Korak 5: Testiranje replikacije podataka u Redis klasteru

15. Ovaj posljednji odjeljak objašnjava kako provjeriti replikaciju podataka klastera. Stvorit ćemo ključ i vrijednost na jednom od mastera, a zatim ga pokušati pročitati sa svih čvorova klastera kako slijedi. Upotrijebite prekidač -c da biste omogućili podršku klastera pod uslužnim programom redis-cli i pristupili podacima u načinu 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

Zaključak je da je Redis klaster preferirani način za automatsko dijeljenje, replikaciju i visoku dostupnost. Postoji mnogo drugih dobro dokumentiranih konfiguracijskih parametara u ostatku datoteke /etc/redis.conf, više informacija možete pronaći u službenoj dokumentaciji: Redis cluster tutorial i Redis cluster specification.

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