Tôi có nhiều máy chủ PostgreSQL cho một ứng dụng web. Thông thường, một chủ và nhiều nô lệ ở chế độ chờ nóng (sao chép phát trực tuyến không đồng bộ).
Tôi sử dụng PGBouncer để tổng hợp kết nối: một phiên bản được cài đặt trên mỗi máy chủ PG (cổng 6432) kết nối với cơ sở dữ liệu trên localhost. Tôi sử dụng chế độ nhóm giao dịch.
Để cân bằng tải các kết nối chỉ đọc của tôi trên các nô lệ, tôi sử dụng HAProxy (v1.5) với một conf ít nhiều như thế này:
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
Vì vậy, ứng dụng web của tôi kết nối với haproxy (cổng 10001), kết nối cân bằng tải đó trên nhiều pgbouncer được định cấu hình trên mỗi nô lệ PG.
Đây là một biểu đồ đại diện cho kiến trúc hiện tại của tôi:
Điều này hoạt động khá tốt như thế này, nhưng tôi nhận ra rằng một số thực hiện điều này hoàn toàn khác: ứng dụng web kết nối với một cá thể PGBouncer duy nhất kết nối với HAproxy để cân bằng tải trên nhiều máy chủ PG:
Cách tiếp cận tốt nhất là gì? Cái đầu tiên (cái hiện tại của tôi) hay cái thứ hai? Có bất kỳ lợi thế của một giải pháp so với giải pháp khác?
Cảm ơn