Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Redis Cluster จัดการกับความล้มเหลวของโหนดได้อย่างไร


Redis Cluster จัดการกับความล้มเหลวของโหนดได้อย่างไร


Redis Cluster จัดการกับความล้มเหลวของโหนดผ่านการรวมกันของการตรวจจับความล้มเหลวการส่งเสริมแบบจำลองและการจัดการสถานะของคลัสเตอร์เพื่อให้แน่ใจว่าการทำงานและความพร้อมใช้งานของข้อมูลอย่างต่อเนื่อง มันถูกออกแบบมาเพื่อความอยู่รอดของความล้มเหลวของโหนดสองสามโหนดโดยการส่งเสริมแบบจำลองโดยอัตโนมัติเพื่อแทนที่อาจารย์ที่ไม่สามารถเข้าถึงได้รักษาความสมบูรณ์ของพื้นที่สำคัญในขณะที่ลดความเสี่ยงการสูญเสียข้อมูล

การสื่อสารคลัสเตอร์และการตรวจจับความล้มเหลว

โหนดคลัสเตอร์ Redis สื่อสารผ่านโปรโตคอลไบนารีที่ใช้ TCP โดยเฉพาะที่เรียกว่า Redis Cluster Bus แต่ละโหนดจะรักษาการเชื่อมต่อกับโหนดอื่น ๆ ในคลัสเตอร์โดยใช้บัสนี้ทำให้การตรวจสุขภาพอย่างต่อเนื่องและการแพร่กระจายของรัฐ โหนดส่งแพ็คเก็ต Ping เป็นระยะเพื่อยืนยันสถานะการดำเนินงานของเพื่อนร่วมงานและแบ่งปันข้อมูลเกี่ยวกับสถานะของคลัสเตอร์ การสื่อสารนี้ใช้โปรโตคอลซุบซิบเพื่อเผยแพร่ข้อมูลคลัสเตอร์อย่างมีประสิทธิภาพช่วยในการตรวจจับความล้มเหลวของโหนด

โหนดตรวจสอบเพื่อนโดยใช้กลไกการปิงที่ใช้งานอยู่ หากโหนดไม่ตอบสนองต่อการปิงภายในระยะเวลาหมดเวลาที่กำหนดค่า (Node_TimeOut) มันจะถูกตั้งค่าสถานะว่าอาจล้มเหลวด้วยสถานะ PFAIL นี่เป็นข้อบ่งชี้ความล้มเหลวเบื้องต้นซึ่งหมายความว่าโหนดอาจไม่สามารถเข้าถึงได้หรือลง แต่ยังไม่ได้รับการยืนยัน หากเงื่อนไข pfail ยังคงมีอยู่และได้รับการยืนยันโดยโหนดหลักส่วนใหญ่โหนดจะถูกทำเครื่องหมายว่าล้มเหลวแสดงว่าถือว่าไม่สามารถเข้าถึงได้หรือลงโดยคลัสเตอร์ กลไกการตรวจจับความล้มเหลวที่อิงกับฉันทามตินี้ช่วยป้องกันข้อดีที่ผิดพลาดในการระบุโหนดที่ล้มเหลว

การจัดการความล้มเหลวของโหนดหลัก

เมื่อโหนดหลักถูกตั้งค่าสถานะเป็นความล้มเหลว Redis Cluster เริ่มกระบวนการ Failover เพื่อส่งเสริมหนึ่งในแบบจำลองเพื่อเป็นอาจารย์ใหม่ กระบวนการนี้จะถูกกระตุ้นโดยอัตโนมัติโดยเครื่องตรวจจับความล้มเหลวของคลัสเตอร์โดยไม่ต้องมีการแทรกแซงการดูแลระบบ แบบจำลองที่ได้รับการเลื่อนตำแหน่งจะรับผิดชอบในการให้บริการสล็อตแฮชที่จัดการก่อนหน้านี้โดยอาจารย์ที่ล้มเหลวเพื่อให้มั่นใจว่าคลัสเตอร์สามารถให้บริการคำขอต่อไปโดยไม่ต้องกำหนดค่าด้วยตนเอง

