Como configurar grupos de disponibilidade AlwaysOn do SQL Server

Se você executa várias instâncias do SQL Server Enterprise no Compute Engine, pode configurá-las para usar o Windows Server Failover Clustering e os SQL Server AlwaysOn Availability Groups para suporte a alta disponibilidade e recuperação de desastres.

Este tutorial mostra como criar um cluster de instâncias com SQL Server Enterprise, com as definições de rede necessárias, e configurá-las para usar o Windows Server Failover Clustering e os SQL Server AlwaysOn Availability Groups. É possível usar instâncias do SQL Server Enterprise criadas com base nas imagens públicas do SQL Server ou no Microsoft License Mobility.

Pré-requisitos

Para fazer este tutorial, é necessário conhecer os seguintes items:

Como configurar a rede VPC

Crie uma rede VPC de modo personalizado com três sub-redes. Em seguida, configure as regras do firewall para permitir o tráfego entre máquinas virtuais internas. É possível usar uma rede existente para esta tarefa, se necessário, mas é uma prática recomendada isolar os sistemas em redes e sub-redes diferentes. Este tutorial espera que você crie a seguinte configuração de rede e sub-redes VPC:

  1. Crie uma rede VPC personalizada.

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. Adicione três sub-redes à rede VPC.

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. Crie uma regra de firewall para permitir o tráfego entre as instâncias nos endereços IP internos na nova rede VPC.

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. Crie uma regra de firewall para permitir o RDP na porta 3389 na rede VPC.

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

Como criar um controlador de domínio do Windows

Crie um controlador de domínio do Windows. Para este tutorial, o domínio é dbeng.com e o nome do controlador de domínio é dc-windows no endereço IP 10.2.0.100. O controlador de domínio usa a sub-rede wsfcsubnet3.

  1. Crie uma instância para usar como controlador de domínio. É possível especificar qualquer tipo de máquina e versão do Windows Server necessários. Para o controlador de domínio, especifique um tipo de máquina n1-standard-1 pequeno e a imagem mais recente da família de imagens windows-2016.

    gcloud compute instances create dc-windows --machine-type n1-standard-1 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. Conecte-se à instância do controlador de domínio usando o RDP.

  3. Na instância, execute PowerShell como administrador para abrir o terminal PowerShell.

  4. Configure as seguintes variáveis:

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  5. Instale as seguintes ferramentas do Active Directory:

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  6. Se a instância não reiniciar automaticamente depois de criar o domínio, reinicie-a manualmente.

  7. Depois que a instância for reiniciada, reconecte-se a ela usando RDP. Use as credenciais do domínio, que correspondem às suas credenciais originais.

  8. Execute "Usuários e computadores do Active Directory" e redefina a senha do "Administrador". Lembre-se de desmarcar a opção "O usuário precisa alterar a senha no próximo logon".

  9. Desconecte-se da instância e reconecte-se usando a conta Administrator.

  10. Crie uma conta de domínio chamada "sql.service", que será usada para executar o SQL Server. Desmarque as opções "O usuário precisa alterar a senha no próximo logon" e "Senha nunca expira".

O controlador de domínio está configurado e você pode se desconectar da instância dc-windows. Em seguida, crie as instâncias para o grupo de disponibilidade.

Como criar instâncias para o grupo de disponibilidade

Crie instâncias do SQL Server para um grupo de disponibilidade. Essas instâncias usam as seguintes configurações de endereço IP com IPs de alias:

  • Nome da instância: cluster-sql1
    • Endereço IP interno: 10.0.0.4
    • Nome do cluster de failover do Windows: cluster-ag
    • Endereço IP do cluster de failover: 10.0.0.5 (IP do alias)
    • Nome do grupo de disponibilidade: cluster-listener
    • Endereço do listener do grupo disponibilidade: 10.0.0.6 (IP do alias)
  • Nome da instância: cluster-sql2
    • Endereço IP interno: 10.1.0.4
    • Nome do cluster de failover do Windows: cluster-ag
    • Endereço IP do cluster de failover: 10.1.0.5 (IP do alias)
    • Nome do grupo de disponibilidade: cluster-listener
    • Endereço do listener do grupo disponibilidade: 10.1.0.6 (IP do alias)

Crie as instâncias do SQL Server usando um dos seguintes métodos:

Imagens públicas do SQL Server

Crie duas instâncias de imagens públicas do SQL Server. Para este exemplo, nomeie as instâncias cluster-sql1 e cluster-sql2. Especifique um tamanho de disco de inicialização de 200GB e um tipo de máquina n1-highmem-4. As instâncias do SQL Server normalmente exigem mais recursos de computação do que a instância do controlador de domínio. Se for preciso mais recursos de computação, você poderá alterar o tipo de máquina dessas instâncias. Se for preciso espaço de armazenamento adicional, adicione um disco ou redimensione o disco de inicialização permanente. Em grupos de disponibilidade maiores, é possível criar várias instâncias.

Além disso, inclua o sinalizador --metadata sysprep-specialize-script-ps1 para executar um comando do PowerShell durante a criação da instância, que instala o recurso Failover-Clustering.

Para este exemplo, crie duas instâncias usando os seguintes comandos:

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

Para grupos de disponibilidade maiores, você pode criar instâncias adicionais com os endereços IP apropriados.

Licenças existentes

