Я пытаюсь настроить haproxy LB для кластера подчиненных устройств mySQL, используя метод, описанный здесь в инженерном блоге github. У меня работают проверки xinetd, но когда я пытаюсь войти через клиент mysql на серверные узлы через конечную точку haproxy, клиент просто зависает на неопределенный срок. Кажется, что завитки достигают серверного хоста, но я вижу в ответе «пакеты не в порядке»:
[me@jump01 ~]$curl haproxy01.domain:3306/check-lag
5.6.32-78.1-log�m-}1w)`*O0��!�B:>da85>w`[)mysql_native_password!��#08S01Got packets out of order
вот суть соответствующего haproxy.cfg для этого прокси. Не уверен, что мне здесь не хватает, что мешает клиенту mysql добраться до серверной части.
Оказывается, проблема заключалась в том, что бэкэнд нужно было установить в режим tcp. Я понял это, пытаясь подключиться к Telnet и выполняя GET вручную.
Тот факт, что ваш тест возвращает mysql, показывает, что он попадает на целевой сервер. Однако неупорядоченность пакетов может указывать на то, что последовательные пакеты попадают на разные внутренние серверы. Соединения MySQL должны быть с отслеживанием состояния и, следовательно, закрепляться через балансировщик нагрузки. Я бы изменил конфигурацию на balance source
который будет держать все пакеты с одного исходного IP-адреса на один и тот же бэкэнд, если он не выйдет из строя, а не balance roundrobin
который будет отправлять их поочередно на все серверы.