Create-NLBCluster

Network Load Balancing (NLB) is an optional feature in Windows Server® 2008 that load balances network traffic (sent to a cluster virtual IP address) among multiple servers in an NLB cluster. NLB is particularly useful for ensuring that stateless applications, such as a Web server running Internet Information Services (IIS), are scalable by adding additional servers as the load increases.

Network Load Balancing (NLB) didn’t get a chance to have a new mmc to manage it in Windows 2008; we still have to use the old one inherited from Windows 2003. No way! Now we have a complete set of cmdlets, let’s use them.

 

Param(
[Parameter(Mandatory=$true, HelpMessage="Interface cards should be named the same on all nodes wannabe and have a fixed IP.")]
$InterfaceName,
[Parameter(Mandatory=$true)]
$ClusterName,
[Parameter(Mandatory=$true, HelpMessage="Virtual IP that the cluster will use to load-balance the requests between all nodes.")]
$ClusterIpAddress,
[Parameter(Mandatory=$true, HelpMessage="Virtual IP subnet mask that the cluster will use.")]
$ClusterSubnet,
[Parameter(Mandatory=$true, HelpMessage="The list of the nodes to add in the cluster.")]
[string[]]$NodesList,
[Parameter(Mandatory=$true, HelpMessage="The list of the ports (TCP) to load-balance between all nodes.")]
[string[]]$PortsList
)

Try {
Import-Module NetworkLoadBalancingClusters
}
Catch {
$_.Exception.Message
Exit
}

if (!(Get-NlbCluster -HostName $ClusterIpAddress -ErrorAction SilentlyContinue))
{
Write-Host "`nCreating NLB Cluster..." -ForegroundColor Yellow
Write-Host "Cluster Name: $ClusterName"
Write-Host "Cluster VIP: $ClusterIpAddress"

Try {
New-NlbCluster -InterfaceName $InterfaceName -ClusterName $ClusterName -ClusterPrimaryIP $ClusterIpAddress -SubnetMask $ClusterSubnet -OperationMode Multicast
}
Catch {
$_.Exception.Message
Exit
}
Write-Host "`nNLB Cluster $ClusterName created successfully.`n" -ForegroundColor Green

Write-Host "Removing default port rules..." -ForegroundColor Yellow
Try {
Get-NlbClusterPortRule | Remove-NlbClusterPortRule -Force
}
Catch {
$_.Exception.Message
Exit
}
Write-Host "Default port rules removed successfully.`n" -ForegroundColor Green

ForEach ($Port in $PortsList) {
Write-Host "Adding the new port rules..." -ForegroundColor Yellow
Try {
Get-NlbCluster | Add-NlbClusterPortRule -StartPort $Port -EndPort $Port -Protocol TCP -Affinity None | Out-Null
Write-Host "Port rule StartPort TCP ${Port}-${Port}) added successfully." -ForegroundColor Green
}
Catch {
$_.Exception.Message
Exit
}
} # EndOf ForEach ($Port in $PortsList)
}
else { Get-NlbCluster }

ForEach ($Node in $NodesList) {
Write-Host "`nAdding the node(s) in the cluster $ClusterName..." -ForegroundColor Yellow
if(!(Get-NlbClusterNode -HostName $Node -ErrorAction SilentlyContinue))
{
Try {
Get-NlbCluster -HostName $ClusterIpAddress | Add-NlbClusterNode -NewNodeName $Node -NewNodeInterface $InterfaceName
Write-Host "Node $Node added successfully." -ForegroundColor Green
}
Catch {
$_.Exception.Message
Exit
}
} # EndOf if(!(Get-NlbClusterNode -HostName $Name))
} # EndOf ForEach ($Node in $NodesList)

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top