Como configurar grupos de disponibilidade AlwaysOn do SQL Server com confirmação síncrona


Os grupos de disponibilidade (AG, na sigla em inglês) AlwaysOn do Microsoft SQL Server permitem replicar bancos de dados em várias instâncias do SQL Server Enterprise.

Assim como as Instâncias de cluster de failover do SQL Server, os grupos de disponibilidade AlwaysOn usam o clustering de failover do Windows Server (WSFC, na sigla em inglês) para implementar alta disponibilidade. No entanto, os dois recursos diferem de várias maneiras, incluindo o seguinte:

Grupos de disponibilidade AlwaysOn Instâncias de cluster de failover
Escopo do failover Grupo de bancos de dados Instância
Storage Não compartilhado Compartilhado

Veja uma comparação mais detalhada em Comparação de instâncias de cluster de failover e grupos de disponibilidade.

Os grupos de disponibilidade AlwaysOn são compatíveis com vários modos de disponibilidade. Neste tutorial, você verá como implantar grupos de disponibilidade AlwaysOn no modo de confirmação síncrona para implementar alta disponibilidade em um ou mais bancos de dados:

Arquitetura

Duas instâncias de VM, node-1 e node-2, servem como nós WSFC e executam o SQL Server. Uma terceira instância de VM, witness, é usada para conseguir um quórum em um cenário de failover. As três instâncias de VM ficam distribuídas em três zonas e compartilham uma sub-rede comum.

Usando um grupo de disponibilidade Always On do SQL Server, um banco de dados de exemplo, bookshelf, é replicado de maneira síncrona nas duas instâncias do SQL Server.

Em um ambiente local, é possível permitir que o WSFC execute avisos de ARP se um failover ocorrer para notificar o equipamento de rede sobre uma mudança de endereço IP. O Google Cloud ignora os avisos de ARP, e você precisa usar um balanceador de carga interno. Para mais informações, consulte Como executar o clustering de failover do Windows Server.

O balanceador de carga faz o seguinte:

  • Executa periodicamente uma verificação de integridade para identificar o nó WSFC ativo no momento
  • Os clientes se conectam ao endereço IP do balanceador de carga
  • Encaminha o tráfego do cliente para o nó WSFC ativo no momento

O artigo pressupõe que você já implantou o Active Directory no Google Cloud e que tem conhecimentos básicos de SQL Server, Active Directory e Compute Engine.

Objetivos

  • Implante um WSFC com duas instâncias de VM do SQL Server e uma terceira instância de VM que funciona como uma testemunha de compartilhamento de arquivos.
  • Implante um SQL Server.
  • Crie um grupo de disponibilidade com confirmação síncrona.
  • Verifique se a configuração funciona, simulando um failover.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

Use a calculadora de preços para gerar uma estimativa de custo com base na projeção de uso.

Antes de começar

Para concluir este guia, você precisa do seguinte:

Para concluir o guia, você também precisa de um projeto do Google Cloud:

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Como preparar o projeto e a rede

Para preparar o projeto do Google Cloud e a VPC para a implantação de grupos de disponibilidade AlwaysOn do SQL Server, faça o seguinte:

  1. No Console do Google Cloud Platform, abra o Cloud Shell clicando no botão Ativar o Cloud Shell Ative o Cloud Shell..

    Acesse o Console do Google Cloud

  2. Inicialize as seguintes variáveis:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Em que:

    • VPC_NAME: nome da VPC.
    • SUBNET_NAME: nome da sub-rede.
  3. Defina o ID do projeto padrão:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

  4. Defina sua região padrão:

    gcloud config set compute/region REGION
    

    Substitua REGION pelo ID da região em que você quer implantar.

Crie regras de firewall

Para permitir que os clientes se conectem ao SQL Server, permita a comunicação entre os nós WSFC e que o balanceador de carga realize verificações de integridade, você precisa criar várias regras de firewall. Para simplificar a criação dessas regras de firewall, use tags de rede:

  • Os dois nós WSFC são anotados com a tag wsfc-node.
  • Todos os servidores (incluindo a testemunha) são anotados com a tag wsfc.

