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

50% запросов не к одному хосту

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

Я установил 3 виртуальные машины: LVS, RS1 и RS2. RS1 и RS2 работают с простым веб-сайтом php. RS2 - это точная копия RS1 с измененным только IP-адресом. Все машины подключены к локальной сети (1.1.1.0/24). Вот мой ipvsadm config:

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects

LVS_IP=192.168.1.180
RS1_IP=1.1.1.2
RS2_IP=1.1.1.3
ipvsadm -A -t $LVS_IP:www -s rr         
ipvsadm -a -t $RS1_IP:www -r $RS1_IP:www -m -w 1
ipvsadm -a -t $RS2_IP:www -r $RS2_IP:www -m -w 2

Бег links 1.1.1.2 и links 1.1.1.3 отображает тот же положительный результат - содержимое моей веб-страницы.

Однако бег links 192.168.1.180 (Внешний IP-адрес LVS) дает правильные результаты ... но только через раз (50% запросов). Кажется, что когда LVS выполняет циклический перебор запроса к RS2, ответа просто нет. (links говорит "Устанавливаю соединение ..." и ничего не происходит).

Как я могу попытаться отладить такую ​​проблему?

Вы отлаживаете это с помощью своего верного tcpdump. Начните с захвата пакетов на реальном сервере, на котором возникла проблема, и, если сразу ничего не обнаруживается, сравните его с эквивалентным захватом на рабочем реальном сервере. В какой-то момент они будут выглядеть по-другому, потому что поведение будет другим; какие Это другое, очень сильно укажет вам в правильном направлении. Пакеты не доходят до реального сервера? Проблема брандмауэра на балансировщике нагрузки. Пакеты не возвращаются с реального сервера? Могут быть проблемы с исходящим брандмауэром или веб-сервер реального сервера плохо взаимодействует с другими.