Kako postaviti Redis replikaciju (sa onemogućenim Cluster-Modeom) u CentOS 8 - 1. dio


Redis (Remote Dictionary Server) je vrlo popularan i široko korišten open source, brz, distribuiran i efikasan server baze podataka/strukture podataka ključ/vrijednost u memoriji.

Nudi bogat skup funkcija koje ga čine efikasnim za širok spektar slučajeva upotrebe: kao baza podataka, sloj za keširanje, broker poruka ili red čekanja; primjenjivo u web aplikacijama, aplikacijama za ćaskanje i razmjenu poruka, igrama, analitici podataka u stvarnom vremenu i još mnogo toga.

Podržava fleksibilne strukture podataka, master-slave asinkronu replikaciju za skaliranje performansi čitanja i zaštitu od gubitka podataka, dijeljenje na strani klijenta za skaliranje performansi pisanja, dva oblika postojanosti za pisanje podataka u memoriji na disk u kompaktnom formatu, grupiranje i particioniranje. Također sadrži automatske prelaske na greške za primenu visoke dostupnosti putem Redis Sentinela, Lua skriptiranja, transakcija i još mnogo toga.

Budući da je BEZ SQL ili nerelaciona baza podataka, Redis nudi neke prednosti performansi u odnosu na tradicionalne sisteme baza podataka (kao što su MySQL/MariaDB, PostgreSQL, itd.), jer se svi njegovi podaci nalaze ili su pohranjeni u memoriji što ih čini lako dostupnim aplikaciji, dok tradicionalne baze podataka moraju sve podatke upisivati ili čitati sa diska ili eksternog izvora.

Redis je postao sve češći izbor za keširanje, koji omogućava ponovnu upotrebu keširanih podataka (pohranjenih u glavnom memorijskom prostoru aplikacije) umjesto da uvijek traži bazu podataka za često korištene podatke. Dakle, to je fantastičan pratilac RDMS (Relational Database Management Systems) za konačno poboljšanje performansi aplikacije.

U ovoj trodijelnoj seriji Redis tutorijala ćemo pokriti kako postaviti i koristiti neke od Redisovih ključnih karakteristika koje su replikacija, visoka dostupnost pomoću Redis Sentinel i Redis Cluster, članci su:

Ovaj vodič pokazuje kako postaviti Redis replikaciju (sa Cluster-Mode onemogućen) u CentOS 8 Linuxu, uključujući kako instalirati Redis, konfigurirati master i replike i testirati replikaciju.

Važno: Redis klaster (tj. klaster replikacije) s onemogućenim načinom rada klastera ima jednu grupu čvorova ( npr. master i jedna ili dvije replike) pri čemu se Redis klaster s uključenim režimom klastera može sastojati od dvije ili više grupa čvorova (npr. tri mastera svaki ima slave ili dva).

Preduvjeti:

  1. Serveri sa instalacijom CentOS 8

Postavljanje testnog okruženja

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34

Uz gornju postavku (koja ima jedan primarni/glavni čvor za čitanje/pisanje i 2 replika čvora samo za čitanje), imamo jednu grupu čvorova koja sadrži sve podatke klastera u svakom čvoru. Jednom kada se slave poveže na master, prima početnu kopiju pune baze podataka i svi podaci koji su prethodno postojali na slave-u će biti odbačeni.

Osim toga, klijent može pisati samo masteru, ali čitati sa bilo kojeg čvora u klasteru. I kako se upisi obavljaju na masteru, oni se šire na sve povezane slave radi ažuriranja slave skupova podataka u realnom vremenu.

Korak 1: Instaliranje Redis-a na CentOS 8

1. Za početak, prijavite se na sve CentOS 8 čvorove putem SSH-a, a zatim instalirajte Redis paket na sve čvorove (master i replike ) koristeći DNF paket menadžer kao što je prikazano.


dnf install @redis

2. Po završetku instalacije Redis paketa, pokrenite uslugu Redis, omogućite joj da se automatski pokreće pri svakom pokretanju sistema i provjerite da li je i radi kako slijedi.

