总体思路
- pgAdmin 是 PostgreSQL 的管理工具,本身不承担数据库请求的负载均衡。要实现负载均衡,应让 pgAdmin 连接到一个负载均衡器(如 HAProxy、Pgpool-II、Nginx Stream、LVS/Keepalived),由负载均衡器将连接分发到多个 PostgreSQL 节点;若目标是提升 pgAdmin 自身的可用性,可对多个 pgAdmin Web 实例做反向代理或集群部署。
方案一 数据库前端的负载均衡(推荐)
- 架构:pgAdmin → 负载均衡器(HAProxy/Pgpool-II/Nginx Stream/LVS) → PostgreSQL 主从/集群。
- 快速实现(以 HAProxy 为例,TCP 层转发,适合读写分离或读多写少场景):
- 安装:sudo apt install haproxy -y(或 yum/dnf 对应安装)。
- 配置 /etc/haproxy/haproxy.cfg(示例):
global
log /dev/log local0
log /dev/log local1 notice
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend postgres_frontend
bind *:5432
default_backend postgres_backend
backend postgres_backend
balance roundrobin
server pg1 192.168.1.101:5432 check inter 2000 rise 2 fall 3
server pg2 192.168.1.102:5432 check inter 2000 rise 2 fall 3
- 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
- 健康检查建议:开启 TCP 检查;若需读写分离,可在 Pgpool-II 中启用 load_balance_mode=on 并结合复制标识进行读负载分发。
- 其他选择:
- Pgpool-II:支持连接池、负载均衡、复制管理与故障切换(适合需要连接池/自动故障转移的场景)。
- Nginx Stream:在 http 块外使用 stream 模块做 TCP 代理。
- LVS/Keepalived:四层负载均衡与 VIP 漂移,适合大规模或高可用要求更高的场景。
方案二 pgAdmin 前端的负载均衡(提升控制台可用性)
- 架构:客户端 → 负载均衡器(Nginx/HAProxy) → 多个 pgAdmin Web 实例。
- 快速实现(以 Nginx 为例,HTTP 层反向代理):
- 安装:sudo apt install nginx -y
- 配置 /etc/nginx/sites-available/pgadmin:
upstream pgadmin {
server pgadmin1.example.com:5050;
server pgadmin2.example.com:5050;
}
server {
listen 80;
location / {
proxy_pass http://pgadmin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 启用站点并重启:sudo ln -s /etc/nginx/sites-available/pgadmin /etc/nginx/sites-enabled && sudo systemctl reload nginx
- 容器化场景可用 Kubernetes Service(type=LoadBalancer) 或 Ingress 暴露多个 pgAdmin Pod,实现自动扩缩与故障恢复。
在 pgAdmin 中创建服务器连接
- 登录 pgAdmin(默认端口 5050),Servers → Create → Server:
- General:填写名称(如 “Load Balanced PostgreSQL”)。
- Connection:
- Host name/address:填入负载均衡器的 IP/DNS(如 192.168.1.100 或 lb.example.com)。
- Port:5432(或负载均衡器监听端口)。
- Username/Password:数据库账户凭据。
- SSL:按后端要求设置(如启用 SSL/TLS 则填写相关参数)。
- 保存后,pgAdmin 的所有连接将通过负载均衡器到达后端 PostgreSQL 集群。
关键注意事项
- 读写分离与一致性:读负载可分发到从库;写操作必须到主库。若使用中间件,请启用其读写分离与健康检查能力,避免将写入误发到从库。
- 健康检查与故障切换:为负载均衡器配置主动健康检查与自动摘除策略;数据库侧建议配合 流复制 与自动故障转移(如 Patroni/repmgr)以减少人工介入。
- 安全性:
- 限制负载均衡器到数据库的访问(防火墙/安全组/ACL)。
- 全链路启用 SSL/TLS(客户端→负载均衡器、负载均衡器→数据库)。
- 避免在公网暴露数据库端口,优先使用内网/VPC。
- 高可用设计:为负载均衡器本身配置 VIP/Keepalived 或集群部署,消除单点故障。
- 监控与告警:监控 连接数、延迟、复制延迟、错误率 等关键指标,结合日志与告警策略快速定位问题。