A mai digitális világban az alkalmazásoktól elvárjuk, hogy villámgyorsak, megbízhatóak és bármilyen terhelést képesek legyenek kezelni. Amikor adatok tárolásáról és gyors eléréséről van szó, a Redis neve szinte azonnal felmerül. Ez a nyílt forráskódú, memórián belüli adatstruktúra-szerver rendkívüli teljesítményével és rugalmasságával vált az egyik legnépszerűbb választássá a gyorsítótárazás, a munkamenet-tárolás, a valós idejű analitika és számos egyéb feladat során.
Azonban még a Redis is elérheti a határait, ha egyetlen példányt használunk. Egy önálló Redis szerver korlátos erőforrásokkal (memória, CPU, hálózati sávszélesség) rendelkezik, és egyetlen meghibásodási pontot jelent. Amint az adathalmaz mérete növekszik, vagy az alkalmazás forgalma eléri a kritikus szintet, a teljesítményromlás és a rendelkezésre állás hiánya komoly problémákat okozhat. Ekkor jön képbe a Redis Cluster, mint a horizontális skálázhatóság és a magas rendelkezésre állás elegáns megoldása.
Ebben az átfogó cikkben részletesen bemutatjuk, hogyan állíthatja be és konfigurálhatja a Redis Clustert, hogy alkalmazásai a növekedéssel együtt is zökkenőmentesen működjenek. Végigvezetjük a tervezéstől a telepítésen át a karbantartásig, gyakorlati tanácsokkal és bevált gyakorlatokkal fűszerezve.
Mi az a Redis Cluster?
A Redis Cluster egy elosztott Redis implementáció, amely lehetővé teszi, hogy az adatok automatikusan szétosszák magukat (sharding) több Redis példány között. Ez nem csupán a tárolási kapacitást növeli, hanem a bejövő kérések feldolgozási terhelését is elosztja, ezáltal javítva a teljesítményt és a skálázhatóságot.
A Cluster további kulcsfontosságú tulajdonsága a magas rendelkezésre állás. Minden master (mester) csomóponthoz hozzárendelhető egy vagy több replica (másodpéldány) csomópont. Ha egy master csomópont meghibásodik, a cluster automatikusan előlépteti az egyik replikáját masterré, biztosítva a szolgáltatás folyamatos működését (automata failover). Ez azt jelenti, hogy nincs többé egyetlen meghibásodási pont sem.
A Redis Cluster működésének alapja a hash slotok rendszere. Összesen 16384 hash slot létezik, és minden kulcs egy adott slotba kerül a kulcs hash értékének moduló 16384-el való leosztása alapján. Ezeket a slotokat egyenletesen osztják el a master csomópontok között. Amikor egy kliens egy kulcsot kér, a cluster tudja, melyik csomópont felelős az adott slotért, és oda irányítja a kérést.
A Redis Cluster fő előnyei:
- Lineáris skálázhatóság: Könnyedén adhatunk hozzá vagy távolíthatunk el csomópontokat a clusterből, ezzel növelve vagy csökkentve a kapacitást.
 - Hibatűrés: Automatikus failover mechanizmus a replikák segítségével biztosítja a szolgáltatás folyamatosságát.
 - Egyszerűség: Bár elosztott rendszerről van szó, a Redis Cluster viszonylag egyszerűen konfigurálható és kezelhető, különösen a `redis-cli –cluster` eszköz segítségével.
 - Teljesítmény: Az adatok elosztása csökkenti az egyes csomópontok terhelését, optimalizálva a kiolvasási és írási műveleteket.
 
Mikor érdemes Redis Clustert használni?
Nem minden projekthez szükséges a Redis Cluster, de bizonyos forgatókönyvekben elengedhetetlen a bevezetése:
- Nagy adathalmazok: Ha az adatok mennyisége meghaladja egyetlen Redis szerver memóriakapacitását.
 - Magas olvasási/írási terhelés: Ha az alkalmazás extrém mértékű olvasási és/vagy írási műveleteket végez, és egyetlen szerver már nem bírja a terhelést.
 - Kritikus rendelkezésre állás: Olyan alkalmazások esetén, ahol a leállás nem megengedett, és azonnali failoverre van szükség meghibásodás esetén.
 - Elosztott alkalmazások: Mikroservice architektúrák vagy több szerveren futó rendszerek esetén, ahol a központosított gyorsítótár skálázása kulcsfontosságú.
 - Jövőbeni növekedés: Ha előre látja, hogy alkalmazása gyorsan növekedni fog, érdemes már a kezdetektől a Cluster felé tekinteni.
 
