Database Cluster (Galera) ป้องกันข้อมูลแตกคนละชุด

Written by

in

คำว่า “Galera พัง” หลายคนเข้าใจผิดครับ

จริง ๆ แล้วต้องแยกเป็น 2 เรื่อง

  1. DNS Service (PowerDNS)
  2. Database Cluster (Galera)

เคสที่ 1: DNS1 พัง 1 เครื่อง

จาก 3 Nodes

DNS1 ❌
DNS2 ✅
DNS3 ✅

Galera ยังมี 2 เสียงจาก 3 เสียง

Quorum = ผ่าน

ผลลัพธ์

✅ DNS ตอบได้ปกติ

✅ เพิ่ม Zone ได้

✅ แก้ Record ได้

✅ DNSSEC ทำงานได้

ผู้ใช้แทบไม่รู้สึกอะไร


เคสที่ 2: DNS1 และ DNS2 พัง

เหลือ

DNS1 ❌
DNS2 ❌
DNS3 ✅

ตอนนี้เหลือ 1 เสียง

Galera มองว่า

“ฉันไม่รู้ว่าอีก 2 เครื่องตายจริง หรือเครือข่ายขาด”

เพื่อป้องกันข้อมูลเพี้ยน

Galera จะหยุดรับ Write


แต่ DNS ใช้งานได้ไหม?

ขึ้นกับการออกแบบ

แบบที่เจอบ่อย

PowerDNS อ่านข้อมูลใน MariaDB

ข้อมูลเก่ายังอยู่ครบ

DNS3
 ├─ PowerDNS ✅
 └─ MariaDB ✅

ผู้ใช้ยัง Query ได้

www.mbu.ac.th

mail.mbu.ac.th

ยังตอบได้ตามปกติ


ตัวอย่าง

ลูกค้าทั่วโลก

dig www.mbu.ac.th @ns3.mbu.ac.th

ยังได้

171.5.xxx.xxx

ปกติ


แต่ Admin จะเจอปัญหา

สมมุติคุณต้องการเพิ่ม

vpn.mbu.ac.th

หรือ

test.mbu.ac.th

แล้วรัน

INSERT INTO records …

Galera จะตอบประมาณ

WSREP has not yet prepared node for application use

หรือ

No quorum

หรือ

NON-PRIMARY state

สรุปคือ

❌ แก้ไขข้อมูลไม่ได้

✅ อ่านข้อมูลเดิมได้


ยกตัวอย่างในชีวิตจริง

นึกถึงกลุ่มไลน์กรรมการ 3 คน

A
B
C

กฎคือ

ต้องมีคนมากกว่าครึ่งเห็นด้วยก่อนถึงจะแก้ไขเอกสารได้


เหลือ A คนเดียว

A ✅
B ❌
C ❌

A ไม่รู้ว่า

  • B กับ C ตาย
  • หรือ Internet ขาด

ถ้า A แก้เอกสารต่อ

แล้ววันหนึ่ง B กับ C กลับมา

ข้อมูลจะขัดกันทันที

ดังนั้น Galera จึงบอกว่า

“อ่านได้ แต่ห้ามแก้”


เคสที่อันตรายที่สุด

Network Split (Split Brain)

สมมุติ

DNS1 <-> DNS2

คุยกันได้

แต่คุยกับ

DNS3

ไม่ได้


มุมมองของ DNS1/DNS2

DNS3 หาย

มุมมองของ DNS3

DNS1 DNS2 หาย

Galera จะเลือกฝั่งที่มีเสียงมากกว่า

DNS1 + DNS2 = 2 เสียง

ทำงานต่อ

✅ Write
✅ Read

ส่วน

DNS3 = 1 เสียง

ถูกบังคับเป็น

Non-primary
✅ Read
❌ Write

ป้องกันข้อมูลแตกคนละชุด


ในระบบ DNS จริงของคุณ

สมมุติ

ns1.mbu.ac.th
ns2.mbu.ac.th
ns3.mbu.ac.th

ผูกกับ

DNS1
DNS2
DNS3

แล้ว DNS1 กับ DNS2 พัง

จะเหลือ

ns3.mbu.ac.th

ถ้า Registrar มี NS ทั้ง 3 ตัว

Resolver ทั่วโลกจะลอง

ns1 > ไม่ตอบ

ลอง

ns2 > ไม่ตอบ

ลอง

ns3 > ตอบ

เว็บไซต์ยังเข้าได้, อีเมลยังเข้าได้, DNS ยังทำงานได้


แต่ช่วงนั้นคุณจะ

❌ เพิ่ม Zone ไม่ได้

❌ เปลี่ยน IP ไม่ได้

❌ แก้ Record ไม่ได้

จนกว่าอีก Node จะกลับมาอย่างน้อย 1 ตัว


วิธีแก้ในเหตุฉุกเฉิน

ถ้าคุณมั่นใจว่า

DNS1
DNS2

ตายจริง

และเหลือ

DNS3

เครื่องเดียว

สามารถสั่ง

galera_new_cluster

หรือ bootstrap node ใหม่

ให้ DNS3 กลายเป็น Primary Cluster ชั่วคราวได้

หลังจากนั้น

Write ได้
Read ได้

แต่ต้องทำด้วยความเข้าใจ เพราะหากอีก 2 เครื่องยังไม่ตายจริง อาจเกิดข้อมูลขัดแย้งได้


สรุปสั้นที่สุด

เมื่อ Galera 3 Nodes เหลือ 1 Node

ความสามารถใช้งานได้
ตอบ DNS Query✅
เปิดเว็บไซต์✅
รับอีเมล✅
อ่านข้อมูลในฐานข้อมูล✅
เพิ่ม Zone❌
แก้ไข Record❌
ทำ DNSSEC Key Update❌
เขียนข้อมูลใหม่❌

ดังนั้นคำว่า “Galera พัง” ในกรณีเหลือ 1 Node ไม่ได้หมายความว่า DNS ล่มทั้งระบบ แต่หมายถึง Cluster สูญเสีย Quorum จึงหยุดการเขียนข้อมูลใหม่เพื่อป้องกันข้อมูลเสียหาย ครับ।