Использование идентификатора в URL для балансировки нагрузки с помощью HAProxy - PullRequest
0 голосов
/ 01 июня 2018

Я знаю, что можно сделать соединения неактивными, основываясь на параметре 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, чтобы сделать соединение липким?

EDIT

Я смогчтобы балансировать нагрузку, делая запрос привязанным к пути 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

1 Ответ

0 голосов
/ 02 июня 2018

Используйте это:

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