Előfeltételek és Tervezés
Mielőtt belevágnánk a Redis Cluster beállításába, fontos néhány dologgal tisztában lenni és megtervezni a konfigurációt.
Minimális Csomópontszám
Egy működő Redis Clusterhez legalább 3 master csomópont szükséges a kvórum mechanizmus miatt (ez biztosítja, hogy a cluster egy esetleges „split-brain” szituáció esetén is képes legyen döntést hozni). Produkciós környezetben erősen ajánlott, hogy minden masternek legyen legalább egy replikája. Ezért a minimális, hibatűrő produkciós beállítás 3 master és 3 replica, azaz összesen 6 Redis példány.
Hardverkövetelmények
- RAM: A Redis memórián belüli adatbázis, így a rendelkezésre álló RAM mennyisége kritikus. Tervezze meg, hogy mennyi adatot fog tárolni, és hagyjon pufferterületet a növekedéshez.
 - CPU: Bár a Redis alapvetően egy szálon fut, a szervernek elegendő CPU-val kell rendelkeznie a hálózati I/O és az operációs rendszer feladatainak kezeléséhez. Nagy terhelés esetén a CPU is szűk keresztmetszet lehet.
 - Hálózati sávszélesség: A csomópontok közötti kommunikáció és a kliensek forgalma jelentős hálózati terhelést okozhat. Győződjön meg róla, hogy a hálózata képes kezelni ezt a forgalmat, ideális esetben Gigabit Ethernet vagy gyorsabb.
 - Tárolás: Bár a Redis memóriában tárolja az adatokat, a perzisztencia (AOF vagy RDB) miatt gyors diszkre van szükség a gyors íráshoz és betöltéshez.
 
