Category: Server

  • Cluster Galera ทำไมต้องเป็นเลขคี่

    Galera Cluster แนะนำให้ใช้จำนวนโหนดเป็นเลขคี่ (เช่น 3, 5, 7) เพื่อให้แน่ใจว่าจะสามารถกำหนด Quorum (เสียงข้างมาก) ได้อย่างชัดเจนและหลีกเลี่ยงสถานการณ์ Split-Brain


    Quorum และเสียงข้างมาก (Majority)

    Galera Cluster ใช้หลักการของ Quorum เพื่อรักษาความสอดคล้องของข้อมูลและความพร้อมใช้งานสูง (High Availability)

    • Quorum หมายถึงจำนวนโหนดขั้นต่ำที่ต้องเชื่อมต่อกันและทำงานได้เพื่อให้คลัสเตอร์ถือว่าทำงานได้อย่างถูกต้อง
    • ใน Galera Cluster การได้ Quorum จะเกิดขึ้นเมื่อ โหนดที่เหลืออยู่มีจำนวนมากกว่า 50% (เสียงข้างมาก) ของจำนวนโหนดทั้งหมดที่ทราบในการเป็นสมาชิกครั้งสุดท้าย (Last known membership)

    เหตุผลที่ต้องเป็นเลขคี่:

    1. ป้องกัน Split-Brain:
      • Split-Brain คือสถานการณ์ที่เกิดความผิดพลาดของเครือข่าย (Network Partition) ทำให้คลัสเตอร์แบ่งออกเป็นสองกลุ่ม กลุ่มละเท่าๆ กัน (เช่น คลัสเตอร์ 4 โหนด แบ่งเป็น 2 กลุ่ม กลุ่มละ 2 โหนด)
      • ถ้าจำนวนโหนดเป็นเลขคู่ เมื่อเกิดการแบ่งกลุ่มแบบเท่ากัน จะไม่มีกลุ่มใดที่มีเสียงข้างมาก (เกิน 50%) ทำให้ทุกโหนดเข้าสู่สถานะไม่ทำงาน (Non-Primary state) เพื่อป้องกันไม่ให้ข้อมูลแยกจากกัน (Diverge)
      • ถ้าจำนวนโหนดเป็นเลขคี่ (เช่น 3 โหนด) เมื่อเกิดการแบ่งกลุ่ม จะมีกลุ่มหนึ่งที่ใหญ่กว่าเสมอ (เช่น 1 โหนด กับ 2 โหนด) กลุ่มที่ใหญ่กว่า (2 โหนด) จะมีเสียงข้างมาก (Quorum) และสามารถดำเนินการต่อไปได้ ทำให้คลัสเตอร์ยังคงทำงานอยู่ได้
    2. ทนทานต่อความล้มเหลว (Fault Tolerance):
      • ในคลัสเตอร์ 3 โหนด ต้องมี 2 โหนดถึงจะมี Quorum ทำให้สามารถทนทานต่อความล้มเหลวของ 1 โหนด
      • ในคลัสเตอร์ 4 โหนด ต้องมี 3 โหนดถึงจะมี Quorum ทำให้สามารถทนทานต่อความล้มเหลวของ 1 โหนด เช่นกัน
      • จะเห็นว่าการเพิ่มจาก 3 เป็น 4 โหนด ไม่ได้เพิ่มความสามารถในการทนทานต่อความล้มเหลว ดังนั้นการใช้จำนวนโหนดเป็นเลขคี่ (3 หรือ 5) จึงมีประสิทธิภาพมากกว่าในแง่ของ High Availability ต่อทรัพยากรที่ใช้

    กรณีพิเศษ: 2 โหนด

    ถ้าต้องการคลัสเตอร์ที่มีโหนดข้อมูล (Data Node) เพียง 2 โหนด สามารถใช้ Galera Arbitrator (garbd) ซึ่งเป็นกระบวนการที่มีน้ำหนักเบา (Lightweight process) ที่ทำหน้าที่เป็น โหนดลงคะแนนเสียง (Voting Member) เท่านั้น โดยไม่เก็บข้อมูลหรือประมวลผลการเชื่อมต่อของไคลเอนต์

    • การเพิ่ม Galera Arbitrator เข้าไป ทำให้จำนวนสมาชิกสำหรับการลงคะแนนเสียงรวมเป็น 3 โหนด (โหนดข้อมูล 2 + Arbitrator 1) ซึ่งเป็นเลขคี่
    • ด้วยวิธีนี้ ถ้าโหนดข้อมูลตัวใดตัวหนึ่งล้มเหลว โหนดข้อมูลที่เหลืออยู่กับ Arbitrator ก็ยังคงมีเสียงข้างมาก (2 ใน 3) ทำให้คลัสเตอร์ยังคงทำงานได้

    ดังนั้น โดยสรุปคือควรทำให้จำนวน สมาชิกสำหรับลงคะแนนเสียง (Voting Members) เป็นเลขคี่เสมอ ไม่ว่าจะเป็นโหนดข้อมูลจริงทั้งหมด หรือใช้ Arbitrator มาช่วยในกรณีที่มีโหนดข้อมูลเป็นเลขคู่