Kako postaviti Redis replikaciju (s onemogućenim načinom klastera) u CentOS 8 - 1. dio


Redis (Remote Dictionary Server) vrlo je popularan i naširoko korišten open source, brz, distribuiran i učinkovit in-memory ključ-vrijednost baza podataka/poslužitelj strukture podataka.

Nudi bogat skup značajki koje ga čine učinkovitim za širok raspon slučajeva upotrebe: kao baza podataka, sloj predmemorije, posrednik poruka ili red čekanja; primjenjivo u web aplikacijama, aplikacijama za chat i slanje poruka, igrama, analizi 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, klasteriranje i particioniranje. Također ima automatske nadogradnje za visoku dostupnost implementacije putem Redis Sentinela, Lua skriptiranja, transakcija i još mnogo toga.

Budući da BEZ SQL-a ili nerelacijske baze podataka, Redis nudi neke prednosti izvedbe u odnosu na tradicionalne sustave baza podataka (kao što su MySQL/MariaDB, PostgreSQLitd.), jer se svi njegovi podaci nalaze ili su pohranjeni u memoriji što ih čini lako dostupnim aplikaciji, dok tradicionalne baze podataka moraju pisati sve podatke ili čitati s diska ili vanjskog izvora.

Redis postao je sve rašireniji izbor za predmemoriranje, što omogućuje ponovnu upotrebu predmemoriranih podataka (pohranjenih u glavnom memorijskom prostoru aplikacije) umjesto uvijek postavljanja upita bazi podataka za često korištene podatke. Dakle, fantastičan je pratilac RDMS (Relational Database Management Systems) za konačno poboljšanje performansi aplikacije.

U ovoj trodijelnoj seriji vodiča za Redis pokrit ćemo kako postaviti i koristiti neke od Redisovih ključnih značajki kao što su replikacija, visoka dostupnost pomoću Redis Sentinela i Redis Cluster, članci su:

Ovaj vodič pokazuje kako postaviti Redis Replication (s Cluster-Mode Disabled) u CentOS 8 Linux, uključujući kako instalirati Redis, konfigurirati master i replike, te testirati replikaciju.

Važno: Redis klaster (tj. Replikacijski klaster) s onemogućenim načinom klastera ima jednu grupu čvorova ( npr. glavni i jedna ili dvije replike) pri čemu se Redis klaster s omogućenim načinom klastera može sastojati od dvije ili više grupa čvorova (npr. tri glavna od kojih svaki ima podređene ili dva).

Preduvjeti:

  1. Poslužitelji s 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

