Выполните проверку работоспособности http на внутренних серверах с помощью haproxy - PullRequest
0 голосов
/ 30 апреля 2018

Можно ли выполнить проверку работоспособности HTTP на отдельных внутренних серверах и балансировку нагрузки между активными внутренними серверами. Это прекрасно работает с одним внутренним сервером, когда мы упоминаем имя хоста в httpchk (опция httpchk GET / info HTTP / 1.1 Host: \ abc.mysrv1.com)

Однако я не могу успешно настроить его с несколькими бэкэнд-серверами, так как не могу дать отдельное имя хоста по команде httpchk, а при настройке бэкенда ниже получаю ошибку http 400 -


backend svc.op
    balance roundrobin
    mode http
    http-send-name-header Host
    option httpchk GET  /info HTTP/1.1
    http-check send-state
    http-request set-uri /test/abcService
    server abc.mysrv1.com abc.mysrv1.com:80 check
    server abc.mysrv2.com  abc.mysrv2.com:80 check

[WARNING] 115/162226 (4788) : Server svc.op/abc.mysrv1.com is DOWN, reason: Layer7 wrong status, code: 400, info: "Bad Request: missing required Host header", check duration: 1ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] 115/162227 (4788) : Server svc.op/abc.mysrv2.com is DOWN, reason: Layer7 wrong status, code: 400, info: "Bad Request: missing required Host header", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] 115/162227 (4788) : backend ' svc.op' has no server available!

$ ./haproxy -version HA-Proxy версия 1.6.7 2016/07/13

UPDATE: Я не преследовал это, но кто-то предложил следующее -

backend h_a01
    mode http
    option httpchk GET /health HTTP/1.1\r\nHost:\ a01\r\n
    http-check expect rstatus ^200
    http-request set-uri /hello/world
    http-request set-header Host a01
    server a01 a01 check

backend h_a02
    mode http
    option httpchk GET /health HTTP/1.1\r\nHost:\ a02\r\n
    http-check expect rstatus ^200
    http-request set-uri /hello/world
    http-request set-header Host a02
    server a02 a02 check

backend a
    mode http
    option forwardfor
    http-send-name-header Host
    http-request set-uri /hello/world
    server a1 a1 track h_a01/a01
    server a2 a2 track h_a02/a02
...