Использование ID в URL для балансировки нагрузки с помощью 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-адресе?

Если мой 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

Теперь проблема в том, что если один из серверов выходит из строя, таблица флешек не обновляется. Как я могу сделать так, чтобы, если один из серверов недоступен, записи в таблице палочек, указывающие на этот сервер, удалялись?

Окончательный ответ

Хорошо, я смог понять это. Приведенная ниже конфигурация заставляет запросы придерживаться пути URL-адреса, и HAProxy будет выполнять HTTP GET для /health каждые 250 мс, и если он не вернет 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

person Felipe Taiarol    schedule 01.06.2018    source источник


Ответы (1)


Использовать этот:

stick on path,word(2,/)  if { path_beg /objects/ }
person nuster cache server    schedule 02.06.2018
comment
что, если object_id находится в разных позициях на разных путях? как для URL: /v1/tasks/:task_id/objects/:object_id - person palash-kulkarni; 20.03.2019