systemctl start redis
systemctl enable redis
systemctl status redis

3. Također možete potvrditi da je Redis server pokrenut i da radi tako što ćete provjeriti portove za slušanje pomoću naredbe ss, kako slijedi.

ss -ltpn | grep redis-server

Korak 2: Konfiguriranje Redis Master servera

4. Redis je konfigurisan korišćenjem konfiguracionog fajla /etc/redis.conf, samodokumentovanog primera konfiguracionog fajla. Prvo napravite rezervnu kopiju originalne datoteke, a zatim je otvorite za uređivanje pomoću uređivača komandne linije po izboru.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

5. Prema zadanim postavkama, Redis instanca je konfigurirana da sluša i prihvata veze na loopback interfejsu, koristeći bind direktivu. Za komunikaciju s replikama, glavni bi trebao biti konfiguriran da sluša IPv4 adresu povratne petlje i njegovu LAN IP adresu, tj. 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. Zatim postavite parametar zaštićenog načina rada na no da biste omogućili komunikaciju s replikama kao što je prikazano.

protected-mode no

Također, Redis sluša port 6379 koji je postavljen korištenjem port direktive. Ovo je podatkovni port za komunikaciju s API-jima aplikacije ili CLI klijentima.

port 6379

7. Kako bismo opciono osigurali komunikaciju master-replika, možemo zaštititi master pomoću requirepass direktive, tako da klijenti/replike moraju izdati lozinku za autentifikaciju prije pokretanja bilo koje komande ili pokretanja procesa sinhronizacije replikacije, inače će master odbiti zahtjev klijenta/replike (ne zaboravite postaviti sigurnu lozinku).

Koristićemo sljedeću opciju u svrhu demonstracije, da pokažemo kako funkcionira.

requirepass  Securep@55Here

8. Takođe, Redis dnevnici su pohranjeni u datoteci /var/log/redis/redis.log, ovo se postavlja pomoću logfile direktive a zadani nivo detaljnosti servera je obavijest, definiran korištenjem parametra loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log

9. Budući da je systemd zadani upravitelj sistema i usluga u CentOS 8, možete konfigurirati Redis za interakciju s stablo nadzora systemd postavljanjem parametra supervised na systemd.

supervised systemd

10. Nakon što izvršite sve potrebne konfiguracije, sačuvajte datoteku i zatvorite je. Zatim ponovo pokrenite uslugu Redis da primijenite nove promjene.

systemctl daemon-reload
systemctl restart redis

11. Da bismo pristupili Redis serveru, moramo koristiti redis-cli (interfejs komandne linije za redis-server). Podrazumevano se povezuje sa serverom na localhostu (na 127.0.0.1 portu 6379). Imajte na umu da budući da je server zaštićen od klijenata pomoću lozinke, pokretanje naredbe prije provjere autentičnosti ne bi trebalo uspjeti.

Koristite naredbu auth da unesete lozinku za autentifikaciju kao što je prikazano na sljedećem snimku ekrana.

redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list

12. Za povezivanje na repliku (nakon što ih konfigurirate kako je opisano u sljedećem odjeljku), koristite -h i -p opcije za navođenje replike IP adrese/ime hosta i porta respektivno (ne taj port 6379 mora biti otvoren u zaštitnom zidu replike).

redis-cli -h 10.42.0.21 -p 6379

13. Zatim otvorite Redis port za podatke servera u zaštitnom zidu da biste omogućili ulazne veze sa glavnim serverom, a zatim ponovo učitajte pravila zaštitnog zida koristeći komandu firewall-cmd kao što je prikazano.

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

Korak 3: Konfiguriranje Redis replika/slave servera

14. Da biste brzo postavili Redis instancu kao repliku u pokretu, koristite redis-cli uslužni program i pozovite REPLICAOF naredba kao što je prikazano.

redis-cli replicaof 10.42.0.247 6379
OR
redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. Da biste učinili vezu replikacije trajnom, potrebno je napraviti sljedeće promjene u konfiguracijskoj datoteci. Započnite pravljenjem rezervne kopije originalne datoteke, a zatim je otvorite za uređivanje.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

