Использовать липкие таблицы HAProxy для персистентности с разными бэкэндами? - PullRequest
0 голосов
/ 05 мая 2019

Я сталкиваюсь с трудностью с HAProxy при попытке использования таблиц флешки для сохранения. У меня есть настройка двух бэкэндов в этом активном узле HAProxy, которые предоставляют услуги чата, каждый из которых имеет только один сервер. Еще один бэкэнд предназначен для другого пассивного узла HAProxy, который аналогичен исходному и работает в ситуации аварийного переключения. В случае сбоя одного из двух бэкэндов, запрос направляется на другой HAProxy и обслуживается бэкэндами в этом пассивном режиме. Если бэкэнды в активном узле HAProxy возвращаются, когда сеанс обслуживается пассивным HAProxy, запрос, естественно, не сохраняется на этих бэкендах HAPRoxy и обслуживается бэкэндами активного узла HAProxy. Что я хочу, так это продолжать обслуживать сеанс через эти пассивные бэкэнды HAProxy, чтобы поддерживать общение в состоянии. Пока я читал о липких таблицах, было логично использовать их для нескольких серверов с одним и тем же бэкэндом, но я хочу сделать это для нескольких бэкэндов, поэтому я решаю, какой бэкэнд должен принимать запрос в соответствии с тем, откуда он был обслужен в первое место. Ниже приведен пример кода для моей установки:

frontend
        bind *:80

        acl local_server1_is_down nbsrv(server1) lt 1
        acl local_server2_is_down nbsrv(server2) lt 1
        acl is_server1 path_beg /server1
        acl is_server2 path_beg /server2

        use_backend server1 if is_server1 ! local_server1_is_down
        use_backend server2 if is_server2 ! local_server2_is_down
        default_backend passive_haproxy

#serve requests coming from the other HAProxy
frontend haproxy
        mode http
        bind *:8080

        acl local_server1_is_down nbsrv(server1) lt 1
        acl local_server2_is_down nbsrv(server2) lt 1
        acl is_server1 path_beg /server1
        acl is_server2 path_beg /server2

        use_backend server1 if is_server1 ! local_server1_is_down
        use_backend server2 if is_server2 ! local_server2_is_down

backend passive_haproxy
        mode http
        server pass_haproxy passivehaproxy.net:8080

backend server1
        mode http
        reqrep ^([^\ ]*\ /)server1[/]?(.*) \1\2
        server server1 server1.net:3999 check

backend server2
        mode http
        reqrep ^([^\ ]*\ /)server2[/]?(.*) \1\2
        server  server2 server2.net:3999 check

ПРИМЕЧАНИЕ. Server1 и server2 различаются и зависят от пути в запросе.

Как использовать палки в этом случае?

...