Hálózati Konfiguráció
Minden Redis Cluster csomópontnak elérhetőnek kell lennie egymás számára a kliensporton (általában 6379) és a cluster bus porton (általában 10000 + kliensport, pl. 16379) keresztül. Győződjön meg róla, hogy a tűzfal szabályai engedélyezik ezt a kommunikációt.
A Cluster Topológia Tervezése
Döntse el, hány master csomópontra van szüksége, és hány replikát rendel hozzájuk. A replikák elhelyezése kulcsfontosságú: ideális esetben egy master és a replikája különböző fizikai szervereken, vagy akár különböző adatközpontokban legyen a maximális hibatűrés érdekében.
A Redis Cluster beállítása – Lépésről Lépésre Útmutató
Ebben a részben egy lépésről lépésre útmutatót mutatunk be egy Redis Cluster beállításához. Egyszerűség kedvéért feltételezzük, hogy ugyanazon a gépen hozzuk létre a példányokat különböző portokon. Produkciós környezetben minden példányt különálló virtuális gépen, konténerben vagy fizikai szerveren érdemes futtatni.
A. Redis telepítése
Először is, telepítenie kell a Redis-t. A legtöbb Linux disztribúcióban elérhető csomagkezelővel:
sudo apt update
sudo apt install redis-server
Vagy fordítsa le forrásból a legfrissebb verzióért:
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
sudo make install
Hozzon létre könyvtárakat minden egyes Redis példányhoz (pl. /etc/redis/7000, /etc/redis/7001, stb.) és másolja oda a redis.conf fájlt.
B. Konfigurációs fájlok előkészítése
Minden Redis példánynak szüksége van egy saját redis.conf fájlra. Ezek a fájlok nagyon hasonlóak lesznek, csak a portszámban és a fájl elérési útvonalakban különböznek.
Példa redis-7000.conf fájlra (másolja ezt mindegyikhez, és módosítsa a portot és az elérési útvonalakat):
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
logfile "/var/log/redis/redis_7000.log"
dir "/var/lib/redis/7000" # Adatkönyvtár
bind 127.0.0.1 # Vagy a szerver IP címe, ha távoli hozzáférés szükséges
protected-mode no # Fejlesztéshez/teszteléshez, produkcióban állítsa be a jelszót!
# Cluster konfiguráció
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000 # Milliszekundum, ennyi idő után tekinthető egy csomópont meghibásodottnak
appendonly yes # AOF perzisztencia engedélyezése
# Egyéb beállítások
# requirepass your_strong_password # Erősen ajánlott produkcióban
# masterauth your_strong_password # Szintén ajánlott
Ismételje meg ezt a lépést a 7001, 7002, 7003, 7004, 7005 portokhoz is, módosítva a portszámot, a pidfile, logfile, dir és cluster-config-file beállításokat. Győződjön meg róla, hogy a megadott könyvtárak léteznek és írhatóak (pl. sudo mkdir -p /var/log/redis /var/lib/redis/7000 stb., és állítsa be a megfelelő jogosultságokat).
C. Redis példányok indítása
Indítsa el az összes konfigurált Redis példányt:
redis-server /etc/redis/7000/redis-7000.conf
redis-server /etc/redis/7001/redis-7001.conf
redis-server /etc/redis/7002/redis-7002.conf
redis-server /etc/redis/7003/redis-7003.conf
redis-server /etc/redis/7004/redis-7004.conf
redis-server /etc/redis/7005/redis-7005.conf
Ellenőrizze, hogy az összes példány fut-e:
ps aux | grep redis-server
Látnia kell a 6 futó példányt.
D. Cluster létrehozása
Most jön a legizgalmasabb rész: a cluster tényleges létrehozása a redis-cli segítségével. A --cluster create paranccsal megadjuk a master csomópontok IP-címeit és portjait, valamint a --cluster-replicas opcióval, hogy hány replikát rendeljen minden masterhez. Mi 3 mastert és masterenként 1 replikát fogunk létrehozni.
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 
--cluster-replicas 1 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
A fenti parancsban a 7000, 7001, 7002 portokon futó példányok lesznek a masterek, és a 7003, 7004, 7005 portokon futók lesznek a replikák. A redis-cli megkérdezi, hogy megerősíti-e a cluster létrehozását. Írjon be yes-t, és nyomja meg az Entert.
A kimenetnek valami hasonlónak kell lennie:
>>> Performing hash slots allocation on 3 masters...
...
>>> Assigning 5461 slots to 127.0.0.1:7000
>>> Assigning 5462 slots to 127.0.0.1:7001
>>> Assigning 5461 slots to 127.0.0.1:7002
>>> Assigning replicas to masters...
>>> Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
>>> Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
>>> Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: e50... 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 2b0... 127.0.0.1:7003
   replicates e50...
M: 8f9... 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: e6a... 127.0.0.1:7004
   replicates 8f9...