Se você quiser levar suas próprias licenças do SQL Server Enterprise com base no License Mobility da Microsoft por meio da garantia de software, crie uma imagem do Windows com --guestOSFeatures ativado. Depois, instale o SQL Server Enterprise manualmente.

  1. Crie uma instância do Windows Server.
  2. Na instância, atualize todos os componentes para a versão mais recente.
  3. Defina o estado de exclusão automática como false para o disco de inicialização dessa instância.
  4. Exclua a instância.
  5. Crie um disco temporário com uma imagem padrão do Windows Server.

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. No novo disco, crie uma imagem personalizada do Windows Server com MULTI_IP_SUBNET ativado no parâmetro guestOSFeatures.

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. Depois que a imagem estiver criada, exclua o disco temporário.

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. Use a imagem personalizada para criar as novas instâncias do SQL Server para o grupo de disponibilidade. As instâncias do SQL Server normalmente exigem mais recursos de computação do que a instância do controlador de domínio, portanto, especifique pelo menos um tipo de máquina n1-highmem-4. Se for preciso mais recursos de computação posteriormente, você poderá alterar o tipo de máquina dessas instâncias. Se for preciso espaço de armazenamento adicional, adicione um disco ou redimensione o disco de inicialização permanente. Em grupos de disponibilidade maiores, é possível criar várias instâncias. Para este exemplo, crie duas instâncias:

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. Em uma das instâncias, instale o SQL Server Enterprise manualmente.

Depois de criar as instâncias, configure-as para que possam funcionar como um grupo de disponibilidade.

  1. Conecte-se às duas instâncias usando conexões do RDP.
  2. Altere as duas instâncias para que usem endereços IP estáticos e configure a máscara de rede como 255.255.0.0. Abra um terminal do PowerShell como administrador e defina os endereços IP estáticos como "estático". Estes comandos podem encerrar a conexão do computador remoto:

    • Instância 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • Instância 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. Adicione as duas instâncias ao domínio do Windows. Abra um PowerShell como administrador e execute o seguinte comando Add-Computer nas duas instâncias:

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    O comando solicita suas credenciais. Quando o comando terminar de executar, a instância reiniciará.

As instâncias agora estão criadas para o grupo de disponibilidade. Em seguida, configure o Failover Cluster Manager.

Como configurar o Failover Cluster Manager

Ative o cluster de failover nas instâncias no grupo de disponibilidade e configure uma instância para agir como Failover Cluster Manager. Ative "AlwaysOn High Availability" em todas as instâncias no grupo.

  1. Reconecte-se às instâncias usando o RDP, mas use as credenciais de administrador do domínio. Para este exemplo, o domínio é dbeng e a conta de administrador é Administrator. Se você estiver usando o Chrome RDP para Google Cloud Platform, exclua os certificados do RDP para esses endereços na lista de certificados no menu Opções.

  2. Selecione uma das instâncias e configure-a para executar como Failover Cluster Manager.

    1. Abra um PowerShell como administrador e configure variáveis que reflitam seu ambiente de cluster. Para este exemplo, configure as seguintes variáveis:

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. Crie o cluster de failover:

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. Ative "AlwaysOn High Availability" para os dois nós do cluster:

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. Na instância secundária, em que não há Cluster Manager, crie uma pasta de backup em C:\SQLBackup e compartilhe-a como \\cluster-sql2\SQLBackup. Você pode escolher outro local para a pasta compartilhada, desde que as duas instâncias tenham acesso a ela.

  4. Nas duas instâncias, crie duas pastas em C:\SQLData e C:\SQLLog. Use essas pastas para os dados do banco de dados e os arquivos de registro.

O Failover Cluster Manager está pronto. Em seguida, crie o grupo de disponibilidade.

Criar o grupo de disponibilidade

Crie um banco de dados de teste e configure-o para trabalhar com um novo grupo de disponibilidade. Alternativamente, você pode especificar um banco de dados existente para o grupo de disponibilidade.

  1. Se não tiver um banco de dados já configurado, crie um banco de dados de teste. Na instância do Cluster Manager, execute o SQL Server Management Studio e crie um banco de dados de teste com o seguinte comando SQL:

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. Na instância do Cluster Manager, execute o SQL Server Management Studio.

  3. Clique com o botão direito do mouse em AlwaysOn High Availability e selecione New Availability Group Wizard.

  4. Na página Specify Name, configure um nome para o grupo de disponibilidade. Para este exemplo, especifique cluster-ag.

  5. Na página Select Databases, especifique o banco de dados que quer replicar. Para este exemplo, especifique o banco de dados TestDB.

  6. Na página Specify Replicas, configure as duas instâncias como réplicas, com failover automático e confirmação síncrona.

  7. Na página Select Data Synchronization, especifique o compartilhamento de rede para manter o backup do banco de dados para a sincronização inicial. Para este exemplo, especifique \\cluster-sql2\SQLBackup.

  8. A página Validation gera uma advertência porque não há listener, mas você pode ignorá-la.

  9. Depois que o assistente terminar, clique com o botão direito do mouse no novo grupo de disponibilidade e selecione Add Listener.

  10. Especifique os parâmetros para este Listener:

    • Nome do DNS do listener: cluster-listener
    • Porta de rede: 1433
    • Modo de rede: Static IP
  11. Adicione dois campos de sub-rede e endereço IP. Para este exemplo, use os seguintes pares de sub-rede e endereço IP:

    • 10.0.0.0/16 e 10.0.0.6
    • 10.1.0.0/16 e 10.1.0.6

Agora você pode se conectar ao SQL Server usando cluster-listener como o nome do banco de dados do SQL Server em vez do nome das instâncias. Essa conexão aponta para a instância que está ativa no momento.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine