使用URL中的ID与HAProxy进行负载平衡

时间:2018-06-01 17:51:08

标签: load-balancing haproxy sticky-session

我知道可以根据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

是否也可以根据网址路径中的ID进行操作?

如果我的网址是:/ objects /:objectId

我可以以某种方式使用它:objectId使连接变得粘滞吗?

修改

我能够使用以下配置加载平衡,使请求粘贴在网址路径上:

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

现在的问题是,如果其中一台服务器发生故障,那么棒表不会更新。我怎样才能使其中一个服务器无法访问,粘贴表中指向该服务器的条目被删除?

最终答案

好的,我能够搞清楚。下面的配置使得请求粘在url路径上,HAProxy将每隔250ms对HTTP进行一次HTTP GET,如果它没有返回200,它将认为服务器已经关闭,这将删除所有条目棒表

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

1 个答案:

答案 0 :(得分:0)

使用此:

stick on path,word(2,/)  if { path_beg /objects/ }