M: d1c... 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: ac7... 127.0.0.1:7005
   replicates d1c...
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
E. A Cluster állapotának ellenőrzése
A cluster létrehozása után ellenőrizze az állapotát bármelyik csomóponton keresztül:
redis-cli -p 7000 cluster info
Keresse a cluster_state:ok sort. Ez jelzi, hogy a cluster megfelelően működik. Látnia kell továbbá a master és replica csomópontok számát, és a hozzárendelt slotokat.
A cluster nodes paranccsal részletesebb információt kaphat a csomópontokról és a master-replica kapcsolatokról:
redis-cli -p 7000 cluster nodes
Interakció a Redis Clusterrel
Ahhoz, hogy a Redis Clusterrel kommunikálhasson, használja a redis-cli -c parancsot. A -c opció engedélyezi a cluster módot, amely automatikusan kezeli a MOVED átirányításokat, ha egy kulcs nem a csatlakoztatott csomóponton található.
redis-cli -c -p 7000
127.0.0.1:7000> set mykey "hello cluster"
-> Redirected to slot 13589, moving to 127.0.0.1:7002
OK
127.0.0.1:7002> get mykey
-> Redirected to slot 13589, moving to 127.0.0.1:7002
"hello cluster"
Figyelje meg az átirányítást, ami jelzi, hogy a mykey hash értéke a 7002-es porton futó csomóponthoz tartozó slotba esik.
Amikor több kulccsal végez műveleteket (pl. MSET, MGET, tranzakciók), fontos, hogy ezek a kulcsok ugyanabban a hash slotban legyenek. Ezt a hash tag (hash tagek) használatával érheti el. A kulcs egy részét kapcsos zárójelek ({}) közé téve a Redis csak a zárójelek közötti részt használja a hash számításához. Például:
{user:100}.name{user:100}.email
Ezek a kulcsok ugyanabba a slotba kerülnek, mert a hash számítás során mindkettőhöz csak a user:100 rész lesz felhasználva. Így biztonságosan végezhet velük multi-key műveleteket.
A legtöbb modern Redis kliens könyvtár (pl. Jedis, StackExchange.Redis, go-redis) cluster-aware, és automatikusan kezeli a slot-átirányításokat, így nem kell manuálisan foglalkoznia velük az alkalmazáskódban.
A Redis Cluster kezelése
A. Csomópont hozzáadása a Clusterhez
A skálázhatóság egyik kulcsfontosságú eleme a könnyű bővíthetőség. Ha több kapacitásra van szüksége, egyszerűen adhat hozzá új csomópontokat.
- Hozza létre és indítsa el az új Redis példányt egy konfigurációs fájllal (pl. 
redis-7006.conf), pontosan úgy, mint az előző lépésekben. - Adja hozzá az új csomópontot a clusterhez, mint replikát egy létező masterhez, vagy mint új mastert, amelynek később slotokat kell adnia.
- Replikaként: Ha egy meglévő masterhez akar replikát hozzáadni (pl. 7000-hez), akkor a parancs:
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave --cluster-master-id <7000-es master node ID-je>A master node ID-jét a
redis-cli -p 7000 cluster nodesparanccsal tudja lekérdezni. - Új masterként: Ha új masterként szeretné hozzáadni, akkor:
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000Ekkor ez a csomópont nulla slottal indul, és Önnek kell majd slotokat hozzárendelnie (resharding).
 
 - Replikaként: Ha egy meglévő masterhez akar replikát hozzáadni (pl. 7000-hez), akkor a parancs:
 
Slotok újraelosztása (Resharding): Ha új mastert adott hozzá, vagy csak kiegyensúlyozatlan a slotelosztás, újraeloszthatja a slotokat:
redis-cli --cluster reshard 127.0.0.1:7000
A parancs interaktívan végigvezeti Önt a slotok elosztásán, megkérdezi, hány slotot szeretne áthelyezni, hová, és melyik csomópontról. Vagy használhatja a --cluster-from, --cluster-to, --cluster-slots opciókat is a nem interaktív működéshez.
B. Csomópont eltávolítása a Clusterből
Hasonlóan az addinghoz, a node eltávolítása is lehetséges.
- Ha mastert távolít el: Először át kell helyeznie az összes slotot a törölni kívánt masterről egy másik masterre (resharding).
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from <törlendő_node_ID> --cluster-to <cél_node_ID> --cluster-slots <slotok_száma> - Ezután távolítsa el a csomópontot a clusterből:
redis-cli --cluster del-node 127.0.0.1:7000 <törlendő_node_ID>A
<törlendő_node_ID>az eltávolítani kívánt csomópont egyedi azonosítója, amelyet acluster nodesparanccsal kaphat meg. - Miután eltávolította a csomópontot a clusterből, állítsa le a Redis példányt, és törölje a konfigurációs fájljait.
 
