1. Patroni คืออะไร?
Patroni เป็นเครื่องมือ Open Source ที่ช่วยบริหารจัดการระบบ PostgreSQL ให้รองรับการทำงานแบบ High Availability (HA) โดยอัตโนมัติ โดย Patroni ทำหน้าที่บริหารความเป็น “Leader” ของ PostgreSQL cluster รวมถึงการทำ failover และ recovery ให้โดยอัตโนมัติเมื่อเกิดเหตุการณ์ที่ node หลัก (primary) ไม่สามารถให้บริการได้
Patroni ทำงานร่วมกับ Distributed Consensus Store อย่างเช่น:
- etcd
- Consul
- ZooKeeper
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.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 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