มาทำความรู้จักกับ EDB Failover Manager (EFM) กันเถอะ

Siwakorn Taeprajit
Sirisoft
Published in
4 min readApr 28, 2023

สวัสดีครับ พีทนะครับ ตอนนี้เราทำงานในตำแหน่ง Database Administrator อยู่ที่บริษัท Sirisoft ครับ วันนี้พีทจะมาแนะนำ Software ในการทำ High Availability ให้กับ EDB Postgres Advanced Server (EPAS)

โดยผมต้องเกริ่นนำก่อนเลยว่า EDB Postgres Advanced Server (EPAS) นั่นคือ Database SQL ที่พัฒนาโดย EnterpriseDB ซึ่งเป็นเวอร์ชันพัฒนาจาก PostgreSQL โดยมี Features และมีความสามารถเพิ่มเติมจาก PostgreSQL version opensource ทั่วไป เช่น Oracle database compatibility, security และ performance

EFM คืออะไร

EFM หรือ EDB Failover Manager เป็น tool สำหรับ Manage Postgres Database Cluster และสามารถทำให้ Cluster ของเราเป็น High Availability (HA) อย่างง่ายเลย โดยเครื่อง Primary-Standby จะต้อง Streaming Replication กันก่อนนะ EFM จึงจะสามารถทำ Automate Failover ในกรณีที่ Primary node down ครับ

*Note: EFM สามารถใช้งานได้ทั้ง PostgreSQL แบบ Open Source และ EDB Postgres Advance Server (EPAS) เลยครับ

Architecture

จากรูป Architecture จะเห็นได้ว่า mode ของเครื่อง Primary จะเป็น Read/Write รวมถึง VIP(Virtual IP Address) ก็จะไปเกาะอยู่ที่เครื่อง Primary โดยจะทำการ Streaming Replication ไปที่เครื่อง Standby ในส่วนของเครื่อง Standby จะมี mode เป็น Read Only โดย Client Application จะต่อเข้ามาด้วย VIP และจะมาเรียกใช้ข้อมูล (Select,Insert,Delete) จากเครื่อง Primary ครับ

มาเริ่ม Install EDB Postgres Failover Manager กันเลย

All nodes

root@<address># yum install edb-efm44

1) Create configuration file เริ่มต้นจาก copy sample file สำหรับสร้าง configuration file ของ Failover Manager และเปลี่ยน owner ให้สำหรับ user efm

On Master

root@<address># cd /etc/edb/efm-4.4
root@<address># cp efm.properties.in efm.properties
root@<address># cp efm.nodes.in efm.nodes
root@<address># chown efm:efm efm.properties
root@<address># chown efm:efm efm.nodes

2) สร้าง encrypted password สำหรับ efm.properties file

Note : encrypt password is different from the example

3) Update ไฟล์ efm.nodes เพิ่มเลข <ip address:port> all nodes ใน cluster (Primary & Standby) โดยไฟล์นี้จะถูกอ่านเมื่อเริ่มต้นเพื่อให้ master รู้ว่า ip address อะไรบ้างใน cluster

4) Update ไฟล์ efm.properties ตาม demonstrate environment

db.user=enterprisedb
db.password.encrypted=9ad37f5630331141d02572ceb0d8b1a0
db.port=5444
db.database=edb
db.service.owner=enterprisedb
db.bin=/usr/edb/as14/bin
db.data.dir=/usr/edb/as14/data
user.email=admin@mydomain.com
bind.address=172.20.10.3:7800 >> ใส่ ip เครื่องเราได้เลย
admin.port=8001
is.witness=false >> ถ้าอยากให้เครื่องของเราเป็น witness ให้ปรับเป็น true
ping.server.ip=8.8.8.8
virtual.ip=172.20.10.8
virtual.ip.interface=enp0s3
virtual.ip.prefix=24

5) Copy efm.nodes,efm.properties and change permission to standby nodes

Note: Update the efm.properties, or copy the file from Master Node.
root@<address>#scp efm.properties root@172.20.10.4:/etc/edb/efm-4.4/
root@<address>#scp efm.properties root@172.20.10.5:/etc/edb/efm-4.4/
root@<address>#scp efm.nodes root@172.20.10.4:/etc/edb/efm-4.4/
root@<address>#scp efm.nodes root@172.20.10.5:/etc/edb/efm-4.4/
Note: Standby - Change the bind.address (เปลี่ยนเป็น ip address เครื่องตัวเอง)
root@<address># chown efm:efm efm.properties
root@<address># chown efm:efm efm.nodes

6) Start Service edb-efm-4.4

หลังจาก scp file efm.properties และ efm.nodes เสร็จเรียบร้อยแล้วเรามาเริ่ม start service efm กันเลย

root@<address># systemctl start edb-efm-4.4
root@<address># systemctl status edb-efm-4.4

7) Allow-node-list

หลังจาก service efm start แล้ว เรามาเพิ่ม nodes ให้กับ cluster ของเรา ด้วย command นี้เลย

root@<address>#/usr/edb/efm-4.4/bin/efm allow-node efm 172.20.10.3
root@<address>#/usr/edb/efm-4.4/bin/efm allow-node efm 172.20.10.4
root@<address>#/usr/edb/efm-4.4/bin/efm allow-node efm 172.20.10.5

Perform switchover database testing

มาเริ่มการทดสอบการทำ switchover database หลังจากการติดตั้ง EFM ตามภาพของ Architecture ก่อนหน้านี้ โดยรายละเอียดของ Instance และ IP Address บน Demonstration Environment

  • เริ่มต้นด้วยการ verify status ของ servers ใน cluster ด้วย command
bash-4.2$ /usr/edb/efm-4.4/bin/efm cluster-status efm

จากภาพของ cluster status จะแสดงสถานะของ efm servers จำนวน 3 servers และมี 1 server ที่ทำหน้าที่รับ connection จาก application นั่นคือเครื่อง primary IP : 172.20.10.3

bash-4.2$ /usr/edb/efm-4.4/bin/efm promote efm -switchover

Command switchover จะ Promote Standby node และ reconfigures ของตัว Primary node ให้เป็น New Standby ใน Cluster ถ้าอยากจะให้ Primary กลับมาเป็นตัวเดิมให้ run command อีกครั้ง จากภาพหลังจากได้ run command switchover จะเห็นได้ว่า Primary node ตัวใหม่อยู่ที่ 172.20.10.4 เรียบร้อยแล้ว

จบกันไปแล้วนะครับสำหรับ tool ที่ชื่อว่า “EFM” ที่จะมาช่วยทำให้ EPAS (EDB Postgres Advanced Server) ของเรามีความพร้อมใช้งานมากยิ่งขึ้นกว่าเดิม หวังว่า Blog ของผมจะเป็นประโยชน์สำหรับผู้ที่กำลังอ่านอยู่หรือผู้ที่สนใจนะครับ

หากมีข้อสงสัย หรืออยากจะปรึกษา solution การทำ High Availability ก็สามารถติดต่อบริษัท sirisoft ได้ที่ link นี้เลยครับ https://www.facebook.com/sirisoft

📣นอกจากนี้เพื่อนๆ สามารถติดตามข่าวสารของพวกเราได้ที่ 👇🏻
Facebook: Sirisoft
Instagram: Sirisoft_official
TikTok: Sirisoft
Youtube: Sirisoft Official
Medium: Sirisoft

--

--