Unirse a un clúster NLB existente

He estado tratando de escribir un programa PowerShell que verifique si existe un clúster. Si no lo hace, lo crea y se suma a él. Si otra computadora se activa, verifica si el clúster existe y, si existe, se agrega al clúster.

Tengo problemas para intentar obtener una referencia al objeto del clúster desde la dirección IP del clúster. Cada nodo conoce su dirección y la dirección del clúster. Quiero evitar que cada nodo tenga una lista de todos los demás nodos en su clúster.

Estoy descubriendo que necesito ver la dirección IP que no es del clúster para que nlbcluster funcione. Especificar la dirección IP del clúster solo produce errores.

¿Hay alguna manera de que pueda hacer esto, sin tener que actualizar esta lista en cada nodo cada vez que agrego o elimino nodos del clúster? Supongo que también quiero evitar la situación en la que un nodo se despierta y tiene que sondear cada una de las máquinas en la lista "maestra" en busca de una que esté activa para agregarse al clúster.

preguntado el 03 de mayo de 12 a las 17:05

2 Respuestas

¿Esto ayuda? Lo hice hace un tiempo, pero nunca tuve la oportunidad de probarlo por completo:

#Add a new node to NLB cluster
#Tested with Windows Server 2008 R2 only
#Requires WSManCredSSP Server Role Enabled on cluster Host
Function join-NlbCluster {
    Param(
        [Parameter(Mandatory=$true)]
        $clusterHostname,
        [Parameter(Mandatory=$true)]
        $newNodename,
        [Parameter(Mandatory=$true)]
        $newNodeinterfaceName,
        [Parameter(Mandatory=$true)]
        $userName,
        [Parameter(Mandatory=$true)]
        $password
        )
    Write-Verbose "Verifiying if the remote node has NLB installed"
    If (!((Get-OSFeature -computerName $newNodename -featureName NLB).Installed)) {
        Write-Error "NLB feature is not installed on $newNodename. Cannot continue."
        return $false
    }
    $cmdBlock = "Import-Module networkLoadBalancingClusters
    `$nlbCluster = Get-nlbCluster -HostName $clusterHostName
    if (`$nlbCluster) {
        `$newNode = Add-NlbClusterNode -InputObject `$nlbCluster -NewNodeName $newNodename -NewNodeInterface `"$newNodeinterfaceName`"
        if (`$newNode) {
            Write-Host `"New node is added to cluster`"
            return `$newNode
        } else {
            Write-Host `"Error Creating the NLB Cluster`"
            return `$false
        }
    } else {
        Write-Host `"No NLB cluster found on $clusterHostname`"
        return `$false
    }"

    Write-Verbose $cmdBlock
    $scriptBlock = $ExecutionContext.InvokeCommand.NewScriptBlock($cmdBlock)
    try {
        Write-Verbose "Creating new NLB Cluster"
        Invoke-Command -ComputerName $clusterHostName -ScriptBlock $scriptBlock -HideComputerName -Authentication Credssp -Credential (Get-PSCredential -userName $userName -Password $password)
    }
    catch {
        Write-Verbose $_
        return $false
    }
}

contestado el 08 de mayo de 12 a las 14:05

Hmmm, ¡buen intento! Ha aplazado el conocimiento de las otras máquinas al método de llamada. La persona que llama principal todavía necesita saber acerca de todas las máquinas con las que hablar, por lo que todavía necesitamos (y tenemos que mantener) una lista de todos los demás nodos en el clúster. - David Newcomb

El siguiente script se puede ejecutar en todos los nodos de su clúster, si el clúster no existe, créelo; de lo contrario, simplemente agregue la computadora actual al clúster existente. Todo lo que necesita hacer es asegurarse de que todas sus computadoras en el clúster tengan una tarjeta dedicada con el mismo nombre. En el siguiente ejemplo, la tarjeta de red se llama 'NLB'.

Import-Module ServerManager

# Interface cards should be named the same and have a fixed IP
$interfaceName = "NLB"
$clusterName = "NLB-Cluster"
$clusterIpAddress = "1.2.3.0"
$clusterSubnet = "255.0.0.0"

# Install Network Load Balancing and Tools
Write-Host "Install Network Load Balancing and Tools"
Add-WindowsFeature NLB, RSAT-NLB
Import-Module NetworkLoadBalancingClusters

# If the cluster hasn't been created yet then create it
if (!(Get-NlbCluster -HostName $clusterIpAddress -ErrorAction SilentlyContinue))
{
    Write-Host "Creating NLB Cluster: $clusterName" -ForegroundColor yellow 

    # Create Cluster (default unicast)
    New-NlbCluster -InterfaceName $interfaceName -ClusterName $clusterName -ClusterPrimaryIP $clusterIpAddress -SubnetMask $clusterSubnet 

    # Remove defaults
    Write-Host "Removing default port rules" -ForegroundColor yellow 
    Get-NlbClusterPortRule | Remove-NlbClusterPortRule -Force

    # Create port rules
    Get-NlbCluster | Add-NlbClusterPortRule -StartPort 80 -EndPort 80 -Protocol TCP -Affinity None | Out-Null
    Get-NlbCluster | Add-NlbClusterPortRule -StartPort 443 -EndPort 443 -Protocol TCP -Affinity None | Out-Null 
}
else
{
    Get-NlbCluster 
}

# if this node isn't already a member of a cluster then add it
if(!(Get-NlbClusterNode -HostName $env:COMPUTERNAME))
{
    # Add node to cluster
    Write-Host "Adding node to cluster: $clusterName" -ForegroundColor yellow 
    Get-NlbCluster -HostName $clusterIpAddress | Add-NlbClusterNode -NewNodeName $env:COMPUTERNAME -NewNodeInterface $interfaceName
}
else
{
    Get-NlbClusterNode
}

contestado el 24 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.