Zde je návod, jak Redis Cluster zpracovává selhání uzlů:
Automatické převzetí služeb při selhání
Když hlavní uzel Redis Cluster selže, cluster automaticky povýší jeden z replikovaných uzlů, aby se tento hlavní uzel stal novým hlavním. Tento proces převzetí služeb při selhání probíhá automaticky bez jakéhokoli ručního zásahu.
Klíčové kroky v procesu převzetí služeb při selhání jsou:
1. Ostatní uzly v klastru detekují, že hlavní uzel selhal, buď prostřednictvím protokolu klastrů, nebo pokusem o připojení k uzlu.
2. Cluster pak provede volbu mezi replikovanými uzly pro tento master. Jako nový vzor je zvolena replika s nejaktuálnějšími daty.
3. Zvolený uzel repliky je povýšen na nový hlavní uzel. Ostatní repliky jsou poté překonfigurovány tak, aby se replikovaly z nového hlavního serveru.
4. Klienti jsou přesměrováni na nový hlavní uzel pomocí chybové odpovědi `MOVED`, která obsahuje nové mapování slot-to-node.
Pokrytí slotu
Aby Redis Cluster zůstal dostupný během selhání uzlů, vyžaduje, aby byla k dispozici většina hlavních uzlů a aby byla schopna komunikovat. Toto je známé jako udržování „krytí slotu“.
Každý hlavní uzel v clusteru je zodpovědný za podmnožinu 16 384 hash slotů. Dokud bude k dispozici většina masterů a budou moci obsluhovat jim přidělené sloty, může cluster pokračovat v provozu.
Pokud selže příliš mnoho hlavních uzlů tak, že zbývající hlavní uzly nemohou pokrýt celý rozsah hash slotů, klastr se stane nedostupným, dokud se poškozené uzly neobnoví nebo nebudou nahrazeny.
Propagace replik
Redis Cluster se spoléhá na replikované uzly, které poskytují vysokou dostupnost. Když hlavní server selže, jeden z jeho replikovaných uzlů je automaticky povýšen na nový hlavní server.
Jako nový vzor je zvolena replika s nejaktuálnějšími daty. Tím je zajištěna konzistence dat během procesu převzetí služeb při selhání.
Manipulace s Split-Brain
Redis Cluster používá přístup založený na kvoru ke zpracování síťových oddílů a vyhýbá se scénářům „rozděleného mozku“, kdy je cluster rozdělen do více nezávislých clusterů.
Pokud bude většina hlavních serverů nedostupná, zbývající uzly odmítnou požadavky klientů, dokud nebude oddíl vyřešen. Tím je zajištěna konzistence dat.
Využitím těchto mechanismů automatického převzetí služeb při selhání a kvora je Redis Cluster schopen poskytovat vysokou dostupnost a odolnost tváří v tvář poruchám uzlů a síťovým oddílům.
Citace:[1] https://yifan-online.com/en/km/article/detail/16750
[2] https://stackoverflow.com/questions/63878562/two-failure-support-in-3-node-redis-cluster
[3] https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/
[4] https://redis.io/docs/latest/commands/cluster-nodes/
[5] https://github.com/lettuce-io/lettuce-core/issues/2318