C. Állapotfigyelés és karbantartás
A folyamatos és megbízható működés érdekében rendszeres állapotfigyelésre és karbantartásra van szükség:
- Log fájlok: Figyelje a Redis log fájlokat az esetleges hibák vagy figyelmeztetések után.
 cluster infoéscluster nodes: Rendszeresen futtassa ezeket a parancsokat a cluster állapotának ellenőrzéséhez.- Rendszererőforrások: Monitorozza a CPU, RAM, hálózat és diszk I/O használatát minden csomóponton.
 - Biztonsági mentés: Bár a cluster magas rendelkezésre állást biztosít, a perzisztencia beállításai (AOF, RDB) továbbra is fontosak a teljes adatvesztés elkerülésére katasztrófa esetén.
 
Bevált Gyakorlatok és Megfontolandó Szempontok
- Hálózati Latencia: A Redis Cluster teljesítményét nagymértékben befolyásolja a csomópontok közötti hálózati késleltetés. Ideális esetben a csomópontok ugyanabban a LAN-ban vagy adatközpontban legyenek.
 - Csomópont Izoláció: Produkciós környezetben minden Redis példányt különálló fizikai szerveren, virtuális gépen vagy konténerben futtasson. Ez minimalizálja a „szomszéd zaj” hatását és növeli az hibatűrést.
 - Perzisztencia: Engedélyezze az AOF-et (
appendonly yes) vagy az RDB-t a Redis-ben. Az AOF általában jobb adatbiztonságot nyújt, mert tranzakciónként írja a változásokat. - Monitorozás: Használjon dedikált monitorozási eszközöket (pl. Prometheus, Grafana) a Redis metrikák és a cluster állapotának nyomon követésére.
 - Biztonság: Ne futtassa a Redis-t jelszó nélkül a produkcióban. Használjon 
requirepass-t a kliens autentikációhoz ésmasterauth-ot a replika hitelesítéséhez. A tűzfal beállításokkal korlátozza a hozzáférést. - Kliens Könyvtárak: Mindig cluster-aware kliens könyvtárat használjon, amely képes kezelni a slot átirányításokat és a failovert.
 - Tesztelés: Rendszeresen tesztelje a cluster failover képességét mesterséges meghibásodások (pl. csomópont leállítása) szimulálásával, hogy meggyőződjön a helyes működésről.
 - Memória Túlköltés (Memory Overcommit): Kerülje el a memória túlköltését (overcommit) a szerveren, ahol a Redis fut, mert ez drasztikusan rontja a teljesítményt.
 - Operációs Rendszer Tuning: Bizonyos OS-szintű optimalizációk (pl. TCP backlog növelése, Transparent Huge Pages kikapcsolása) javíthatják a Redis teljesítményét.
 
Lehetséges buktatók
- Hash Tag Hiánya: Ha multi-key műveleteket próbál végrehajtani különböző slotokban lévő kulcsokon anélkül, hogy hash tageket használna, a Redis Cluster 
CROSSSLOThibát dob. - Nem Elegendő Master Csomópont: Kevesebb mint 3 master csomóponttal a cluster nem lesz hibatűrő, és problémák merülhetnek fel kvórum elvesztése esetén.
 - Hálózati Problémák: A hálózati instabilitás vagy a magas késleltetés split-brain (hálózati felosztás) szituációkhoz vezethet, ahol a cluster csomópontjai nem tudnak kommunikálni egymással.
 - Helytelen 
cluster-node-timeout: Ha ez az érték túl alacsony, a cluster tévesen hibásnak minősíthet csomópontokat hálózati késleltetés miatt; ha túl magas, a failover túl sokáig tarthat. 
Konklúzió
A Redis Cluster beállítása és konfigurálása kulcsfontosságú lépés a modern, skálázható és magas rendelkezésre állású alkalmazások építésében. Bár elsőre bonyolultnak tűnhet, a Redis robusztus és jól dokumentált funkciókkal segíti a beállítást és a kezelést. A gondos tervezéssel, a helyes konfigurációval és a bevált gyakorlatok követésével képes lesz egy megbízható és nagy teljesítményű Redis infrastruktúrát létrehozni, amely képes kezelni az alkalmazásának növekvő igényeit.
Reméljük, hogy ez az útmutató segített megérteni a Redis Cluster alapjait és gyakorlati beállítását. Ne habozzon kísérletezni vele, hogy a legtöbbet hozza ki belőle!
Leave a Reply