Crie regras de firewall que usem estas tags de rede:

  1. Volte para a sessão atual do Cloud Shell.
  2. Crie regras de firewall para os nós do WSFC:

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=wsfc \
      --target-tags=wsfc \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:1433 \
      --enable-logging \
      --source-ranges=$SUBNET_CIDR \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    
  3. Crie uma regra de firewall que permita verificações de integridade dos intervalos de IP das sondas do Google Cloud:

    gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp \
      --source-ranges=130.211.0.0/22,35.191.0.0/16 \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    

Crie instâncias de VM

Agora, implante duas instâncias de VM para o cluster de failover. A qualquer momento, uma dessas VMs hospeda a réplica primária do banco de dados do SQL Server enquanto o outro nó hospeda a réplica secundária. As duas instâncias de VM precisam:

  • estar localizadas na mesma região para que possam ser acessadas por um balanceador de carga de rede de passagem interna;
  • ter o cluster de failover do Windows Server (WSFC) e o SQL Server instalados;
  • ativar o suporte WSFC do Compute Engine{ .external };

usar uma imagem premium do SQL Server que tenha o SQL Server 2022 pré-instalado.

Para dar um voto de desempate e conquistar um quórum para o cenário de failover, você implanta uma terceira VM que serve como uma testemunha de compartilhamento de arquivos.

  1. Volte para a sessão atual do Cloud Shell.
  2. Crie um script de especialização para os nós WSFC. O script instala o recurso necessário do Windows e cria regras de firewall para o WSFC e o SQL Server:

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow SQL Server health check" dir=in action=allow protocol=TCP localport=59997
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    # Format data disk
    Get-Disk |
     Where partitionstyle -eq 'RAW' |
     Initialize-Disk -PartitionStyle MBR -PassThru |
     New-Partition -AssignDriveLetter -UseMaximumSize |
     Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
    
    # Create data and log folders for SQL Server
    md d:\Data
    md d:\Logs
    EOF
    
  3. Crie as instâncias de VM. Nas duas VMs que servem como nós WSFC, anexe mais um disco de dados e ative o clustering de failover do Windows Server definindo a chave de metadados enable-wsfc como true:

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $REGION-a \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $REGION-b \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $REGION-c \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    
  4. Para mesclar as três instâncias de VM ao Active Directory, faça o seguinte para cada uma das três instâncias de VM:

    1. Monitore o processo de inicialização da VM visualizando a saída da porta serial:

      gcloud compute instances tail-serial-port-output NAME
      

      Substitua NAME pelo nome da instância de VM.

      Aguarde cerca de três minutos até conferir a saída Instance setup finished e pressione Ctrl + C. Nesse momento, a instância de VM está pronta para ser usada.

    2. Crie um nome de usuário e uma senha para a instância de VM.

    3. Conecte-se à VM usando a Área de trabalho remota e faça login usando o nome de usuário e a senha criados na etapa anterior.

    4. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).

    5. Confirme a elevação do prompt clicando em Sim.

    6. Associe o computador ao seu domínio do Active Directory e reinicie:

      Add-Computer -Domain DOMAIN -Restart
      

      Substitua DOMAIN pelo nome DNS do seu domínio do Active Directory.

      Aguarde aproximadamente um minuto para que a reinicialização seja concluída.

Reservar endereços IP do cluster

Agora você reserva dois endereços IP estáticos na sua VPC. Um endereço IP é usado como o endereço IP do cluster WSFC, o outro é usado pelo balanceador de carga interno.

  1. Reserve um IP estático para o balanceador de carga interno e capture o endereço em uma nova variável de ambiente chamada LOADBALANCER_ADDRESS:

    gcloud compute addresses create wsfc \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
    

    Anote o endereço IP, você precisará dele mais tarde.

  2. Reserve outro endereço IP estático usado como IP do cluster

    gcloud compute addresses create wsfc-cluster \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "Cluster IP: $CLUSTER_ADDRESS"
    

    Anote o endereço IP, você precisará dele mais tarde.

