天天看点

[Windows PowerShell04]-PowerShell管理Network Load Balancing

        NLB(Network Load Balancing)即网络负载均衡,目的是解决request的动态分发问题,对象可以是 app server 或 db server。关于NLB的集群,后面会继续讨论Rolling Upgrade 和 NLB的细节,因为本章的主题是PowerShell,所以仅就昨天遇到的一个问题来说说PowerShell如何获取NLB的Cluster、ClusterNode的信息(主要是状态)及如何操作这些节点。

         网络负载均衡集群的简单架构图如下:

[Windows PowerShell04]-PowerShell管理Network Load Balancing

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

继续阅读