ฉันมีเซิร์ฟเวอร์ PostgreSQL หลายเครื่องสำหรับเว็บแอปพลิเคชัน โดยทั่วไปแล้วจะเป็นทาสหลักและทาสหลายคนในโหมดฮอตสแตนบาย (การจำลองการส่งกระแสข้อมูลแบบอะซิงโครนัส)
ฉันใช้ PGBouncer สำหรับการรวมการเชื่อมต่อ: หนึ่งอินสแตนซ์ที่ติดตั้งบนเซิร์ฟเวอร์ PG แต่ละตัว (พอร์ต 6432) เชื่อมต่อกับฐานข้อมูลบน localhost ฉันใช้โหมดกลุ่มธุรกรรม
ในการโหลดการเชื่อมต่อแบบอ่านอย่างเดียวของฉันกับทาสฉันใช้ HAProxy (v1.5) กับ conf มากกว่าหรือน้อยกว่าเช่นนี้
listen pgsql_pool 0.0.0.0:10001
mode tcp
option pgsql-check user ha
balance roundrobin
server master 10.0.0.1:6432 check backup
server slave1 10.0.0.2:6432 check
server slave2 10.0.0.3:6432 check
server slave3 10.0.0.4:6432 check
ดังนั้นเว็บแอปพลิเคชันของฉันเชื่อมต่อกับ haproxy (พอร์ต 10001) นั่นคือการเชื่อมต่อโหลดบาลานซ์บน pgbouncer หลายตัวที่กำหนดค่าไว้ใน PG slave แต่ละตัว
นี่คือกราฟตัวแทนของสถาปัตยกรรมปัจจุบันของฉัน:
มันใช้งานได้ดีเช่นนี้ แต่ฉันรู้ว่ามีการดำเนินการบางอย่างที่แตกต่างกันนี้: เว็บแอปพลิเคชันเชื่อมต่อกับอินสแตนซ์ PGBouncer เดียวที่เชื่อมต่อกับ HAproxy ซึ่งโหลดสมดุลกับเซิร์ฟเวอร์ PG หลายตัว:
วิธีที่ดีที่สุดคืออะไร อันแรก (อันปัจจุบันของฉัน) หรืออันที่สอง? มีข้อได้เปรียบของการแก้ปัญหาอย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ?
ขอบคุณ