В настоящее время я пытаюсь разобраться в сути проблемы, когда кажется, что мой LVS-директор время от времени отбрасывает пакет, приходящий от клиента. У нас есть эта проблема в наших производственных системах, и мы можем воспроизвести ее при постановке.
Я разместил эту проблему в списке рассылки lvs-users и пока не получил ответа.
Мы используем ipvsadm с Linux CentOS5 x86_64 в PV XEN-DomU.
Мы используем IPVS в DR-режиме, для управления запущенными соединениями используем lvs-kiss.
ipvsadm
работает в кластере heartbeat-v1-cluster (два виртуальных узла), главный и резервный серверы работают постоянно на обоих узлах.
Для LVS-сервисов мы используем логические IP-адреса, настраиваемые по тактовому сигналу (активный / пассивный-кластерный режим)
Настоящие серверы - это физические Linux-машины.
Виртуальная машина, выступающая в качестве директора, работает как XEN-PV-DomU на Dom0 с использованием мостовых сетей.
1 ГБ ОЗУ, 2 виртуальных ЦП, загрузка системы почти 0, память 73 МБ свободно, буферы 224 МБ, кэш 536 МБ, без подкачки.
top
показывает почти всегда 100% простоя, 0% us / sy / ni / wa / hi / si / st.
ipvsadm -Ln
для рассматриваемой услуги показывает:
TCP x.y.183.217:12405 wrr persistent 7200
-> 192.168.83.234:12405 Route 1000 0 0
-> 192.168.83.235:12405 Route 1000 0 0
x.y первые два октета относятся к нашему внутреннему диапазону класса B. Мы используем 192.168.83.x как lvs-network для постановки.
Постоянная конфигурация ipvsadm: / и т. д. / sysconfig / ipvsadm: - установить 20 20 20
Кластерная конфигурация: /etc/ha.d/haresources: $ primary_directorname lvs-kiss x.y.183.217
lvs-kiss-configuration-snippet для указанной выше службы:
<VirtualServer idm-abn:12405>
ServiceType tcp
Scheduler wrr
DynamicScheduler 0
Persistance 7200
QueueSize 2
Fuzz 0.1
<RealServer rs1-lvs:12405>
PacketForwardingMethod gatewaying
Test ping -c 1 -nq -W 1 rs1-lvs >/dev/null
RunOnFailure "/sbin/ipvsadm -d -t idm-abn:12405 -r rs1-lvs"
RunOnRecovery "/sbin/ipvsadm -a -t idm-abn:12405 -r rs1-lvs"
</RealServer>
<RealServer rs2-lvs:12405>
PacketForwardingMethod gatewaying
Test ping -c 1 -nq -W 1 rs2-lvs >/dev/null
RunOnFailure "/sbin/ipvsadm -d -t idm-abn:12405 -r rs2-lvs"
RunOnRecovery "/sbin/ipvsadm -a -t idm-abn:12405 -r rs2-lvs"
</RealServer>
</VirtualServer>
idm-abn, rs1 и rs2 разрешаются через / etc / hosts.
Это soa-web-сервис.
С клиента мы запускаем постоянные вызовы веб-сервиса с интервалом один вызов в три секунды. Время от времени будет происходить сброс соединения от директора к клиенту.
Интересно: это происходит на n x сотых + 1 попытках - вот интересный.
В этом tcpdump мы могли видеть запрос от клиента, на который директор ответил сбросом соединения. Пакет НЕ был отправлен через LVS.
Я приветствую любые идеи о том, как отследить эту проблему в дальнейшем. Если какая-либо информация непонятна или отсутствует, чтобы разобраться в проблеме - спросите.
У тебя есть iptables с отслеживанием состояния правила о директоре LVS-DR? Как я вижу, вы используете порт 12405, поэтому, если у вас есть такое правило:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 12405 -j ACCEPT
В LVS-DR реальные серверы отвечают на запросы от клиентов (а не от директора), директор не будет добавлять эти соединения в таблицу отслеживания соединений и FIN
пакеты не будут обнаруживаться на iptables директора с правилами ESTABLISHED,RELATED
. Поскольку вы разрешаете только NEW
(SYN
) пакеты на порт 12405, FIN
будет заблокирован. Вы должны использовать брандмауэр без сохранения состояния на директоре LVS-DR для служб балансировки нагрузки:
iptables -A INPUT -m tcp -p tcp --dport 12405 -j ACCEPT