Получение статуса узла NLB
NLB Info
Балансировщик нагрузки: LoadBal
УЗЕЛ 1
УЗЕЛ 2
Я хочу получать электронные письма, когда узел не выступает в качестве сервера балансировки нагрузки. У меня есть запланированное задание, которое запускает следующий скрипт непрерывно. Этот скрипт отправляет мне электронное письмо, когда узел не выступает в качестве сервера балансировки нагрузки.
Мои тестовые сценарии:
Сценарий 1: Остановка узла 1 из NLB, но я не получил письмо.
Сценарий 2
Остановил задачу. Я не включил Узел 1, он все еще не работает
Запустил задачу. Я получил письмо, чтобы проверить мой NLB
Добавлен узел 1 обратно в NLB. Я по-прежнему получаю контрольные сбои NLB каждую минуту (в работе: сценарий будет приостанавливаться на каждый час вместо каждых пяти минут)
Есть причина почему? Возможно, придется что-то делать с моим циклом do while?
cls
Import-Module NetworkLoadBalancingClusters
$nodeStatus = Get-NlbClusterNode -hostname "computer1"
$status = $nodeStatus[0].State.ToString()
$status1 = $nodeStatus[1].State.ToString()
do {
$flag = 1
if ($status -match "converged" -and $status1 -match "converged")
{
$message = "good"
}
else {
$message2 = "check nlb"
$flag = $flag + 1
}
if ($flag -igt 1) {
Write-Host "Sending Email notification to user"
$smtpServer = "smtp.sample.com"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg = New-Object Net.Mail.MailMessage
$msg.To.Add("sample.google.com")
$msg.From = "SPagent@sample.com"
$msg.Subject = "NLB node(s) is not started"
$msg.Body = $message2
$smtp.Send($msg)
$body = ""
Start-Sleep -minutes 5
}
$response = "Y"
}
while ($response -eq "Y")
1 ответ
В вашем скрипте вы получаете статус узлов один раз, затем вы переходите в бесконечный цикл. Таким образом, состояние ваших узлов никогда не меняется, и именно поэтому вы не получаете уведомление по электронной почте в senario 1. Затем в senario 2 говорится, что узел 1 находится в автономном режиме, а затем он никогда не обновляет его состояние, поэтому вы продолжаете получать электронные письма. То, что вы хотите сделать, это продолжать получать статус ваших узлов. Так что вы можете сделать что-то вроде этого:
do {
$nodeStatus = Get-NlbClusterNode -hostname "computer1"
$status = $nodeStatus[0].State.ToString()
$status1 = $nodeStatus[1].State.ToString()
$flag = 1
# do your normal stuff ...
}
while ($response -eq "Y")