เนื่องจากฉันไม่มีข้อมูลเพียงพอเกี่ยวกับสถาปัตยกรรมที่ใช้และอิงจากตัวอย่างที่อธิบายได้มากเท่านั้น - ฉันกำลังอัปโหลดข้อมูลที่ได้รับจากการวิจัยเพื่อให้สมาชิกชุมชนกรอก/ขยายคำตอบนี้
ขึ้นอยู่กับ เอกสารนี้ PgBouncer ไม่มีการกำหนดค่าหลายโฮสต์ภายใน ในการสืบค้นโหลดบาลานซ์ระหว่างเซิร์ฟเวอร์หลายเครื่องสามารถใช้เครื่องมือภายนอกได้ เช่น:
DNS ปัดเศษ. ใช้ IP หลายตัวหลังชื่อ DNS เดียว PgBouncer ไม่ค้นหา DNS ทุกครั้งที่มีการเชื่อมต่อใหม่ แต่จะแคช IP ทั้งหมดและทำการปัดเศษภายในแทน หมายเหตุ: หากมีมากกว่า 8 IP ตามหลังชื่อเดียว แบ็กเอนด์ DNS จะต้องรองรับโปรโตคอล EDNS0 ดูรายละเอียด README
ใช้ ตัวโหลดบาลานซ์การเชื่อมต่อ TCP. ทั้ง แอล.วี.เอส หรือ HAProxy ดูจะเป็นทางเลือกที่ดี ในด้าน PgBouncer อาจเป็นความคิดที่ดีที่จะทำ server_lifetime เล็กลงและเลี้ยวด้วย server_round_robin เปิด: ตามค่าเริ่มต้น การเชื่อมต่อที่ไม่ได้ใช้งานจะถูกใช้ซ้ำโดยอัลกอริทึม LIFO ซึ่งอาจทำงานได้ไม่ดีนักเมื่อต้องการโหลดบาลานซ์
บล็อกนี้ อธิบายว่าทำไมจึงต้องใช้กลไกโหลดบาลานเซอร์อื่นกับ pgBouncer
ตามที่คุณไม่ควรใช้ pgBouncer แทน HAProxy หรือโหลดบาลานเซอร์อื่น ๆเห็นได้ชัดว่า pgBouncer มีคุณสมบัติที่สามารถกำหนดค่าได้หลายอย่างซึ่งระบุถึงสิ่งที่ตัวโหลดบาลานซ์ระบุ - แต่นี่เป็นเรื่องธรรมดาที่สุดที่สภาพแวดล้อมของ prod ใช้ HAProxy หรือโหลดบาลานเซอร์อื่นๆ สำหรับ HA เหตุผลนี้คือ HAProxy จะสร้างสมดุลระหว่างปริมาณงานในเซิร์ฟเวอร์ที่ใช้งานจริงได้ดีกว่า pgbouncer
แม้ว่า pgbouncer จะดีกว่าสำหรับการรวมการเชื่อมต่อของ postgres แต่อาจดีกว่าหากใช้ daemon ขนาดเล็กที่ทำงานหนึ่งงานได้อย่างสมบูรณ์แบบ แทนที่จะใช้ daemon ขนาดใหญ่ที่ทำงานสองงาน แต่แย่กว่านั้น
เป็นความคิดที่ดีที่จะใช้ PgPool ดูสิ่งนี้ด้วย คำตอบนี้.
ที่นี่ ยังเป็นบทความที่เปรียบเทียบ PgBouncer และ PgPool ส่วนเล็ก ๆ ของสิ่งนั้น:
| | PGBOUNCER | PGPOOL-II |
|--|--|--|
| ความพร้อมใช้งานสูง |ไม่รองรับ |ความพร้อมใช้งานสูงของ PostgreSQL ได้รับการสนับสนุนผ่านกระบวนการเฝ้าดูที่สร้างขึ้นใน Pgpool-II ผู้ชนะ! |
|โหลดบาลานซ์|ไม่รองรับ - PgBouncer แนะนำให้ใช้ HAProxy เพื่อความพร้อมใช้งานสูงและโหลดบาลานซ์| รองรับโหลดบาลานซ์อัตโนมัติ - ฉลาดพอที่จะเปลี่ยนเส้นทางคำขออ่านไปยังสแตนด์บาย และเขียนไปยังมาสเตอร์ ผู้ชนะ! |