Agora o projeto e a VPC estão prontos para a implantação do WSFC e do SQL Server.

Como implantar o cluster de failover

Use as instâncias de VM para implantar um WSFC e SQL Server.

Como preparar o SQL Server

Crie uma nova conta de usuário no Active Directory para o SQL Server:

  1. Conecte-se a node-1 usando a Área de trabalho remota. Faça login com a conta de usuário do seu domínio.
  2. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
  3. Confirme a elevação do prompt clicando em Sim.
  4. Crie uma conta de usuário de domínio para o servidor SQL e o agente SQL e atribua uma senha:

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

Para configurar o SQL Server, execute as seguintes etapas em node-1 e node-2:

  1. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).

    Renomeie a instância do SQL Server para que o nome corresponda ao nome do host:

    Invoke-Sqlcmd -Query "
      sp_addserver '$env:computername', local;
      GO"
    Restart-Service -Name MSSQLSERVER
    
  2. Abra o SQL Server Configuration Manager.

  3. No painel de navegação, selecione Serviços do SQL Server

  4. Na lista de serviços, clique com o botão direito do mouse em SQL Server (MSSQLSERVER) e selecione Propriedades.

  5. Em Fazer logon como, altere a conta:

    • Nome da conta: DOMAIN\sql_server em que DOMAIN é o nome do NetBIOS do seu domínio do Active Directory
    • Senha: digite a senha que você escolheu anteriormente.
  6. Clique em OK.

  7. Quando solicitado a reiniciar o SQL Server, selecione Sim.

O SQL Server agora é executado em uma conta de usuário do domínio.

Como criar compartilhamentos de arquivos

Crie dois compartilhamentos de arquivos em witness para que a instância de VM possa armazenar backups do SQL Server e atuar como uma testemunha de compartilhamento de arquivos:

  1. Conecte-se a witness usando a Área de trabalho remota. Faça login com a conta de usuário do seu domínio.
  2. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
  3. Confirme a elevação do prompt clicando em Sim.
  4. Crie um compartilhamento de arquivos de testemunha e conceda a você e aos dois nós WSFC acesso ao compartilhamento de arquivos:

    New-Item "C:\QWitness" –type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess $env:username,node-1$,node-2$
    
  5. Crie outro compartilhamento de arquivos para armazenar backups e conceder acesso total ao SQL Server:

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

Implantar o WSFC

Agora você está pronto para criar o cluster de failove.

  1. Volte para a sessão na Área de trabalho remota em node-1.
  2. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
  3. Confirme a elevação do prompt clicando em Sim.
  4. Crie um novo cluster:

    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    Substitua CLUSTER_ADDRESS pelo endereço IP do cluster que você criou anteriormente.

  5. Retorne à sessão do PowerShell em witness e conceda ao objeto de computador virtual do cluster a permissão de acesso ao compartilhamento de arquivos:

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. Retorne à sessão do PowerShell em node-1 e configure o cluster para usar o compartilhamento de arquivos em witness como um quórum de cluster:

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. Verifique se o cluster foi criado com sucesso:

    Test-Cluster
    

    Talvez sejam exibidos alguns avisos que podem ser ignorados com segurança:

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    Também é possível executar o snap-in de MMC do failover para analisar a integridade do cluster executando cluadmin.msc.

  8. Se você estiver usando o AD gerenciado, adicione a conta de computador usada pelo WSFC ao grupo de Contas mescladas de domínio do Cloud Service para que ela possa juntar computadores ao domínio:

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Ative os grupos de disponibilidade AlwaysOn nos dois nós:

    Enable-SqlAlwaysOn -ServerInstance node-1 -Force
    Enable-SqlAlwaysOn -ServerInstance node-2 -Force
    

Como criar um grupo de disponibilidade

Agora, crie um banco de dados de amostra bookshelf, inclua-o em um novo grupo de disponibilidade chamado bookshelf-ag e configure a alta disponibilidade.

