所以我很难为我的haproxy找到正确的配置:
我有Ruby on Rails Web应用程序,由两个物理主机提供服务,每个主机有3个工作人员。这两个主机各有一个数据库,两个数据库实时同步。
我正在尝试将会话粘贴到同一主机上,因此请求仍然在每个主机中的3个工作负载之间进行负载平衡。
目标是避免来自同一客户端的两个连续请求被发送到不同的主机。
我的配置如下:
frontend web_front
bind *:4100
default_backend web_back
backend web_back
cookie SERVERID insert indirect nocache
balance roundrobin
server host_1_web_1 129.168.0.1:3000 maxconn 1 check cookie SRV_1
server host_1_web_2 129.168.0.1:3001 maxconn 1 check cookie SRV_1
server host_1_web_3 129.168.0.1:3002 maxconn 1 check cookie SRV_1
server host_2_web_1 129.168.0.2:3000 maxconn 1 check cookie SRV_2
server host_2_web_2 129.168.0.2:3001 maxconn 1 check cookie SRV_2
server host_2_web_3 129.168.0.2:3002 maxconn 1 check cookie SRV_2
正如您所看到的,我已将每个主机的cookie设置为相同的值,跳过请求仍然可以在工作人员之间正确地进行负载平衡,但现在只有每个主机的第一个工作人员似乎正在收到请求。
有解决方法吗?也许使用粘性表?
答案 0 :(得分:1)
如果我正确理解您的要求,您需要两个不同级别的负载平衡:
1.使用会话持久性的服务器负载平衡
2.工作负载平衡,没有会话持久性。
一种解决方案是在服务器端提供服务,监听HAProxy连接并在工作人员之间进行负载平衡。
但是你仍然可以通过使用虚拟后端使用HAProxy来做到这一点:
frontend web_front
bind *:4100
default_backend web_back
backend web_back
cookie SERVERID insert indirect nocache
balance roundrobin
server server1 127.0.0.1:3001 cookie SRV_1
server server2 127.0.0.1:3002 cookie SRV_2
listen lt_srv1
bind 127.0.0.1:3001
server host_1_web_1 129.168.0.1:3000 check
server host_1_web_2 129.168.0.1:3001 check
server host_1_web_3 129.168.0.1:3002 check
listen lt_srv2
bind 127.0.0.1:3002
server host_2_web_1 129.168.0.2:3000 check
server host_2_web_2 129.168.0.2:3001 check
server host_2_web_3 129.168.0.2:3002 check