S gornjim postavkama (koje imaju 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. Nakon što se podređeni uređaj poveže s glavnim, prima početnu kopiju pune baze podataka i svi podaci koji su prethodno postojali na podređenom uređaju bit će odbačeni.

Osim toga, klijent može pisati samo u master, ali čitati iz bilo kojeg čvora u klasteru. I dok se zapisi izvode na glavnom uređaju, oni se prenose na sve povezane podređene uređaje za ažuriranje podređenih skupova podataka u stvarnom vremenu.

Korak 1: Instalirajte Redis na CentOS 8

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


dnf install @redis

2. Po završetku instalacije Redis paketa, pokrenite uslugu Redis, omogućite joj automatsko pokretanje pri svakom pokretanju sustava i provjerite je li pokrenuti na sljedeći način.

systemctl start redis
systemctl enable redis
systemctl status redis

3. Također možete potvrditi da Redis poslužitelj radi i radi provjerom portova za slušanje pomoću naredbe ss, kako slijedi.

ss -ltpn | grep redis-server

Korak 2: Konfiguriranje Redis glavnog poslužitelja

4. Redis je konfiguriran pomoću /etc/redis.conf konfiguracijske datoteke, samodokumentirane primjerne konfiguracijske datoteke. Najprije izradite sigurnosnu kopiju izvorne datoteke, a zatim je otvorite za uređivanje pomoću uređivača naredbenog retka po izboru.

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

5. Prema zadanim postavkama, Redis instanca je konfigurirana za slušanje i prihvaćanje veza na sučelju povratne petlje, koristeći direktivu povezivanja. Za komunikaciju s replikama, glavni bi trebao biti konfiguriran za slušanje povratne adrese IPv4 i svoje LAN IP adrese, tj. 10.42.0.247.

bind 127.0.0.1 10.42.0.247

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

protected-mode no

Također, Redis sluša na portu 6379 koji je postavljen pomoću direktive port. Ovo je podatkovni priključak za komunikaciju s aplikacijskim API-jima ili CLI klijentima.

port 6379

7. Da opcionalno osiguramo komunikaciju master-replika, možemo zaštititi master pomoću direktive requirepass, tako da klijenti/replike moraju izdajte lozinku za provjeru autentičnosti prije pokretanja bilo koje naredbe ili pokretanja procesa sinkronizacije replikacije, inače će glavni odbiti zahtjev klijenta/replikacije (ne zaboravite postaviti sigurnu lozinku).

Koristit ćemo sljedeću opciju u svrhu demonstracije, da pokažemo kako radi.

requirepass  Securep@55Here

8. Također, Redis zapisi su pohranjeni u datoteci /var/log/redis/redis.log, ovo se postavlja pomoću direktive logfile a zadana razina opširnosti poslužitelja je obavijest, definirana pomoću parametra loglevel.

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

9. Budući da je systemd zadani upravitelj sustava 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 napravite sve potrebne konfiguracije, spremite datoteku i zatvorite je. Zatim ponovno pokrenite uslugu Redis kako biste primijenili nove promjene.

systemctl daemon-reload
systemctl restart redis

11. Za pristup Redis poslužitelju, moramo koristiti redis-cli (sučelje naredbenog retka za redis-poslužitelj). Prema zadanim postavkama povezuje se s poslužiteljem na localhost (na 127.0.0.1 priključku 6379). Imajte na umu da budući da je poslužitelj zaštićen od klijenata pomoću lozinke, izvođenje naredbe prije autentifikacije ne bi trebalo uspjeti.

Koristite naredbu auth za unos lozinke za provjeru autentičnosti kao što je prikazano na sljedećoj snimci zaslona.

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 s replikom (nakon što ih konfigurirate kako je opisano u sljedećem odjeljku), koristite -h i -p za određivanje replike IP adrese/naziva glavnog računala i porta (ne taj port 6379 mora biti otvoren u vatrozidu replike).

redis-cli -h 10.42.0.21 -p 6379

13. Zatim otvorite podatkovni priključak Redis poslužitelja u vatrozidu kako biste omogućili ulazne veze s glavnim, a zatim ponovno učitajte pravila vatrozida pomoću naredbe firewall-cmd kao što je prikazano.

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

Korak 3: Konfiguriranje Redis Replica/Slave poslužitelja

14. Za brzo postavljanje instance Redis kao replike u hodu, upotrijebite uslužni program redis-cli i pozovite REPLICAOF 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 bi replikacijska veza postala trajna, trebate izvršiti sljedeće promjene u konfiguracijskoj datoteci. Započnite sigurnosnom kopijom izvorne 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, upotrijebite parametar replicaof i postavite IP adresu (ili naziv hosta) i port glavnog čvora kao vrijednosti.

replicaof 10.42.0.247 6379

Postavljanje replike za autentifikaciju glavnom

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 glavnoj instanci, koristeći masterauth parametar.

masterauth Securep@55Here

19. Osim toga, kada replika izgubi svoju vezu s glavnim, ili kada je replikacija u tijeku, replika je konfigurirana da odgovara na zahtjeve klijenta, moguće s "zastarjelo ” podataka. Ali ako je to prva sinkronizacija, skup podataka može biti prazan. Ovo ponašanje kontrolira parametar replica-serve-stale-data.

A budući da su replike Redis 2.6 prema zadanim postavkama samo za čitanje, to se kontrolira parametrom replica-read-only. Možete napraviti druge prilagodbe konfiguracije replike kako bi odgovarale vašim potrebama aplikacije.

20. Nakon što napravite sve potrebne promjene, ponovno pokrenite uslugu Redis na svim replikama.

systemctl restart redis

21. Također, otvorite priključak 6379 u vatrozidu kako biste omogućili veze glavnog i klijenata s replikama i ponovno učitajte pravila vatrozida.

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

Korak 4: Provjerite status replikacije glavne replike

22. Nakon što je konfiguracija replikacije glavne replike dovršena, možemo provjeriti radi li postavka 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/podređenim uređajima kako slijedi.

redis-cli
127.0.0.1:6379> info replication

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

Na masteru učinite ovo:

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

24. Zatim provjerite jesu li podaci sinkronizirani s 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 značajku koja omogućuje glavnoj instanci da ograniči rizik od gubitka nekih zapisa u slučaju da nije dostupno dovoljno replika, na određeni broj sekundi.

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

Da biste ih postavili, skinite komentare s njih i postavite vrijednosti prema svojim zahtjevima za postavljanje u /etc/redis.conf, kao što je prikazano na sljedećoj snimci zaslona. Ova konfiguracija znači da, od zadnjeg pinga do replika, nakon 10 sekundi, ako postoje manje od 2 replike na mreži, master će 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 sa Sentinelom u CentOS 8. Do tada, ostanite zaključani i ne zaboravite podijeliti svoja razmišljanja i pitanja putem našeg obrasca za komentare u nastavku koji je tu da nas kontaktirate.