Назад | Перейти на главную страницу

HAProxy и «шардинг»

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

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

Моя конфигурация прослушивания выглядит так:

listen  appli1-rewrite 0.0.0.0:80
cookie  mysession= prefix
balance roundrobin
server  app1_1 192.168.0.1:80 cookie server01
server  app1_2 192.168.0.2:80 cookie server02
option  httpclose

Однако, когда я смотрю на заголовки запросов с помощью Live Http Headers, я не вижу cookie mysession, указывающего, на какой сервер он будет идти, что я ожидал на основе операции с префиксом. Я новичок в HAProxy, поэтому любая помощь / руководство будет отличным!

сначала удалите знак равенства после имени файла cookie, иначе он никогда не будет совпадать. Во-вторых, убедитесь, что ваш сервер правильно устанавливает cookie «mysession», поскольку режим префикса cookie полагается на сервер для установки cookie. Если это не так, используйте вместо этого режим вставки. В-третьих, добавьте «option httpclose» в вашу конфигурацию, потому что, если есть какой-либо вид keepalive, haproxy не увидит cookie (или не сможет его изменить).

Надеясь, что это поможет,
Вилли

Ваша конфигурация в порядке. Вы можете проверить в журналах, что файл cookie, представленный клиентом, был распознан и использован. Буква «V» будет помещена в первую позицию в 4-значных флагах состояния (например: VN-). Вместо этого первые запросы без действительного файла cookie будут иметь букву "N". Пожалуйста, проверьте документ для получения дополнительной информации, вы получите все это в разделе 8.5. Вы также можете включить страницу статистики и проверять ее во время просмотра. Вы должны увидеть, что столбец «LbTot» увеличивается только один раз для каждого нового клиента и больше не увеличивается для одного и того же клиента.

Вы можете попробовать функцию захвата файлов cookie (все зависит от обслуживаемого приложения) в разделе прослушивания, см.:http://haproxy.1wt.eu/download/1.3/doc/configuration.txt:

Захватывается только первый файл cookie. Контролируются как заголовки запроса «cookie», так и заголовки ответа «set-cookie». Это особенно полезно для проверки ошибок приложения, вызывающих пересечение сеанса или кражу между пользователями, поскольку обычно файлы cookie пользователя могут изменяться только на странице входа.

Пример: захват файла cookie ASPSESSION len 32


Кстати, похоже, у вас все в порядке.

listen corporate_web_live
  bind 1.2.3.4:80  # site1.com
  bind 1.2.3.5:80  # site2.com
    option httpchk HEAD /server.txt HTTP/1.0
    cookie HAPSRV insert postonly indirect
    server webapp-corp-1 10.0.0.1:80 weight 50 maxconn 150 slowstart 30s cookie WAC1 check
    server webapp-corp-2 10.0.0.2:80 weight 50 maxconn 150 slowstart 30s cookie WAC2 check
    server webapp-corp-3 10.0.0.3:80 weight 50 maxconn 150 slowstart 30s cookie WAC3 check
    server webapp-corp-4 10.0.0.4:80 weight 50 maxconn 150 slowstart 30s cookie WAC4 check
    server webapp-corp-5 10.0.0.5:80 weight 50 maxconn 150 slowstart 30s cookie WAC5 check
    server webapp-corp-6 10.0.0.6:80 weight 50 maxconn 150 slowstart 30s cookie WAC6 check

Обратите внимание на использование «insert», «postonly» и «косвенный» в приведенном выше примере - это заставляет HAproxy загружать cookie по мере необходимости для потоков, которые его пересекают.

Я попробовал захват файлов cookie, и он не показал никакой разницы с тем, что мне показывали живые заголовки http ... Когда я изменяю конфигурацию так, что haproxy вставляет свой собственный файл cookie, я вижу его в заголовках http ... Я начинаю полагать, что мои первоначальные тесты могли быть ошибочными.