NLB(Network Load Balancing)即網絡負載均衡,目的是解決request的動态分發問題,對象可以是 app server 或 db server。關于NLB的叢集,後面會繼續讨論Rolling Upgrade 和 NLB的細節,因為本章的主題是PowerShell,是以僅就昨天遇到的一個問題來說說PowerShell如何擷取NLB的Cluster、ClusterNode的資訊(主要是狀态)及如何操作這些節點。
網絡負載均衡叢集的簡單架構圖如下:

群集IP:192.168.1.110 是一個虛拟IP,作為Cluster IP 提供服務,即無論哪個主機在向客戶提供服務,用戶端看到的都是同一個虛拟IP,是以,主機叢集對
于用戶端來說是屏蔽掉内部細節的。對于其他主機(102,103,105,108)來說,有自己的IP,同時擁有一個虛拟的靜态IP,即Cluster IP。具體實作細節這裡不讨論,CSDN裡面有一篇部落格(網絡負載平衡(Network Load Balancing)的工作原理 http://blog.csdn.net/ghj1976/article/details/3997840)介紹得非常詳細,含金量很高,珍重推薦一下!NLB的群集算法會決定哪台機器負責對隊列中的request進行處理。關于NLB叢集,微軟的MSDN進行了相當詳細的介紹,
這裡也一并推薦給大家。http://technet.microsoft.com/zh-cn/library/bb742455(en-us).aspx
回歸到正題,PowerShell支援在任意一台在叢集内的Server上執行PowerShell Code 來管理叢集,下面介紹下幾個指令。
1)擷取叢集資訊
Get-NlbCluster
Name IPAddress SubnetMask Mode
---- --------- ---------- ----
cluster1 3.53.100.100 255.0.0.0 UNICAST
叢集的name,叢集虛拟IP,模式等等
2)New-NlbCluster,Remove-NlbCluster,Resume-NlbCluster,Stop-NlbCluster,Start-NlbCluster,Set-NlbCluster,Suspend-NlbCluster
這些方法見名知意,不必詳細介紹,對于Cluster的管理足夠了,詳細内容見 http://technet.microsoft.com/en-us/library/hh801295.aspx,這裡詳細介紹了上述指令的用法,感謝MSDN.
3)管理叢集的Node
New-NlbClusterNode,Remove-NlbClusterNode,Resume-NlbClusterNode,Stop-NlbClusterNode,Start-NlbClusterNode,Set-NlbClusterNode,Suspend-NlbClusterNode,方法也是見名字知意,詳細内容見http://technet.microsoft.com/zh-cn/library/hh801288.aspx
關于Node節點的狀态有以下幾個
Converged(default),Stopped,Suspend
注意,這裡的default不是狀态的一部分,而是說當面server具有較高的優先級,如果停掉目前的Server,另外一台就會成為default。因為在對狀态進行判斷的時候注意以下就行了。
Get-NlbClusterNode -NodeName $env:COMPUTERNAME
此指令擷取目前機器的包含狀态的資訊
$Node = Get-NlbClusterNode -NodeName $env:COMPUTERNAME
當我們使用$Node.State來通路節點狀态時傳回的是$Null,于是想到$Node應該是集合,那麼我們采用集合的通路方式試試。
$Node[0].State結果發現還是不行,其實使用ToString就可以了,正确做法是$Node[0].State.ToString()
這裡給出了解決辦法:
http://social.technet.microsoft.com/Forums/windowsserver/zh-CN/ec6f2d68-0581-4cff-9cdd-29dca904a213/get-status-of-nlb- cluster-node?forum=winserverpowershell
NLB和PowerShell結合能夠做很多事情,比如hper-V管理等等,今後會進行介紹。