Configurar grupos de disponibilidade Always On do SQL Server com confirmação síncrona usando um balanceador de carga interno


Os grupos de disponibilidade Always On do Microsoft SQL Server permitem replicar bancos de dados em várias instâncias do SQL Server Enterprise.

Semelhante às instâncias de cluster de failover do SQL Server , os grupos de disponibilidade Always On usam o Windows Server Failover Clustering (WSFC) para implementar alta disponibilidade. No entanto, os dois recursos diferem das seguintes maneiras:

Grupos de disponibilidade Always On Instâncias de cluster de failover
Escopo do failover Grupo de bancos de dados Exemplo
Armazenar Não compartilhado Compartilhado

Para obter uma comparação mais detalhada, consulte Comparação de instâncias de cluster de failover e grupos de disponibilidade .

Os grupos de disponibilidade Always On oferecem suporte a vários modos de disponibilidade . Este tutorial mostra como você pode implantar grupos de disponibilidade Always On no modo de confirmação síncrona para implementar alta disponibilidade para um ou mais bancos de dados.

Na configuração, você criará três instâncias de VM. Duas instâncias de VM, node-1 e node-2 servem como nós de cluster e executam o SQL Server. Uma terceira instância de VM, witness , é usada para atingir um quorum em um cenário de failover. As três instâncias de VM são 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 forma síncrona nas duas instâncias do SQL Server.

Em um ambiente de cluster do Windows local, os anúncios do Address Resolution Protocol (ARP) acionam o failover de endereço IP .Google Cloud, no entanto, desconsidera os anúncios ARP. Conseqüentemente, você deve implementar uma das duas opções a seguir: usar um balanceador de carga interno e um nome de rede distribuída (DNN).

O artigo pressupõe que você já tenha implantado o Active Directory em Google Cloude que você tenha conhecimento básico de SQL Server, Active Directory e Compute Engine. Para obter mais informações sobre o Active Directory em Google Cloud, consulte a seção Antes de começar .

Usando um grupo de disponibilidade Always On do SQL Server, um banco de dados de exemplo, bookshelf , é replicado de forma síncrona nas duas instâncias do SQL Server. Um balanceador de carga interno garante que o tráfego seja direcionado para o nó ativo.

Para obter mais informações sobre o cluster de failover do Windows Server com um balanceador de carga interno, consulte cluster de failover .

Arquitetura

Este diagrama inclui o seguinte:

  • Duas instâncias de VM na mesma região e zonas diferentes para o cluster de failover chamadas node-1 e node-2 . Um hospeda a réplica primária do banco de dados SQL Server enquanto o outro nó hospeda a réplica secundária.
  • Uma terceira VM chamada witness serve como testemunha de compartilhamento de arquivos para fornecer um voto de desempate e atingir um quórum para failover.
  • Um balanceador de carga interno na frente do cluster fornece um único ponto de extremidade para clientes SQL Server e usa uma verificação de integridade para garantir que o tráfego seja direcionado para o nó ativo.

Objetivos

Este tutorial visa atingir os seguintes objetivos:

Custos

Este tutorial usa componentes faturáveis ​​de Google Cloud, incluindo:

Use a calculadora de preços para gerar uma estimativa de custo com base no uso projetado.

Antes de começar

Para concluir as tarefas deste tutorial, certifique-se do seguinte:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Você tem um domínio do Active Directory com pelo menos um controlador de domínio. Você pode criar um domínio do Active Directory usando o Managed Microsoft AD . Como alternativa, você pode implantar um ambiente personalizado do Active Directory no Compute Engine e configurar uma zona de encaminhamento de DNS privada que encaminhe consultas de DNS para seus controladores de domínio.
  7. Você tem um usuário do Active Directory que tem permissão para ingressar computadores no domínio e pode entrar usando RDP. Se estiver usando o Microsoft AD gerenciado, você poderá usar o usuário setupadmin . Para obter mais informações sobre o provisionamento de conta de usuário do Active Directory, consulte provisionamento de conta de usuário do Active Directory
  8. Um projeto do Google Cloud e uma nuvem privada virtual (VPC) com conectividade aos controladores de domínio do Active Directory.
  9. Uma sub-rede a ser usada para as instâncias de VM do Cluster de Failover do Windows Server.
Ao concluir este tutorial, você poderá evitar a cobrança contínua excluindo os recursos criados. Para obter mais informações, consulte Limpeza .

Prepare seu projeto e rede

Para implantar seus grupos de disponibilidade Always On do SQL Server, você deve preparar seu projeto do Google Cloud e VPC para a implantação. As seções a seguir discutem como você pode fazer isso em detalhes.

