รู้จักกับ Patroni เครื่องมือจัดการ High Availability สำหรับ PostgreSQL

แชร์ความรู้ Linux Ubuntu Web Server บทความ การ config server Linux FreeBSD Apache
การติดตั้ง XAMPP Mysql PHP ใครต้องการแชร์ความรู้เรื่องต่างๆ เหล่านี้ให้ ท่านหรืออื่น โพสที่หมวดนี้ได้

Moderator: mindphp, ผู้ดูแลกระดาน

Bundith
PHP Super Member
PHP Super Member
โพสต์: 298
ลงทะเบียนเมื่อ: 06/05/2025 9:23 am

รู้จักกับ Patroni เครื่องมือจัดการ High Availability สำหรับ PostgreSQL

โพสต์ที่ยังไม่ได้อ่าน โดย Bundith »

ในยุคของระบบที่ต้องทำงานตลอด 24 ชั่วโมง ไม่มีเวลาหยุดพัก การออกแบบฐานข้อมูลให้มีความ High Availability (HA) จึงเป็นสิ่งจำเป็นอย่างยิ่ง โดยเฉพาะกับฐานข้อมูลที่ใช้งานในระบบธุรกิจขนาดใหญ่ ซึ่งหากระบบฐานข้อมูลหยุดทำงานแม้เพียงไม่กี่นาที ก็อาจสร้างความเสียหายทั้งด้านข้อมูล การให้บริการ และความเชื่อมั่นของผู้ใช้, หนึ่งในฐานข้อมูลที่ได้รับความนิยมสูงในปัจจุบันคือ PostgreSQL ซึ่งแม้จะมีประสิทธิภาพและความสามารถสูง แต่ก็ไม่ได้มีระบบ High Availability แบบ built-in ที่พร้อมใช้งานทันที โชคดีที่มีเครื่องมือ Open Source ที่ออกแบบมาเพื่อจัดการ HA ให้กับ PostgreSQL อย่างมีประสิทธิภาพ และ Patroni คือหนึ่งในเครื่องมือที่ได้รับความนิยมมากที่สุด, บทความนี้จะพาคุณไปรู้จักกับ Patroni ตั้งแต่หลักการทำงาน พื้นฐานการติดตั้ง ตัวอย่างการใช้งานจริง ไปจนถึงคำแนะนำที่ควรรู้เมื่อนำไปใช้ในระบบ production.
Patroni เครื่องมือจัดการ High Availability สำหรับ PostgreSQL
Patroni เครื่องมือจัดการ High Availability สำหรับ PostgreSQL
partroni_HA.jpeg (24.08 KiB) Viewed 565 times
1. Patroni คืออะไร?
Patroni เป็นเครื่องมือ Open Source ที่ช่วยบริหารจัดการระบบ PostgreSQL ให้รองรับการทำงานแบบ High Availability (HA) โดยอัตโนมัติ โดย Patroni ทำหน้าที่บริหารความเป็น “Leader” ของ PostgreSQL cluster รวมถึงการทำ failover และ recovery ให้โดยอัตโนมัติเมื่อเกิดเหตุการณ์ที่ node หลัก (primary) ไม่สามารถให้บริการได้

Patroni ทำงานร่วมกับ Distributed Consensus Store อย่างเช่น:
  • etcd
  • Consul
  • ZooKeeper
ซึ่งจะใช้สำหรับเก็บ metadata ของ cluster เช่นว่าใครเป็น leader อยู่ในปัจจุบัน และข้อมูลการเลือก leader ใหม่เมื่อเกิดการล่ม (failover)

2. ส่วนประกอบของระบบที่ใช้ Patroni
ระบบที่ใช้ Patroni ประกอบด้วยองค์ประกอบหลักๆ ดังนี้:
  • PostgreSQL instances – เครื่องแม่ข่ายที่ติดตั้ง PostgreSQL โดยมีอย่างน้อย 2 node: primary และ replica
  • Patroni agent – ซอฟต์แวร์ที่รันบนทุก node เพื่อควบคุม PostgreSQL และสื่อสารกับ DCS (etcd/Consul)
  • Distributed Configuration Store (DCS) – เก็บสถานะของ cluster และทำหน้าที่ตัดสินใจแบบกระจาย
  • Load Balancer (แนะนำ) – เช่น HAProxy, PgBouncer เพื่อให้ client เชื่อมต่อกับ leader ได้โดยอัตโนมัติ
3. การทำงานของ Patroni
3.1 Initialization
เมื่อเริ่มต้นระบบ, Patroni แต่ละ node จะลงทะเบียนตัวเองกับ DCS และตรวจสอบว่า cluster มี leader หรือไม่ หากยังไม่มี leader, จะมีการเลือก node หนึ่งขึ้นมาเป็น leader และเริ่ม PostgreSQL ในโหมด Primary, Node อื่นๆ จะเริ่มในโหมด Replica และทำการ replication จาก leader

3.2 Health Check & Failover
Patroni จะตรวจสอบสุขภาพของ PostgreSQL และ DCS อย่างสม่ำเสมอ หาก node หลักล่ม, node อื่นจะทำการเลือก leader ใหม่โดยอัตโนมัติ โดยอิงตามข้อมูล replication lag และเงื่อนไขอื่นๆ ที่กำหนดไว้, เมื่อได้ leader ใหม่, node นั้นจะเริ่ม PostgreSQL ในโหมด primary ส่วน node ที่เหลือจะกลายเป็น replica ทันที

3.3 Manual Failover / Switchover
ผู้ดูแลระบบสามารถสั่งเปลี่ยน leader แบบ manual ได้ เช่น ในกรณีที่ต้องการอัปเกรดเครื่องหลัก:
patronictl switchover --master=node1 --candidate=node2
หรือหากต้องการสั่งให้ node ใด node หนึ่งเป็น leader โดย force:
patronictl failover --candidate=node3

