A Redis Cluster beállítása a skálázhatóság jegyében

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.

  1. 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.
  2. 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 nodes paranccsal 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:7000
                      

      Ekkor ez a csomópont nulla slottal indul, és Önnek kell majd slotokat hozzárendelnie (resharding).

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.

  1. 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>
            
  2. 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 a cluster nodes paranccsal kaphat meg.

  3. 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 és cluster 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 és masterauth-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 CROSSSLOT hibá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

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük