A piece of my work around PowerShell and IIS (or usefull things I've found on the web). Mostly some reminders for myself!

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)

Name*Email*WebsiteComment

Leave a Reply

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

Scroll to Top