ความล้มเหลวเกิดขึ้นเฉพาะในกรณีที่มีการจำลองแบบอย่างน้อยหนึ่งแบบและสามารถเข้าถึงได้เพื่อส่งเสริม หากไม่มีการจำลองแบบที่เหมาะสมคลัสเตอร์จะเข้าสู่สถานะข้อผิดพลาดซึ่งจะหยุดรับแบบสอบถามเพื่อป้องกันการให้บริการข้อมูลที่ไม่สอดคล้องกัน สิ่งนี้เน้นถึงความสำคัญของการกำหนดค่าแบบจำลองสำหรับแต่ละต้นแบบเพื่อรักษาความพร้อมใช้งานสูง

กลไกการล้มเหลวและความปลอดภัย

ในระหว่างการล้มเหลวแบบจำลองรอการซิงโครไนซ์อย่างสมบูรณ์กับต้นแบบที่กำลังเปลี่ยนมาเพื่อให้แน่ใจว่าได้ประมวลผลการอัปเดตที่รอดำเนินการทั้งหมดเพื่อหลีกเลี่ยงการสูญเสียข้อมูล มันประสบความสำเร็จโดยการจับคู่การชดเชยการทำซ้ำกับต้นแบบดังนั้นจึงมีชุดข้อมูลที่ทันสมัยก่อนที่จะสมมติบทบาทหลัก

เมื่อซิงโครไนซ์แล้วแบบจำลองขอให้มีการกำหนดค่ายุคใหม่จากอาจารย์ส่วนใหญ่ Epoch เป็นการประทับเวลาเชิงตรรกะที่ใช้ในการติดตามการเปลี่ยนแปลงการกำหนดค่าในคลัสเตอร์ หลังจากได้รับฉันทามติแล้วแบบจำลองออกอากาศการกำหนดค่าที่อัปเดตไปยังโหนดทั้งหมดประกาศโปรโมชั่นเป็นอาจารย์และการลดระดับอาจารย์เก่าเพื่อจำลองหรือการลบ

ต้นแบบเก่าเมื่อกู้คืนจะได้รับการอัปเดตการกำหนดค่านี้และหยุดการตอบคำถามเป็นต้นแบบ มันเปลี่ยนเส้นทางการร้องขอของลูกค้าไปยังอาจารย์ใหม่เพื่อให้มั่นใจว่าลูกค้าจะมีปฏิสัมพันธ์กับคลัสเตอร์ต่อไปอย่างโปร่งใสโดยไม่ต้องแทรกแซงด้วยตนเอง

การจัดการพาร์ติชันเครือข่ายและสถานการณ์แยกสมอง

Redis Cluster ใช้ฉันทามติที่อิงกับส่วนใหญ่เพื่อหลีกเลี่ยงปัญหาการแยกสมองระหว่างพาร์ติชันเครือข่าย อาจารย์จะล้มเหลวก็ต่อเมื่อไม่สามารถเข้าถึงได้มากกว่าครึ่งหนึ่งของอาจารย์ในคลัสเตอร์ อาจารย์ที่ไม่สามารถสื่อสารกับคนส่วนใหญ่จะหยุดรับการเขียนป้องกันไม่ให้สถานะข้อมูลที่แตกต่างกันระหว่างพาร์ติชัน

อย่างไรก็ตามหากพาร์ติชั่นของชนกลุ่มน้อยมีลูกค้าที่ยังคงเขียนถึงอาจารย์ก่อนที่จะล้มเหลวมีโอกาสที่จะสูญเสียการเขียน Redis ช่วยลดความเสี่ยงนี้โดยการปฏิเสธการเขียนในด้านชนกลุ่มน้อยหลังจากหมดเวลาและในด้านส่วนใหญ่โดยความล้มเหลวอย่างรวดเร็วเหนืออาจารย์ที่ไม่สามารถเข้าถึงได้อย่างรวดเร็ว

แม้จะมีข้อควรระวังเหล่านี้การเขียนอาจหายไปในระหว่างหน้าต่างที่ล้มเหลวเนื่องจาก Redis ใช้การจำลองแบบอะซิงโครนัสระหว่างอาจารย์และแบบจำลอง เนื่องจากการตอบกลับการเขียนคำสั่งและการอัปเดตการจำลองแบบจะถูกส่งเกือบพร้อมกันหน้าต่างสำหรับการสูญเสียการเขียนนั้นแคบมาก แต่ไม่เป็นไปไม่ได้

