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管理等等,今后会进行介绍。