Я сталкиваюсь с трудностью с 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 различаются и зависят от пути в запросе.
Как использовать палки в этом случае?