使用 URL 中的 ID 与 HAProxy 进行负载平衡
Using ID in URL for load balancing with HAProxy
我知道可以根据 url 参数使连接保持粘性:
https://serverfault.com/questions/495049/using-url-parameters-for-load-balancing-with-haproxy?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
是否也可以根据 url 路径中的 ID 来完成?
如果我的url是:/objects/:objectId
我能否以某种方式使用 :objectId 使连接变得粘滞?
编辑
我能够使用以下配置使请求粘在 url 路径上进行负载平衡:
global
#daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
stick-table type string size 200k expire 30m
stick on path
server server1 127.0.0.1:8000
server server2 127.0.0.1:8001
listen stats
bind 127.0.0.1:9000
mode http
log global
maxconn 10
stats enable
stats hide-version
stats refresh 5s
stats show-node
stats auth admin:password
stats uri /haproxy?stats
现在的问题是,如果其中一台服务器出现故障,stick-table 不会更新。我怎样才能做到这一点,如果无法访问其中一台服务器,则删除指向该服务器的 stick-table 中的条目?
最终答案
好的,我想通了。下面的配置使请求停留在 url 路径上,并且 HAProxy 将每 250 毫秒向 /health 发送一次 HTTP GET,如果不是 returns 200,它将认为服务器已关闭并且将从 stick-table.
中删除所有条目
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
stick-table type string size 200k expire 30m
option httpchk GET /health
http-check expect status 200
stick on path,word(2,/) if { path_beg /objects/ }
server server1 127.0.0.1:8000 check inter 250
server server2 127.0.0.1:8001 check inter 250
listen stats
bind 127.0.0.1:9000
mode http
log global
maxconn 10
stats enable
stats hide-version
stats refresh 5s
stats show-node
stats auth admin:password
stats uri /haproxy?stats
使用这个:
stick on path,word(2,/) if { path_beg /objects/ }
我知道可以根据 url 参数使连接保持粘性: https://serverfault.com/questions/495049/using-url-parameters-for-load-balancing-with-haproxy?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
是否也可以根据 url 路径中的 ID 来完成?
如果我的url是:/objects/:objectId
我能否以某种方式使用 :objectId 使连接变得粘滞?
编辑
我能够使用以下配置使请求粘在 url 路径上进行负载平衡:
global
#daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
stick-table type string size 200k expire 30m
stick on path
server server1 127.0.0.1:8000
server server2 127.0.0.1:8001
listen stats
bind 127.0.0.1:9000
mode http
log global
maxconn 10
stats enable
stats hide-version
stats refresh 5s
stats show-node
stats auth admin:password
stats uri /haproxy?stats
现在的问题是,如果其中一台服务器出现故障,stick-table 不会更新。我怎样才能做到这一点,如果无法访问其中一台服务器,则删除指向该服务器的 stick-table 中的条目?
最终答案
好的,我想通了。下面的配置使请求停留在 url 路径上,并且 HAProxy 将每 250 毫秒向 /health 发送一次 HTTP GET,如果不是 returns 200,它将认为服务器已关闭并且将从 stick-table.
中删除所有条目global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
stick-table type string size 200k expire 30m
option httpchk GET /health
http-check expect status 200
stick on path,word(2,/) if { path_beg /objects/ }
server server1 127.0.0.1:8000 check inter 250
server server2 127.0.0.1:8001 check inter 250
listen stats
bind 127.0.0.1:9000
mode http
log global
maxconn 10
stats enable
stats hide-version
stats refresh 5s
stats show-node
stats auth admin:password
stats uri /haproxy?stats
使用这个:
stick on path,word(2,/) if { path_beg /objects/ }