16. Da biste omogućili klijentima da se povežu na repliku radi čitanja podataka, dodajte IP adresu replike u direktivu vezanja.

replica1
bind 127.0.0.1 10.42.0.21

replica2
bind 127.0.0.1 10.42.0.34

Postavljanje Redis instance kao replike

17. Da konfigurirate Redis instancu kao repliku, koristite parametar replicaof i postavite IP adresu (ili ime hosta) glavnog čvora i port kao vrijednosti.

replicaof 10.42.0.247 6379

Postavljanje replike na Authentication to Master

18. Zatim, budući da je naša glavna instanca zaštićena lozinkom, moramo postaviti lozinku u konfiguraciji replike kako bismo joj omogućili autentifikaciju na masteru, koristeći masterauth parametar.

masterauth Securep@55Here

19. Dodatno, kada replika izgubi svoju vezu sa glavnim uređajem, ili kada je replikacija u toku, replika je konfigurisana da odgovara na zahtjeve klijenta, moguće sa “zastarjelo > ” podaci. Ali ako je to prva sinhronizacija, skup podataka može biti prazan. Ovo ponašanje kontrolira parametar replica-serve-stare-data.

A pošto su Redis 2.6 po defaultu replike samo za čitanje, ovo se kontrolira parametrom replika-samo za čitanje. Možete napraviti druga podešavanja konfiguracije replike kako bi odgovarala potrebama vaše aplikacije.

20. Nakon što izvršite sve potrebne promjene, ponovo pokrenite Redis uslugu na svim replikama.

systemctl restart redis

21. Takođe, otvorite port 6379 u zaštitnom zidu da omogućite veze od glavnog i klijenta do replika i ponovo učitajte pravila zaštitnog zida.

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

Korak 4: Provjerite status replikacije glavne replike

22. Kada je konfiguracija replikacije master-replica završena, možemo provjeriti da li postavka radi dobro kako slijedi.

Na masteru pokrenite sljedeće naredbe.

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication

23. Također, provjerite status replikacije na replikama/slaveovima kako slijedi.

redis-cli
127.0.0.1:6379> info replication

23. Sada testirajmo replikaciju postavljanjem ključ-vrijednost u glavnoj instanci i provjerimo jesu li podaci sinhronizirani s replikama.

Na masteru uradite ovo:

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'linux-console.net'

24. Zatim provjerite da li su podaci sinhronizirani sa replikama kao što je prikazano.

redis-cli
127.0.0.1:6379> get domain

Zaštita glavne instance od rizika gubitka nekih zapisa

25. Redis ima funkciju koja omogućava glavnoj instanci da ograniči rizik od gubitka nekih upisa u slučaju da nema dovoljno replika na raspolaganju, na određeni broj sekundi.

To znači da master može prestati prihvaćati upise ako je povezano manje od N replika, s kašnjenjem manjim ili jednakim M sekundi, što kontrolira min -replicas-to-write i min-replicas-max-lag opcije respektivno.

Da biste ih postavili, dekomentirajte ih i postavite vrijednosti u skladu sa zahtjevima podešavanja u /etc/redis.conf, kao što je prikazano na sljedećem snimku ekrana. Ova konfiguracija znači da će, od posljednjeg pinga do replika, nakon 10 sekundi, ako ima manje od 2 replike na mreži, master prestati prihvaćati pisanje.

min-replicas-to-write 2
min-replicas-max-lag 10

Više opcija možete pronaći u ostatku konfiguracijske datoteke /etc/redis.conf, a za više detalja pročitajte o replikaciji u Redis dokumentaciji.

U sljedećem članku ćemo pokriti kako postaviti Redis za visoku dostupnost uz Sentinel u CentOS 8. Do tada, ostanite zaključani i ne zaboravite da podijelite svoja razmišljanja i pitanja putem našeg obrasca za komentare ispod, tu je da nas kontaktirate.