HAProxy tcp-check expect rstring не работает должным образом

У нас есть страница состояния, которая возвращает либо «ОК» или «Неудача». Мы настроили tcp-check для поиска «OK», который, к сожалению, не работает, потому что он также соответствует «HTTP / 1.1 200 OK». Я подумал, что могу использовать rstring с шаблоном вроде . * ^ ОК $ . Однако это никогда не совпадает, хотя это работает, когда я проверяю шаблон на этот ответ:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/8.5
X-ServerName: myserver
X-AspNet-Version: 4.0.30319
Date: Wed, 20 Mar 2019 16:23:48 GMT
Content-Length: 2

OK

Неужели tcp-check ожидает, что rstring работает не так, как я думаю? Может быть, мне не хватает какой-то мелочи? Вот что я пытаюсь использовать в конфигурации haproxy:

Это не работает (зонд не работает как для ответов OK, так и для ответов Fail) (я меняю имена серверов и IP-адреса, предположим, что это действительный)

option tcp-check
tcp-check connect
tcp-check send GET\ /status.ashx\ HTTP/1.0\r\n\r\n
tcp-check expect rstring .*^OK$

server myserver1 1.2.3.4:80 check
server myserver2 1.2.3.5:80 check

Следующее всегда говорит, что оба сервера находятся в сети, независимо от того, возвращает ли зонд OK или Fail, из-за проблемы, о которой я упоминал ранее с «200 OK»:

option tcp-check
tcp-check connect
tcp-check send GET\ /offline.txt\ HTTP/1.0\r\n\r\n
tcp-check expect string 404 - File or directory not found.

tcp-check connect
tcp-check send GET\ /status.ashx\ HTTP/1.0\r\n\r\n
tcp-check expect rstring OK

server myserver1 1.2.3.4:80 check
server myserver2 1.2.3.5:80 check

Итак, обычное «OK» работает с rstring, но когда я попробуйте применить шаблон, он работает не так, как я ожидал.

0
задан 20 March 2019 в 19:17
1 ответ

После дополнительного тестирования и проб и ошибок я выяснил, что несоответствие, которое я видел, связано с опцией многолинейного регекса. Без многолинейной опции мой шаблон не работает. Поэтому HAProxy не должен использовать эту опцию. Кстати, в этом случае шаблон OK$ работает, потому что интерпретирует это так, что вся строка заканчивается на OK. Если возвращается ошибка, то предыдущая строка, заканчивающаяся на OK, не совпадает, поэтому датчик работает, как и ожидалось.

.
0
ответ дан 5 December 2019 в 03:42

Теги

Похожие вопросы