检查你的 haproxy /stats
,我猜所有的后端都被标记了,由于错误的检查 - postgres 可能不会响应 200 - option httpchk
。使用pgsql-check
option pgsql-check user healcheckuser
另外我不知道 BDR 要求/限制,但是在从属设置中很常见,有一些池程序,例如pgbouncer - 在客户端旁边,或者在每个后端前面,或者任何需要的东西。
编辑
要检查统计信息,您可以使用 stats 套接字:
# stats about all frontents and backends in a csv format
echo "show stat" | socat unix-connect:/run/haproxy/admin.sock stdio
# version, PID, current connections, session rates, tasks, etc
echo "show info" | socat unix-connect:/run/haproxy/admin.sock stdio
# sessions with the used backend/frontend, the source
echo "show sess" | socat unix-connect:/run/haproxy/admin.sock stdio
# informations about errors if there are any
echo "show errors" | socat unix-connect:/run/haproxy/admin.sock stdio
当我用 postgres 9.4 测试时,(一些奴隶,没有 BDR),haproxy 1.5.14,没有检查
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
listen pgsql *:15432
mode tcp
balance roundrobin
server master dev1.db.fed:5432
server slave1 dev2.db.fed:5432
我能够毫无问题地连接:
root@lb:/# echo "show sess" | socat unix-connect:/run/haproxy/admin.sock stdio
0x20d89f0: proto=tcpv4 src=10.163.74.109:46815 fe=pgsql be=pgsql srv=slave1 ts=08 age=3m8s calls=3 rq[f=848202h,i=0,an=00h,rx=,wx=,ax=] rp[f=048202h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=1,ex=] s1=[7,8h,fd=2,ex=] exp=
0x20e11a0: proto=unix_stream src=unix:1 fe=GLOBAL be=<NONE> srv=<none> ts=09 age=0s calls=2 rq[f=c08200h,i=0,an=00h,rx=30s,wx=,ax=] rp[f=008002h,i=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=3,ex=] s1=[7,0h,fd=-1,ex=] exp=30s
查询正在运行,数据即将到来,似乎还可以。
但同样,我目前无法测试 BDR。