นี่คือวิธีที่ Redis Cluster จัดการกับความล้มเหลวของโหนด:
เฟลโอเวอร์อัตโนมัติ
เมื่อโหนดต้นแบบคลัสเตอร์ Redis ล้มเหลว คลัสเตอร์จะเลื่อนระดับหนึ่งในโหนดเรพลิกาโดยอัตโนมัติเพื่อให้ต้นแบบนั้นกลายเป็นต้นแบบใหม่ กระบวนการเฟลโอเวอร์นี้เกิดขึ้นโดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงด้วยตนเอง
ขั้นตอนสำคัญในกระบวนการเฟลโอเวอร์คือ:
1. โหนดอื่นๆ ในคลัสเตอร์ตรวจพบว่าโหนดหลักล้มเหลว ไม่ว่าจะผ่านโปรโตคอลซุบซิบของคลัสเตอร์หรือโดยการพยายามเชื่อมต่อกับโหนด
2. จากนั้นคลัสเตอร์จะจัดให้มีการเลือกตั้งระหว่างโหนดเรพลิกาสำหรับต้นแบบนั้น แบบจำลองที่มีข้อมูลล่าสุดจะถูกเลือกเป็นต้นแบบใหม่
3. โหนดเรพลิกาที่เลือกจะได้รับการเลื่อนขั้นให้เป็นโหนดหลักใหม่ จากนั้นแบบจำลองอื่นๆ จะได้รับการกำหนดค่าใหม่เพื่อจำลองแบบจากต้นแบบใหม่
4. ไคลเอ็นต์จะถูกเปลี่ยนเส้นทางไปยังโหนดหลักใหม่โดยใช้การตอบสนองข้อผิดพลาด 'MOVED' ซึ่งมีการแมป slot-to-node ใหม่
ความคุ้มครองสล็อต
เพื่อให้พร้อมใช้งานได้ในระหว่างที่โหนดล้มเหลว Redis Cluster กำหนดให้โหนดหลักส่วนใหญ่พร้อมใช้งานและสามารถสื่อสารได้ สิ่งนี้เรียกว่าการรักษา "ความครอบคลุมของสล็อต"
แต่ละโหนดหลักในคลัสเตอร์มีหน้าที่รับผิดชอบชุดย่อยของช่องแฮช 16,384 ช่อง ตราบใดที่ต้นแบบส่วนใหญ่ยังว่างอยู่และสามารถให้บริการสล็อตที่ได้รับมอบหมายได้ คลัสเตอร์ก็สามารถทำงานต่อไปได้
หากมีโหนดหลักมากเกินไปล้มเหลวจนโหนดหลักที่เหลือไม่สามารถครอบคลุมช่วงสล็อตแฮชเต็มได้ คลัสเตอร์จะไม่สามารถใช้งานได้จนกว่าโหนดที่ล้มเหลวจะกู้คืนหรือถูกแทนที่
โปรโมชั่นจำลอง
Redis Cluster อาศัยโหนดจำลองเพื่อให้มีความพร้อมใช้งานสูง เมื่อต้นแบบล้มเหลว โหนดจำลองตัวใดตัวหนึ่งจะได้รับการเลื่อนตำแหน่งให้เป็นต้นแบบใหม่โดยอัตโนมัติ
แบบจำลองที่มีข้อมูลล่าสุดจะถูกเลือกเป็นต้นแบบใหม่ สิ่งนี้ทำให้แน่ใจได้ถึงความสอดคล้องของข้อมูลในระหว่างกระบวนการเฟลโอเวอร์
การจัดการสมองแตกแยก
Redis Cluster ใช้วิธีการตามองค์ประชุมเพื่อจัดการพาร์ติชันเครือข่ายและหลีกเลี่ยงสถานการณ์ "สมองแตก" ที่คลัสเตอร์ถูกแบ่งออกเป็นคลัสเตอร์อิสระหลายคลัสเตอร์
หากต้นแบบส่วนใหญ่ไม่พร้อมใช้งาน โหนดที่เหลือจะปฏิเสธคำขอของไคลเอ็นต์จนกว่าพาร์ติชันจะได้รับการแก้ไข สิ่งนี้ทำให้มั่นใจได้ว่าข้อมูลจะคงความสอดคล้องกัน
ด้วยการใช้ประโยชน์จากกลไกเฟลโอเวอร์อัตโนมัติและกลไกตามควอรัมเหล่านี้ Redis Cluster จึงสามารถให้ความพร้อมใช้งานและความยืดหยุ่นสูงเมื่อเผชิญกับความล้มเหลวของโหนดและพาร์ติชันเครือข่าย
การอ้างอิง:[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