4. ประโยชน์ของ Patroni
4.1 High Availability
Patroni ช่วยให้ระบบฐานข้อมูล PostgreSQL มีความพร้อมใช้งานสูง โดยเมื่อ node ใดล่ม ระบบจะเปลี่ยน leader อัตโนมัติภายในไม่กี่วินาที โดยไม่ต้องมีการแทรกแซงจากผู้ดูแล

4.2 Automate Failover
ลดภาระของผู้ดูแลระบบ ไม่ต้องคอยตรวจสอบและเปลี่ยน node เองเมื่อต้องการ failover หรือ switchover

4.3 ร่วมงานกับ Load Balancer ได้อย่างราบรื่น
Patroni ทำงานร่วมกับ Load Balancer อย่าง HAProxy หรือ PgBouncer ได้ดีมาก โดยให้ข้อมูลว่า node ไหนคือ leader เพื่อให้ client เชื่อมต่อได้โดยไม่รู้สึกถึงการเปลี่ยนแปลง

4.4 ความยืดหยุ่นสูง
สามารถเลือกใช้ DCS ที่เหมาะสมกับโครงสร้างระบบขององค์กร เช่น etcd สำหรับ Kubernetes, Consul สำหรับระบบคลาวด์

4.5 ใช้ร่วมกับ Docker หรือ Kubernetes ได้อย่างง่ายดาย
Patroni รองรับการใช้งานใน containerized environment ได้เป็นอย่างดี โดยเฉพาะเมื่อใช้ร่วมกับ etcd และระบบ orchestrator อย่าง Kubernetes

5. ตัวอย่างการใช้งาน Patroni ในระบบจริง
กรณี: ระบบ PostgreSQL Cluster 3 Node บน Docker
  • Node 1: PostgreSQL + Patroni (Primary)
  • Node 2: PostgreSQL + Patroni (Replica)
  • Node 3: PostgreSQL + Patroni (Replica)
  • DCS: etcd 3 Node
  • Load Balancer: HAProxy
ทุก node จะเชื่อมต่อกับ etcd เพื่อแลกเปลี่ยนข้อมูลเกี่ยวกับ cluster
เมื่อ node 1 (primary) ถูกปิดโดยจำลองการล่ม, Patroni บน node 2 จะตรวจสอบสถานะ และประกาศตัวเองเป็น leader ใหม่โดยอัตโนมัติ HAProxy จะอัปเดตเส้นทางเชื่อมต่อใหม่ภายในไม่กี่วินาที

6. คำแนะนำในการนำไปใช้จริง
6.1 เริ่มจากการทดลองในสภาพแวดล้อม Dev/Test
ก่อนนำไปใช้งานจริง ควรทดสอบ Patroni ในระบบจำลองให้ครอบคลุมสถานการณ์ เช่น การล่มของ node, การ network partition, การกู้คืนข้อมูล

6.2 ใช้ DCS ที่มีความเสถียร
แนะนำให้ใช้ etcd cluster ที่มี 3 node หรือมากกว่า และตั้งค่าให้พร้อมใช้งานตลอดเวลา DCS เป็นหัวใจของการตัดสินใจใน Patroni

6.3 ตั้งค่า TLS และรหัสผ่านอย่างเข้มงวด
ทั้ง Patroni และ PostgreSQL ควรตั้งค่าความปลอดภัยอย่างเหมาะสม เช่น การใช้ TLS, กำหนดรหัสผ่าน, จำกัดสิทธิ์การเข้าถึง ฯลฯ

6.4 ติดตั้ง Load Balancer เพื่อให้ client เชื่อมต่อได้ง่าย
แนะนำให้ติดตั้ง HAProxy หรือ PgBouncer เพื่อให้การเชื่อมต่อกับ leader ทำได้อย่างอัตโนมัติ ไม่ต้องให้ client รู้ว่า leader เปลี่ยนไปอยู่ node ใด

6.5 เฝ้าระวังและสำรองข้อมูลเสมอ
แม้ระบบจะทำงานแบบอัตโนมัติ แต่ก็ควรมีระบบ monitoring, alert และการสำรองข้อมูล (backup/snapshot) อย่างสม่ำเสมอ

บทสรุป
Patroni เป็นเครื่องมือสำคัญที่ช่วยให้ PostgreSQL รองรับการทำงานในลักษณะ High Availability ได้อย่างแท้จริง ด้วยความสามารถในการจัดการ cluster, ทำ failover อัตโนมัติ และรองรับการขยายระบบแบบง่ายดาย Patroni จึงเหมาะอย่างยิ่งสำหรับองค์กรที่ต้องการระบบฐานข้อมูลที่มั่นคง พร้อมใช้งานเสมอ, การใช้งาน Patroni แม้จะมีความซับซ้อนในช่วงเริ่มต้น แต่หากวางระบบอย่างถูกต้องก็จะสามารถลดภาระของผู้ดูแลระบบ และเพิ่มความเชื่อมั่นให้กับระบบผลิต (production system) ได้อย่างมาก, หากคุณกำลังมองหาเครื่องมือสำหรับสร้าง PostgreSQL HA Cluster ที่มีความเสถียร ใช้งานง่าย และมีการรองรับในระดับองค์กร Patroni คือคำตอบที่ไม่ควรมองข้าม

อ้างอิง
https://github.com/patroni/patroni
https://www.enterprisedb.com/docs/supported-open-source/patroni/
https://docs.percona.com/postgresql/17/solutions/high-availability.html#etcd
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 6