ตัวเลือกการกำหนดค่าที่มีผลต่อการจัดการความล้มเหลว

Redis Cluster มีตัวเลือกการกำหนดค่าที่มีผลต่อความพร้อมใช้งานและพฤติกรรมในระหว่างความล้มเหลวของโหนด:

-`cluster-require-full-coverage` (ค่าเริ่มต้นใช่): คลัสเตอร์หยุดการรับการเขียนหากส่วนใดส่วนหนึ่งของพื้นที่คีย์ถูกเปิดเผยเนื่องจากความล้มเหลวของโหนด
-`cluster-allow-reads-when-down` (หมายเลขเริ่มต้น): ควบคุมว่าการอ่านจะได้รับอนุญาตเมื่อคลัสเตอร์อยู่ในสถานะความล้มเหลว การเปิดใช้งานสิ่งนี้จะช่วยให้การอ่านจากโหนดแม้ในช่วงความล้มเหลวบางส่วน แต่อาจเสี่ยงต่อข้อมูลที่ค้างอยู่

การตั้งค่าเหล่านี้ช่วยให้ผู้ดูแลระบบสามารถปรับสมดุลความพร้อมใช้งานและความสอดคล้องตามข้อกำหนดของแอปพลิเคชัน

การสนับสนุนการล้มเหลวด้วยตนเอง

นอกเหนือจากความล้มเหลวอัตโนมัติ Redis Cluster ยังให้คำสั่ง Failover ด้วยตนเองที่สามารถออกบนโหนดแบบจำลองได้ สิ่งนี้มีประโยชน์สำหรับการบำรุงรักษาหรือการทดสอบสถานการณ์ที่ผู้ดูแลระบบต้องการแลกเปลี่ยนบทบาทหลักโดยไม่ต้องรอเหตุการณ์ความล้มเหลวจริง

Manual Failover ทำงานโดยการปิดกั้นลูกค้าในอาจารย์ปัจจุบันรอให้แบบจำลองติดตามอย่างเต็มที่แล้วโปรโมตแบบจำลองด้วยการเปลี่ยนแปลงอะตอมที่ราบรื่น สิ่งนี้ทำให้มั่นใจได้ว่าไม่มีการสูญเสียข้อมูลในระหว่างการเปลี่ยนแปลงบทบาทและการหยุดชะงักน้อยที่สุดให้กับลูกค้า

สรุป

Redis Cluster จัดการกับความล้มเหลวของโหนดเป็นหลักผ่านการตรวจจับความผิดพลาดและระบบการล้มเหลวโดยใช้การตรวจสอบอย่างต่อเนื่องผ่านบัสคลัสเตอร์ Redis และโปรโตคอลซุบซิบ โหนดจะตรวจจับอาจารย์ที่ไม่สามารถเข้าถึงได้และส่งเสริมแบบจำลองโดยอัตโนมัติหลังจากกระบวนการฉันทามติที่กำหนดให้อาจารย์ส่วนใหญ่เห็นด้วยกับความล้มเหลว Failover ได้รับการออกแบบมาเพื่อลดการสูญเสียข้อมูลโดยการสร้างความมั่นใจว่าแบบจำลองจะถูกซิงโครไนซ์อย่างสมบูรณ์ก่อนการโปรโมต พาร์ติชันเครือข่ายได้รับการจัดการผ่านการตัดสินใจส่วนใหญ่เพื่อป้องกันเงื่อนไขการแยกสมองแม้ว่าหน้าต่างแคบ ๆ ของการสูญเสียการเขียนอาจเกิดขึ้นเนื่องจากการจำลองแบบแบบอะซิงโครนัส ตัวเลือกการกำหนดค่าช่วยให้สามารถปรับความพร้อมใช้งานได้กับความสอดคล้องระหว่างความล้มเหลวและคำสั่ง Failover ด้วยตนเองทำให้ผู้ประกอบการควบคุมการบำรุงรักษา

สถาปัตยกรรมนี้ช่วยให้ Redis Cluster สามารถให้ความพร้อมใช้งานสูงและความทนทานต่อพาร์ติชันด้วยการกู้คืนอัตโนมัติจากความล้มเหลวของโหนดหลักทำให้มั่นใจได้ว่าคลัสเตอร์จะยังคงทำงานและสอดคล้องกันภายใต้สถานการณ์ความล้มเหลว