Configure seu projeto e região

Para preparar seu projeto do Google Cloud para a implantação de grupos de disponibilidade Always On do SQL Server, faça o seguinte:

  1. No console do Google Cloud, abra o Cloud Shell clicando em Ativar Cloud ShellAtive o Cloud Shell. botão.

    Acesse o console do Google Cloud

  2. Inicialize as seguintes variáveis.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Substitua o seguinte:

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

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do seu projeto do Google Cloud.

  4. Defina sua região padrão.

    gcloud config set compute/region REGION
    

    Substitua REGION pelo ID da região na qual você deseja implantar.

Crie regras de firewall

Para permitir que os clientes se conectem ao SQL Server e à comunicação entre os nós do cluster, você precisa criar várias regras de firewall. Você pode usar tags de rede para simplificar a criação dessas regras de firewall, da seguinte maneira:

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

Para criar regras de firewall que usam essas tags de rede, siga as seguintes etapas:

  1. Retorne à sessão existente do Cloud Shell.
  2. Crie regras de firewall para permitir o tráfego entre nós do cluster.

    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
    

Criar instâncias de VM

Crie e 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 SQL Server, enquanto o outro nó hospeda a réplica secundária. As duas instâncias de VM devem:

  • estar localizados na mesma região para que possam ser acessados ​​por um Network Load Balancer de passagem interna.
  • ter o Cluster de Failover do Windows Server e o SQL Server instalados.
  • ter o suporte WSFC do Compute Engine ativado.

Você usa uma imagem premium do SQL Server que tem o SQL Server 2022 pré-instalado.

Para fornecer um voto de desempate e atingir um quórum para o cenário de failover, implemente uma terceira VM que sirva como testemunha de compartilhamento de arquivos usando as seguintes etapas:

  1. Retorne à sessão existente do Cloud Shell.
  2. Crie um script especializado para os nós do WSFC. Este script instala os recursos necessários do Windows e cria regras de firewall para WSFC e 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 WSFC health check" dir=in action=allow protocol=TCP localport=59998
    
    # 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 de cluster, anexe um disco de dados adicional e habilite o cluster de failover do Windows Server definindo a chave de metadados enable-wsfc como true :

    REGION=$(gcloud config get-value compute/region)
    ZONE1=ZONE1
    ZONE2=ZONE2
    ZONE3=ZONE3
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $ZONE1 \
      --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 $ZONE2 \
      --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 $ZONE3 \
      --machine-type e2-medium \
      --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"
    

    Substitua ZONE1 , ZONE2 , ZONE3 com base nas zonas que você está usando.

  4. Para associar 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 alguns minutos até ver a saída Instance setup finished e pressione Ctrl+C. Neste ponto, a instância da 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 no botão Iniciar (ou pressione Win+X ) e clique em Windows PowerShell (Admin) .

    5. Confirme o prompt de elevação clicando em Sim .

    6. Junte o computador ao domínio do Active Directory e reinicie.

      Add-Computer -Domain DOMAIN -Restart
      

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

    7. Insira as credenciais de uma conta que tenha permissões para ingressar uma VM no domínio

      Aguarde a reinicialização da VM. Agora você ingressou a instância de VM no Active Directory.

Reservar endereços IP estáticos

Agora você reserva dois endereços IP estáticos em sua VPC. Um endereço IP é usado como endereço IP do cluster WSFC padrão, o outro serve como IP estático para o ouvinte do grupo de disponibilidade do SQL Server.

Em um cluster WSFC, o endereço IP do cluster serve principalmente para fins administrativos e para acessar recursos do cluster. Esse endereço IP virtual é atribuído ao próprio cluster, permitindo que os administradores gerenciem o cluster e executem tarefas como definir configurações do cluster, monitorar a integridade dos nós e gerenciar processos de failover.

No contexto do grupo de disponibilidade do SQL Server, um ouvinte é um VNN (nome de rede virtual) e um endereço IP que permite que os clientes se conectem ao grupo de disponibilidade sem precisar saber qual servidor específico é o nó primário.

Um balanceador de carga interno precisa de um endereço IP interno para rotear com eficiência o tráfego interno e dar suporte à alta disponibilidade e ao balanceamento de carga no contexto de um cluster WSFC. O balanceador de carga interno garante que as solicitações sejam sempre direcionadas para a réplica primária atual do cluster. Durante eventos de failover, o balanceador de carga detecta alterações na réplica primária e redireciona as conexões do cliente para o novo primário sem exigir intervenção manual, minimizando o tempo de inatividade e garantindo a disponibilidade contínua dos serviços de banco de dados.

