Я пытаюсь настроить лабораторию балансировки нагрузки для HAproxy в однопользовательском режиме (когда фактический фронтенд-IP и бэкенд-серверы находятся в одной подсети, а реальные клиенты всегда удалены). Еще одна просьба — сделать исходные IP-адреса клиентов видимыми для бэкенд-узлов. Поскольку мы балансируем нагрузку пользовательского приложения на основе TCP, похоже, что опция «source 0.0.0.0 usersrc clientip» здесь является правильным выбором. Кроме того, я настроил бэкенды так, чтобы шлюзы по умолчанию указывали на IP-адрес HAproxy.
Хотя странные вещи происходят, когда я включаю эту опцию бэкенда: я вижу, что подключение к frontend VIP было выполнено правильно и сформировано 3-стороннее рукопожатие. Но когда сервер HAproxy пытается создать 2-й сеанс, чтобы связаться с backend-серверами с поддельным IP клиента, я вижу, что происходит именно это:
- Прокси отправляет SYN с поддельным IP-адресом клиента на один из бэкэндов;
- Бэкэнд обычно отвечает пакетом SYN-ACK;
- Прокси-сервер НЕ отправляет последний ACK, а просто слепо отправляет SYN-пакеты после тайм-аута с тем же результатом;
- На прокси-сервере я вижу, что это соединение отмечено как SYN_SENT в выводе netstat, так что, похоже, прокси-сервер по какой-то причине не принимает пакет SYN-ACK.
Любая похвала будет оценена по достоинству.