Criar um banco de dados

Crie um novo banco de dados. Para os fins deste tutorial, o banco de dados não precisa conter nenhum dado.

  1. Volte para a sessão na Área de trabalho remota em node-1.
  2. Abra o SQL Server Management Studio.
  3. Na caixa de diálogo Conectar-se ao servidor, verifique se o nome do servidor está definido como NODE-1 e selecione Conectar.
  4. No menu, selecione Arquivo > Novo > Consulta com conexão atual.
  5. Cole este script SQL no editor:

    -- Create a sample database
    CREATE DATABASE bookshelf ON PRIMARY (
      NAME = 'bookshelf',
      FILENAME='d:\Data\bookshelf.mdf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    LOG ON (
      NAME = 'bookshelf_log',
      FILENAME='d:\Logs\bookshelf.ldf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    GO
    
    USE [bookshelf]
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Create sample table
    CREATE TABLE [dbo].[Books] (
      [Id] [bigint] IDENTITY(1,1) NOT NULL,
      [Title] [nvarchar](max) NOT NULL,
      [Author] [nvarchar](max) NULL,
      [PublishedDate] [datetime] NULL,
      [ImageUrl] [nvarchar](max) NULL,
      [Description] [nvarchar](max) NULL,
      [CreatedById] [nvarchar](max) NULL,
      CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    
    -- Create a backup
    EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [bookshelf] SET RECOVERY FULL;
      GO
      BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT
    GO
    

    O script cria um novo banco de dados com uma única tabela e executa um backup inicial para witness.

  6. Selecione Executar para executar o script SQL.

Como configurar alta disponibilidade

  1. Na janela Pesquisador de objetos, clique com o botão direito do mouse em Alta disponibilidade sempre ativada e selecione Assistente de novo grupo de disponibilidade.
  2. Na página Especificar opções, defina o nome do grupo de disponibilidade como bookshelf-ag e selecione Avançar.
  3. Na página Selecionar bancos de dados, selecione o banco de dados bookshelf e, em seguida, Avançar.
  4. Na página Especificar réplicas, selecione a guia Réplicas:

    1. Selecione Adicionar réplica.
    2. Na caixa de diálogo Conectar-se ao servidor, insira o nome do servidor node-2 e selecione Conectar.

      A lista de réplicas de disponibilidade agora contém instâncias do SQL Server, node-1 e node-2.

    3. Defina o Modo de disponibilidade como Commit síncrono em ambas as instâncias.

    4. Defina Failover automático como Ativado nas duas instâncias.

    5. Selecione a guia Ouvinte.

      1. Selecione Criar um ouvinte do grupo de disponibilidade.
      2. Insira as seguintes configurações:

        • Nome DNS do ouvinte: bookshelf
        • Porta: 1433
        • Modo de rede: IP estático
      3. Selecione Adicionar e insira o endereço IP do balanceador de carga que você criou anteriormente. Em seguida, selecione OK.

    6. Selecione Próxima.

  5. Na página Selecionar Sincronização de Dados, selecione Propagação automática.

  6. Na página Validação, confirme se todas as verificações foram bem-sucedidas.

  7. Na página Resumo, selecione Concluir.

  8. Na página Resultados, selecione Fechar.

Configurar verificações de integridade

A última etapa é configurar o cluster para expor um endpoint de verificação de integridade que possa ser usado por um balanceador de carga interno:

  1. Volte para a sessão do PowerShell em node-1
  2. Inicialize uma variável com o endereço IP do balanceador de carga.

    $LoadBalancerIP = 'IP_ADDRESS'
    

    Substitua IP_ADDRESS pelo endereço IP do wsfc que você reservou anteriormente.

  3. Configure o cluster de failover para responder ao serviço de verificação de integridade:

    $SqlIpAddress = Get-ClusterResource |
      Where-Object {$_.ResourceType -eq "IP Address"} |
      Where-Object {$_.Name.StartsWith("bookshelf")}
    
    $SqlIpAddress | Set-ClusterParameter -Multiple @{
     'Address'= $LoadBalancerIP;
     'ProbePort'= 59997;
     'SubnetMask'='255.255.255.255';
     'Network'= (Get-ClusterNetwork).Name;
     'EnableDhcp'=0; }
    
  4. Reinicie o recurso do cluster:

    $SqlIpAddress | Stop-ClusterResource
    $SqlIpAddress | Start-ClusterResource
    

Crie um balanceador de carga interno

Agora, para fornecer um único endpoint para clientes do SQL Server, implante um balanceador de carga interno que use uma verificação de integridade que garanta que o tráfego seja direcionado ao nó ativo da WSFC

  1. Volte para a sessão atual do Cloud Shell.
  2. Crie dois grupos de instâncias não gerenciadas, um por zona, e adicione os dois nós aos grupos:

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \
      --instances node-2
    
  3. Crie uma verificação de integridade que o balanceador de carga possa usar para determinar qual é o nó ativo.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59997 \
      --timeout="1s"
    

    A verificação de integridade faz sondagem na porta 59997, que foi configurada anteriormente como ProbePort para o ouvinte do grupo de disponibilidade.

  4. Crie um serviço de back-end e adicione os dois grupos de instâncias:

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $(gcloud config get-value compute/region) \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $REGION-a \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $REGION-b \
      --region $REGION
    
  5. Criar o balanceador de carga interno:

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --backend-service wsfc-backend
    

Agora é possível se conectar ao ouvinte do grupo de disponibilidade do SQL Server usando o balanceador de carga interno e o nome DNS bookshelf.

Para criar vários grupos de disponibilidade em um único cluster de failover, é necessário usar um balanceador de carga separado com a própria verificação de integridade por grupo de disponibilidade. Isso significa que você precisa de cada grupo de disponibilidade:

  1. Um endereço IP interno reservado (um para cada grupo de disponibilidade) a ser usado para o listener e o balanceador de carga interno.

  2. Um balanceador de carga separado (um para cada grupo de disponibilidade) com o próprio endereço IP reservado na etapa anterior.

  3. Uma porta de sondagem separada (59997, 59998 e assim por diante para cada grupo de disponibilidade) e uma regra de firewall para permitir o tráfego nessas portas.

  4. Uma regra de verificação de integridade separada para cada grupo de disponibilidade que usa as respectivas portas de sondagem.

Como testar o failover

Agora você está pronto para testar se o failover funciona conforme esperado:

  1. Volte para a sessão do PowerShell em witness
  2. Execute o script a seguir:

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=bookshelf;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT @@SERVERNAME"
    
      $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
      $Data = New-Object System.Data.DataSet
      $Adapter.Fill($Data) | Out-Null
      $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss")
    
      Start-Sleep -Seconds 2
    }
    

    A cada 2 segundos, o script se conecta ao SQL Server usando o ouvinte do grupo de disponibilidade e consulta o nome do servidor.

    Deixe o script em execução.

  3. Retorne à sessão da Área de trabalho remota em node-1 para acionar um failover:

    1. No SQL Server Management Studio, navegue até Alta disponibilidade sempre ativada > Grupos de disponibilidade > bookshelf-ag (primária) e clique com o botão direito do mouse no nó.
    2. Selecione Failover.
    3. Na página Selecionar nova réplica primária, verifique se node-2 está selecionado como a nova réplica primária e se a coluna Prontidão de failover indica No data loss. Depois, selecione Avançar.
    4. Na página Conectar à réplica, selecione Conectar.
    5. Na caixa de diálogo Conectar-se ao servidor, verifique se o nome do servidor é node-2 e clique em Conectar.
    6. Selecione Avançar e Concluir.
    7. Na página Resultados, verifique se o failover foi bem-sucedido.
  4. Volte para a sessão do PowerShell em witness.

  5. Observe a saída do script em execução e veja que o nome do servidor mudou de node-1 para node-2 como resultado do failover.

  6. Para interromper o script, pressione Ctrl+C.

Limpeza

Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir