HAProxy: предотвращение прилипания к резервному серверу - PullRequest
0 голосов
/ 18 мая 2018

У меня проблема с конфигурацией HAProxy (1.8).

Контекст:

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

Проблема:

  • Когда все "нормальные" серверы не работают, клиентыперенаправляются на сервер резервного копирования, как и ожидалось.
  • НО таблица-заполнитель затем заполняется ассоциацией между клиентом и идентификатором сервера резервного копирования.
  • И при каждом "нормальном"сервер вернулся, клиенты, присутствующие в таблице флешек и связанные с идентификатором сервера резервного копирования, будут продолжать перенаправляться на сервер резервного копирования вместо обычных!

Это действительно расстраиваетя ...

Итак, мой вопрос: как запретить HAProxy привязывать клиентов к серверу резервного копирования в бэкэнде?

Ниже приведен пример конфигурации:

defaults
  option redispatch

frontend fe_test
  bind 127.0.0.1:8081
  stick-table type ip size 1m expire 1h
  acl acl_test  hdr(host) -i whatever.domain.com
  ...
  use_backend be_test if acl_test
  ...

backend be_test
  mode http
  balance roundrobin
  stick on hdr(X-Real-IP) table fe_test
  option httpchk GET /check
  server test-01 server-01.lan:8080 check
  server test-02 server-02.lan:8080 check
  server maintenance 127.0.0.1:8085 backup

(я уже пытался добавитьменьший вес сервера резервного копирования, но это не решило эту проблему.)

Я прочитал в документации, что ключевое слово "stick-on" имеет некоторые опции "если / если", и, возможно, я смогуиспользуйте его, чтобы написать условие, основанное на именах внутреннего сервера, но я понятия не имею о синтаксисе, который нужно использовать, или даже если это возможно.

Любая идея приветствуется!

1 Ответ

0 голосов
/ 18 мая 2018

Так глупо с моей стороны!Я был настолько одержим конфигурацией таблицы флешек, что даже не думал заглядывать в настройки сервера ...

Существует простое ключевое слово, которое отлично решает мою проблему: non-stick

Никогда не добавляйте соединения, выделенные этому серверу, в стик-таблицу.Это может быть использовано в сочетании с резервным копированием, чтобы гарантировать, что постоянство stick-table отключено для серверов резервного копирования.

Таким образом, последняя строка моего примера конфигурации просто становится:

server maintenance 127.0.0.1:8085 backup non-stick

... и все теперь работает, как я ожидал.

...