До недавнего времени я предполагал, что Microsoft NLB работает на уровне ОС / машины, а не на уровне приложения. то есть NLB просто отслеживает сердцебиение на машине, чтобы проверить, жив ли машина, а затем отключает конкретный узел, если он вышел из строя.
Однако я нашел это комментарий на вопрос о неисправности сервера, который утверждает иначе. Согласно комментарию
NLB просто направляет соединения на открытый порт TCP. Если ваше приложение закрывает порт, NLB больше не будет направлять соединения к нему, пока порт снова не откроется.
NLB работает не так. Правило порта NLB определяет, какой порт / порты сбалансированы по нагрузке среди узлов NLB. Трафик, не «привязанный» к правилу порта NLB, не балансируется по нагрузке между узлами NLB. NLB не отслеживать порт / порты, связанные с правилом порта, и отключать трафик кластера NLB к этому хосту при закрытии этого / тех портов / портов или сбоя приложения, предоставляющего услуги на этом / этих портах / портах на определенном хосте. NLB использует «контрольный сигнал» уровня 2 для определения доступности хоста в кластере. Если на одном узле не работает механизм проверки пульса, то все остальные узлы «сойдутся» (или повторно сойдутся), удалив не отвечающий узел из кластера, так что трафик кластера (на основе правила порта) не будет направлен на не отвечающий. отвечающий хозяин. NLB - это строго механизм балансировки нагрузки уровня 3 (сетевой уровень). Это не механизм балансировки нагрузки уровня 7 (прикладного уровня).
Совершенно нормально иметь зависшее приложение на узле NLB (таком как HTTP или RDP), определенном в правиле порта NLB, по-прежнему получать трафик NLB, даже если приложение не способно принимать этот трафик. Это потому, что NLB не знает ничего выше уровня 3.