No contexto de um WSFC com grupos de disponibilidade Always On do SQL Server, os endereços IP estáticos internos reservados para o endereço IP do cluster WSFC padrão e o ouvinte do grupo de disponibilidade também são usados ​​pelos balanceadores de carga internos associados.

  1. Para reservar dois endereços IP estáticos em sua VPC, siga as etapas a seguir.

    gcloud compute addresses create wsfc-cluster-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_IP=$(gcloud compute addresses describe wsfc-cluster-ip \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "cluster IP: $CLUSTER_IP"
    
  2. Substitua o endereço IP do cluster na variável CLUSTER_IP , você precisará dele posteriormente para especificá-lo como o IP do cluster:

    CLUSTER_IP=CLUSTER_IP
    
  3. Reserve outro IP estático para o ouvinte do grupo de disponibilidade e capture o endereço em uma nova variável de ambiente chamada LISTENER_IP .

    gcloud compute addresses create wsfc-listener-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LISTENER_IP=$(gcloud compute addresses describe wsfc-listener-ip \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Listener IP: $LISTENER_IP"
    
  4. Substitua o endereço IP reservado do balanceador de carga como a variável LISTENER_IP . Você precisará dele mais tarde para configurar seu grupo de disponibilidade.

    LISTENER_IP=LISTENER_IP
    

Seu projeto e VPC agora estão prontos para a implantação do cluster de failover do Windows Server e do SQL Server.

Implantando o cluster de failover

Agora você pode usar as instâncias de VM para implantar um cluster de failover do Windows Server e um SQL Server. As seções a seguir discutem como você pode fazer isso em detalhes.

Preparando o SQL Server

Crie uma nova conta de usuário no Active Directory para SQL Server usando as etapas a seguir.

  1. Conecte-se ao node-1 usando a Área de Trabalho Remota . Faça login com sua conta de usuário de domínio.
  2. Clique com o botão direito no botão Iniciar (ou pressione Win+X ) e clique em Windows PowerShell (Admin) .
  3. Confirme o prompt de elevação clicando em Sim .
  4. Crie uma conta de usuário de domínio para o SQL Server 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 , use as seguintes etapas:

  1. Abra o Gerenciador de configuração do SQL Server .
  2. No painel de navegação, selecione SQL Server Services .
  3. Na lista de serviços, clique com o botão direito em SQL Server (MSSQLSERVER) e selecione Propriedades .
  4. Em Fazer logon como , altere a conta da seguinte maneira:

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

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

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

Criar compartilhamentos de arquivos

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

  1. Conecte-se à witness usando a Área de Trabalho Remota . Faça login com sua conta de usuário de domínio.
  2. Clique com o botão direito no botão Iniciar (ou pressione Win+X ) e clique em Windows PowerShell (Admin) .
  3. Confirme o prompt de elevação clicando em Sim .
  4. Crie um compartilhamento de arquivos testemunha e conceda a você e aos dois nós do cluster 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
    

Crie o cluster de failover

Para criar o cluster de failover, siga as seguintes etapas:

  1. Retorne à sessão da Área de Trabalho Remota em node-1 .
  2. Clique com o botão direito no botão Iniciar (ou pressione Win+X ) e clique em Windows PowerShell (Admin) .
  3. Confirme o prompt de elevação clicando em Sim .
  4. Crie um novo cluster.

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

    Substitua CLUSTER_IP pelo endereço IP do cluster criado anteriormente.

  5. Retorne à sessão do PowerShell na witness e conceda ao objeto de computador virtual do cluster permissão para acessar o 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 no node-1 e configure o cluster para usar o compartilhamento de arquivos na witness como um quórum de cluster.

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

    Test-Cluster
    

    Você poderá ver os seguintes 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).
    

    Você também pode iniciar o snap-in MMC do Gerenciador de Cluster de Failover para revisar a integridade do cluster executando cluadmin.msc .

  8. Se você estiver usando o Managed AD, adicione a conta de computador usada pelo cluster do Windows ao grupo Contas de Ingresso no Domínio do Serviço de Nuvem para que ele possa ingressar computadores no domínio.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Habilite grupos de disponibilidade Always On em ambos os nós.

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

Criando um grupo de disponibilidade

Agora você cria um banco de dados de amostra bookshelf , inclui-o em um novo grupo de disponibilidade chamado bookshelf-ag e configura a alta disponibilidade.

Criando 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. Retorne à sessão da Área de Trabalho Remota em node-1 .
  2. Abra o SQL Server Management Studio .
  3. Na caixa de diálogo Conectar 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 o seguinte 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.

Configurar alta disponibilidade

Agora você pode configurar a alta disponibilidade para o grupo de disponibilidade usando T-SQL ou SQL Server Management Studio.

Usando T-SQL

Para configurar a alta disponibilidade para o grupo de disponibilidade usando T-SQL, siga as etapas a seguir:

  1. Conecte-se ao node-1 e execute o script a seguir para criar o grupo de disponibilidade bookshelf-ag.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    USE [bookshelf];
    CREATE USER [NET_DOMAIN\sql_server] FOR LOGIN [NET_DOMAIN\sql_server];
    GO
    
    USE [master];
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  2. Conecte-se ao node-2 e execute o script a seguir.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  3. No node-1 e execute o script a seguir para criar o grupo de disponibilidade bookshelf-ag .

    USE master;
    GO
    
    CREATE AVAILABILITY GROUP [bookshelf-ag]
    WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
    CLUSTER_TYPE = WSFC,
    DB_FAILOVER = ON
    )
    FOR DATABASE [bookshelf]
    REPLICA ON
      N'node-1' WITH (
          ENDPOINT_URL = 'TCP://node-1:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      ),
      N'node-2' WITH (
          ENDPOINT_URL = 'TCP://node-2:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      );
    GO
    
  4. No script a seguir, substitua LISTENER_IP pelo endereço IP que você reservou anteriormente para o balanceador de carga interno e execute-o.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag]
    ADD LISTENER N'bookshelf' (
    WITH IP (
      (N'LISTENER_IP', N'255.255.255.0')
    ),
    PORT = 1433);
    GO
    
  5. Conecte-se ao node-2 e execute o script a seguir para ingressar a réplica secundária no grupo de disponibilidade e habilitar a propagação automática.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  6. Verifique o status do grupo de disponibilidade.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    Você deve ver synchronization_health_desc como HEALTHY

Usando o SQL Server Management Studio

Para configurar a alta disponibilidade para o grupo de disponibilidade usando o SQL Server Management Studio, use as seguintes etapas:

  1. Na janela Object Explorer , clique com o botão direito em Always On High Availability e selecione New Availability Group Wizard .
  2. Na página Especificar Opções , defina o nome do grupo de disponibilidade como bookshelf-ag e selecione Próximo .
  3. Na página Selecionar bancos de dados , selecione o banco de dados bookshelf e selecione Próximo .
  4. Na página Especificar Réplicas , selecione a guia Réplicas .

    1. Selecione Adicionar réplica .
    2. Na caixa de diálogo Conectar 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 confirmação síncrona para ambas as instâncias.

    4. Defina o failover automático como Habilitado para ambas as instâncias.

    5. Selecione a guia Ouvinte

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

        • Nome DNS do ouvinte : bookshelf
        • Porto : 1433
        • Modo de rede : IP estático
      3. Selecione Adicionar e insira o endereço IP do listener ( LISTENER_IP ) que você reservou anteriormente para o balanceador de carga interno. Em seguida, selecione OK .

    6. Selecione Próximo .

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

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

  7. Na página Resumo , selecione Concluir .

  8. Na página Resultados , selecione Fechar .

Crie balanceadores de carga internos e verificações de integridade

O IP do cluster representa um único ponto final para o cluster de failover do Windows. Você o usa para fins administrativos e para gerenciar recursos de cluster. O IP do cluster sempre aponta para o nó host (ou primário) do cluster. Você implanta um balanceador de carga interno que usa uma verificação de integridade que garante que o tráfego seja direcionado para o nó host do cluster. Como as ferramentas WSFC exigem que vários protocolos estejam disponíveis para encaminhamento (ICMP, UDP e TCP), recomendamos a implantação de um balanceador de carga interno com vários protocolos que ofereçam suporte a todas as portas .

Para implantar um balanceador de carga interno, siga as seguintes etapas:

  1. Retorne à sessão existente 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 $ZONE1
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $ZONE1 \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $ZONE2
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $ZONE2 \
      --instances node-2
    
  3. Crie uma verificação de integridade para o IP do cluster que o balanceador de carga pode usar para determinar qual é o nó ativo da perspectiva do cluster do Windows. A porta padrão pela qual o agente convidado do Compute Engine responde às verificações de integridade é 59998 . A verificação de integridade fornece o endereço IP do cluster na solicitação e espera 1 como resposta retornada do nó ativo.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --request=$CLUSTER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=2 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    
  4. Crie um serviço de back-end e adicione os dois grupos de instâncias existentes.

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  5. Crie o balanceador de carga interno associado ao IP do cluster.

    gcloud compute forwarding-rules create wsfc \
      --load-balancing-scheme internal \
      --address $CLUSTER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-backend
    

Para fornecer um único ponto final para clientes SQL Server que pretendam ligar-se a qualquer base de dados no seu grupo de disponibilidade bookshelf , implemente um novo equilibrador de carga interno dedicado a esse grupo de disponibilidade, utilize os seguintes passos:

  1. Crie uma verificação de integridade para o ouvinte do grupo de disponibilidade que o balanceador de carga pode usar para determinar qual é o nó primário no grupo de disponibilidade do SQL Server bookshelf .

    gcloud compute health-checks create tcp wsfc-bookshelf-healthcheck \
      --request=$LISTENER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    

    A verificação de integridade usa a mesma porta do agente convidado do Compute Engine, mas fornece na solicitação o endereço IP do listener do grupo de disponibilidade bookshelf .

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

    gcloud compute backend-services create wsfc-bookshelf-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-bookshelf-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  3. Crie o balanceador de carga interno associado ao ouvinte do grupo de disponibilidade bookshelf-ag do SQL Server.

    gcloud compute forwarding-rules create wsfc-bookshelf \
      --load-balancing-scheme internal \
      --address $LISTENER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-bookshelf-backend
    

Agora você pode se conectar ao ouvinte do grupo de disponibilidade do SQL Server usando o bookshelf de nome DNS e sua porta definida no ouvinte do grupo de disponibilidade do bookshelf. O balanceador de carga interno direciona o tráfego para o nó primário do grupo de disponibilidade de bookshelf .

Para criar vários grupos de disponibilidade em um único cluster de failover, você deve usar serviços de back-end separados e um balanceador de carga separado com sua própria verificação de integridade por grupo de disponibilidade.

Cada grupo de disponibilidade pode ter nós diferentes designados como primários e podem ser diferentes do nó host do cluster do Windows. Para vários grupos de disponibilidade, você precisa do seguinte:

  • Um endereço IP estático reservado para o ouvinte do grupo de disponibilidade usado pelo balanceador de carga interno. Reserve um endereço para cada grupo de disponibilidade.

  • Uma regra de verificação de integridade separada para cada grupo de disponibilidade. A solicitação da verificação de integridade fornece o endereço IP estático do ouvinte do grupo de disponibilidade (que também é o endereço IP reservado na etapa anterior). A verificação de integridade investiga a resposta 1 retornada pelo agente do GCE. Todas as verificações de integridade usam a porta 59998 .

  • Um serviço de back-end separado para cada grupo de disponibilidade ao qual você adiciona os dois grupos de instâncias de computação existentes. O serviço de back-end usa a verificação de integridade definida na etapa anterior.

  • Um balanceador de carga interno para cada grupo de disponibilidade do serviço de back-end criado na etapa anterior. O balanceador de carga está associado ao endereço IP estático do ouvinte do grupo de disponibilidade.

Testar o failover

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

  1. Retorne à sessão do PowerShell em witness .
  2. Execute o seguinte script.

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=tcp:bookshelf,1433;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT SERVERPROPERTY('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
    }
    

    Neste guia, usamos o nome DNS bookshelf e o valor da porta 1433 para o ouvinte do grupo de disponibilidade na definição do servidor tcp:bookshelf,1433 .

    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 no node-1 para acionar um failover.

    1. No SQL Server Management Studio , navegue até Always On High Availability > Availability Groups > bookshelf-ag (Primary) 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 nova réplica primária e se a coluna Preparação para failover indica No data loss . Em seguida, selecione Próximo .
    4. Na página Conectar-se à réplica , selecione Conectar .
    5. Na caixa de diálogo Conectar ao servidor , verifique se o nome do servidor é node-2 e clique em Conectar .
    6. Selecione Próximo e depois Concluir .
    7. Na página Resultados , verifique se o failover foi bem-sucedido.
  4. Retorne à sessão do PowerShell em witness .

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

  6. Pare o script pressionando Ctrl+C .

Limpar

Depois de concluir o tutorial, você poderá limpar os recursos criados para que eles parem de usar a cota e de incorrer em cobranças. As seções a seguir descrevem como excluir ou desativar esses recursos.

Excluindo o projeto

A maneira mais fácil de eliminar o faturamento é excluir o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

O que vem a seguir