haproxy 坚持后端服务器组
haproxy stick to group of backend servers
所以我正在努力为我的 haproxy 找到正确的配置:
我在 Rails Web 应用程序上有 Ruby,它由两台物理主机提供服务,每台主机有 3 个工作人员。两台主机各有一个数据库,两个数据库实时同步。
我试图让会话保持在同一台主机上,因此请求仍然在每台主机的 3 名工作人员之间进行负载平衡。
objective是为了避免同一客户端的两次连续请求被发送到不同的主机。
我的配置如下所示:
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 设置为相同的值,希望请求仍能在 worker 之间正确负载平衡,但现在似乎只有每台主机的第一个 worker 收到请求。
有办法解决这个问题吗?也许使用粘性表?
如果我对您的要求理解正确,您需要两个不同级别的负载平衡:
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
所以我正在努力为我的 haproxy 找到正确的配置:
我在 Rails Web 应用程序上有 Ruby,它由两台物理主机提供服务,每台主机有 3 个工作人员。两台主机各有一个数据库,两个数据库实时同步。
我试图让会话保持在同一台主机上,因此请求仍然在每台主机的 3 名工作人员之间进行负载平衡。
objective是为了避免同一客户端的两次连续请求被发送到不同的主机。
我的配置如下所示:
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 设置为相同的值,希望请求仍能在 worker 之间正确负载平衡,但现在似乎只有每台主机的第一个 worker 收到请求。
有办法解决这个问题吗?也许使用粘性表?
如果我对您的要求理解正确,您需要两个不同级别的负载平衡:
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