Clustering convidado em uma rede virtual
As máquinas virtuais conectadas a uma rede virtual só têm permissão para usar os endereços IP atribuídos pelo Controlador de Rede para se comunicarem na rede. As tecnologias de clustering que exigem um endereço IP flutuante, como o clustering de failover da Microsoft, necessitam algumas etapas extras para funcionarem corretamente.
O método usado para tornar o IP flutuante acessível é usar um VIP (IP virtual) do SLB (Balanceador de Carga de Software). O balanceador de carga de software precisa ser configurado com uma investigação de integridade em uma porta nesse IP para que o SLB direcione o tráfego para o computador que atualmente tem esse IP.
Exemplo: configuração do balanceador de carga
Este exemplo pressupõe que você já tenha criado as VMs que se tornarão nós de cluster e que tenha as anexado a uma Rede Virtual. Para obter diretrizes, confira Criar uma VM e conectar-se a uma VLAN ou a uma Rede Virtual de locatário.
Neste exemplo, você vai criar um endereço IP virtual (192.168.2.100) para representar o endereço IP flutuante do cluster e configurar uma investigação de integridade para monitorar a porta TCP 59999 a fim de determinar qual nó é o ativo.
Selecione o VIP.
Prepare-o atribuindo um endereço IP VIP, que pode ser qualquer endereço não utilizado ou reservado na mesma sub-rede dos nós de cluster. O VIP precisa corresponder ao endereço flutuante do cluster.
$VIP = "192.168.2.100" $subnet = "Subnet2" $VirtualNetwork = "MyNetwork" $ResourceId = "MyNetwork_InternalVIP"
Crie o objeto de propriedades do balanceador de carga.
$LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
Crie um endereço IP de front-end.
$LoadBalancerProperties.frontendipconfigurations += $FrontEnd = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfiguration $FrontEnd.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfigurationProperties $FrontEnd.resourceId = "Frontend1" $FrontEnd.resourceRef = "/loadBalancers/$ResourceId/frontendIPConfigurations/$($FrontEnd.resourceId)" $FrontEnd.properties.subnet = new-object Microsoft.Windows.NetworkController.Subnet $FrontEnd.properties.subnet.ResourceRef = "/VirtualNetworks/MyNetwork/Subnets/Subnet2" $FrontEnd.properties.privateIPAddress = $VIP $FrontEnd.properties.privateIPAllocationMethod = "Static"
Crie um pool de back-end para conter os nós de cluster.
$BackEnd = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPool $BackEnd.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPoolProperties $BackEnd.resourceId = "Backend1" $BackEnd.resourceRef = "/loadBalancers/$ResourceId/backendAddressPools/$($BackEnd.resourceId)" $LoadBalancerProperties.backendAddressPools += $BackEnd
Adicione uma investigação para detectar em qual nó de cluster o endereço flutuante está ativo no momento.
Observação
A investigação consulta o endereço permanente da VM na porta definida abaixo. A porta só precisa responder no nó ativo.
$LoadBalancerProperties.probes += $lbprobe = new-object Microsoft.Windows.NetworkController.LoadBalancerProbe $lbprobe.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerProbeProperties $lbprobe.ResourceId = "Probe1" $lbprobe.resourceRef = "/loadBalancers/$ResourceId/Probes/$($lbprobe.resourceId)" $lbprobe.properties.protocol = "TCP" $lbprobe.properties.port = "59999" $lbprobe.properties.IntervalInSeconds = 5 $lbprobe.properties.NumberOfProbes = 11
Adicione as regras de balanceamento de carga à porta TCP 1433.
Você pode modificar o protocolo e a porta conforme necessário. Repita também essa etapa várias vezes para outras portas e protocolos neste VIP. É importante que o EnableFloatingIP esteja definido como $true porque isso instrui o balanceador de carga a enviar o pacote para o nó com o VIP original em vigor.
$LoadBalancerProperties.loadbalancingRules += $lbrule = new-object Microsoft.Windows.NetworkController.LoadBalancingRule $lbrule.properties = new-object Microsoft.Windows.NetworkController.LoadBalancingRuleProperties $lbrule.ResourceId = "Rules1" $lbrule.properties.frontendipconfigurations += $FrontEnd $lbrule.properties.backendaddresspool = $BackEnd $lbrule.properties.protocol = "TCP" $lbrule.properties.frontendPort = $lbrule.properties.backendPort = 1433 $lbrule.properties.IdleTimeoutInMinutes = 4 $lbrule.properties.EnableFloatingIP = $true $lbrule.properties.Probe = $lbprobe
Crie o balanceador de carga no Controlador de Rede.
$lb = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $ResourceId -Properties $LoadBalancerProperties -Force
Adicione os nós de cluster ao pool de back-end.
Você pode adicionar quantos nós forem necessários ao pool para o cluster.
# Cluster Node 1 $nic = get-networkcontrollernetworkinterface -connectionuri $uri -resourceid "ClusterNode1_Network-Adapter" $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0] $nic = new-networkcontrollernetworkinterface -connectionuri $uri -resourceid $nic.resourceid -properties $nic.properties -force # Cluster Node 2 $nic = get-networkcontrollernetworkinterface -connectionuri $uri -resourceid "ClusterNode2_Network-Adapter" $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0] $nic = new-networkcontrollernetworkinterface -connectionuri $uri -resourceid $nic.resourceid -properties $nic.properties -force
Depois de criar o balanceador de carga e adicionar os adaptadores de rede ao pool de back-end, você estará pronto para configurar o cluster.
(Opcional) Se estiver usando um Cluster de Failover da Microsoft, prossiga para o próximo exemplo.
Exemplo 2: como configurar um cluster de failover da Microsoft
Use as etapas a seguir para configurar um cluster de failover.
Instale e configure as propriedades de um cluster de failover.
add-windowsfeature failover-clustering -IncludeManagementTools Import-module failoverclusters $ClusterName = "MyCluster" $ClusterNetworkName = "Cluster Network 1" $IPResourceName = $ILBIP = "192.168.2.100" $nodes = @("DB1", "DB2")
Crie o cluster em um nó.
New-Cluster -Name $ClusterName -NoStorage -Node $nodes[0]
Interrompa o recurso de cluster.
Stop-ClusterResource "Cluster Name"
Defina o IP do cluster e a porta de investigação.
O endereço IP precisa corresponder ao endereço IP de front-end usado no exemplo anterior, e a porta de investigação precisa corresponder à porta de investigação do exemplo anterior.
Get-ClusterResource "Cluster IP Address" | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
Inicie os recursos do cluster.
Start-ClusterResource "Cluster IP Address" -Wait 60 Start-ClusterResource "Cluster Name" -Wait 60
Adicione os nós restantes.
Add-ClusterNode $nodes[1]
O cluster está ativo. O tráfego que flui para o VIP na porta especificada é direcionado para o nó ativo.