Os grupos de disponibilidade (AG) 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 |
Armazenamento | 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ê vai aprender a implantar grupos de disponibilidade AlwaysOn no modo de commit síncrono para implementar alta disponibilidade em um ou mais bancos de dados.
Na configuração, você vai criar três instâncias de VM. Duas instâncias de VM, node-1
e
node-2
, atuam como nós de 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 são distribuídas em três zonas e compartilham uma
sub-rede comum.
Usando um grupo de disponibilidade AlwaysOn 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 em caso de failover para notificar o equipamento de rede sobre uma mudança de endereço IP. No entanto, o Google Cloud ignora os avisos de ARP. Consequentemente, você precisa implementar uma das duas seguintes opções:
- "Balanceador de carga interno. Para mais informações, consulte Como executar o clustering de failover do Windows Server.
- Nome de rede distribuída (DNN). Para mais informações, consulte Configurar um listener de DNN para um grupo de disponibilidade.
O artigo pressupõe que você já implantou o Active Directory no Google Cloud e tem conhecimentos básicos sobre o SQL Server, o Active Directory e o Compute Engine.
Objetivos
- Implantar um WSFC com duas instâncias de VM do SQL Server e uma terceira que atue como uma testemunha do compartilhamento de arquivos.
- Criar um grupo de disponibilidade com commit síncrono.
- Configurar um balanceador de carga ou um nome de rede distribuída (DNN) para rotear o tráfego para o grupo de disponibilidade com o SQL Server.
- Verificar se a configuração funciona simulando um failover.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- Compute Engine
- Cloud Load Balancing (não necessário com uma configuração de DNN)
Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto.
Antes de começar
Para concluir este guia, você precisa do seguinte:
- Um domínio do Active Directory atual com pelo menos um controlador de domínio. Crie um domínio do Active Directory usando o Microsoft AD gerenciado. Se preferir, implante um ambiente personalizado do Active Directory no Compute Engine e configure uma zona de encaminhamento de DNS particular que encaminhe consultas DNS aos controladores de domínio.
- Um usuário do Active Directory que tenha permissão para associar computadores ao domínio e pode fazer login usando o RDP. Se você estiver usando o Microsoft AD gerenciado, utilize o usuário
setupadmin
. - Um projeto do Google Cloud e uma VPC com conectividade aos controladores de domínio do Active Directory.
- Uma sub-rede a ser usada para as instâncias de VM do WSFC.
Para concluir o guia, você também precisa de um projeto do Google Cloud:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
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:
No Console do Google Cloud, abra o Cloud Shell clicando no botão Ativar o Cloud Shell .
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.
Defina o ID do projeto padrão:
gcloud config set project
PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto do Google Cloud.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:
- Volte para a sessão atual do Cloud Shell.
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
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
Criar 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 na mesma região para que possam ser acessadas por um balanceador de carga de rede de passagem interno (não aplicável ao DNN);
- ter o WSFC e o SQL Server instalados;
- ter o suporte ao WSFC do Compute Engine ativado;
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.
- Volte para a sessão atual do Cloud Shell.
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
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
comotrue
: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"
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:
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.Crie um nome de usuário e uma senha para a instância de VM.
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.
Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
Confirme a elevação do prompt clicando em Sim.
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.
Reserve outro endereço IP estático a ser 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.
Reserve outro 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.
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:
- Conecte-se a
node-1
usando a Área de trabalho remota. Faça login com a conta de usuário do domínio. - Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
- Confirme a elevação do prompt clicando em Sim.
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
:
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:
$OLD_NAME = Invoke-Sqlcmd -Query " select @@SERVERNAME; GO" | ConvertTo-Csv | SELECT -Skip 2 $OLD_NAME = $OLD_NAME.Replace('"', '') Invoke-Sqlcmd -Query " sp_dropserver '$OLD_NAME'; GO sp_addserver '$env:computername', local; GO" Restart-Service -Name MSSQLSERVER
Abra o SQL Server Configuration Manager.
No painel de navegação, selecione Serviços do SQL Server
Na lista de serviços, clique com o botão direito do mouse em SQL Server (MSSQLSERVER) e selecione Propriedades.
Em Fazer logon como, altere a conta:
- Nome da conta:
DOMAIN\sql_server
em queDOMAIN
é o nome do NetBIOS do seu domínio do Active Directory - Senha: digite a senha que você escolheu anteriormente.
- Nome da conta:
Clique em OK.
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:
- Conecte-se a
witness
usando a Área de trabalho remota. Faça login com a conta de usuário do domínio. - Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
- Confirme a elevação do prompt clicando em Sim.
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$
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.
- Volte para a sessão na Área de trabalho remota em
node-1
. - Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
- Confirme a elevação do prompt clicando em Sim.
Crie um novo cluster:
- Para a configuração do balanceador de carga
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.- Para configuração de DNN
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -ManagementPointNetworkType Distributed
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
Retorne à sessão do PowerShell em
node-1
e configure o cluster para usar o compartilhamento de arquivos emwitness
como um quórum de cluster:Set-ClusterQuorum -FileShareWitness \\witness\QWitness
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
.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$
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.
- Volte para a sessão na Área de trabalho remota em
node-1
. - Abra o SQL Server Management Studio.
- Na caixa de diálogo Conectar-se ao servidor, verifique se o nome do servidor está definido como
NODE-1
e selecione Conectar. - No menu, selecione Arquivo > Novo > Consulta com conexão atual.
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
.Selecione Executar para executar o script SQL.
Como configurar alta disponibilidade
- Na janela Pesquisador de objetos, clique com o botão direito do mouse em Alta disponibilidade AlwaysOn e selecione Assistente de novo grupo de disponibilidade.
- Na página Especificar opções, defina o nome do grupo de disponibilidade como
bookshelf-ag
e selecione Avançar. - Na página Selecionar bancos de dados, selecione o banco de dados
bookshelf
e, em seguida, Avançar. Na página Especificar réplicas, selecione a guia Réplicas:
- Selecione Adicionar réplica.
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
enode-2
.Defina o Modo de disponibilidade como Commit síncrono em ambas as instâncias.
Defina Failover automático como Ativado nas duas instâncias.
Selecione a guia Listener. **
- Selecione Criar um ouvinte do grupo de disponibilidade.
Insira as seguintes configurações:
- Nome DNS do ouvinte:
bookshelf
- Porta:
1433
- Modo de rede: IP estático
- Nome DNS do ouvinte:
Selecione Adicionar e insira o endereço IP do balanceador de carga que você criou anteriormente. Em seguida, selecione OK.
Selecione Próxima.
Na página Selecionar Sincronização de Dados, selecione Propagação automática.
Na página Validação, confirme se todas as verificações foram bem-sucedidas.
Na página Resumo, selecione Concluir.
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:
- Volte para a sessão do PowerShell em
node-1
. Inicialize uma variável com o endereço IP do balanceador de carga.
$LoadBalancerIP = '
IP_ADDRESS
'Substitua
IP_ADDRESS
pelo endereço IP dowsfc
que você reservou anteriormente.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; }
Reinicie o recurso do cluster:
$SqlIpAddress | Stop-ClusterResource $SqlIpAddress | Start-ClusterResource
criar 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
- Volte para a sessão atual do Cloud Shell.
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
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 comoProbePort
para o ouvinte do grupo de disponibilidade.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
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:
Um endereço IP interno reservado (um para cada grupo de disponibilidade) a ser usado para o listener e o balanceador de carga interno.
Um balanceador de carga separado (um para cada grupo de disponibilidade) com o próprio endereço IP reservado na etapa anterior.
Uma porta de sondagem separada, como 59997, 59998 e 59999, para cada grupo de disponibilidade e uma regra de firewall para permitir o tráfego nessas portas.
Uma regra de verificação de integridade separada para cada grupo de disponibilidade que use as respectivas portas de sondagem.
Configurar um listener de DNN para um grupo de disponibilidade
Assim como na configuração do balanceamento de carga interno, o listener de DNN funciona como um endpoint único para clientes do SQL Server.
- Volte para a sessão do PowerShell em
node-1
. Execute o script a seguir para criar um listener de DNN.
$Ag='bookshelf-ag' $Port='
DNN_PORT
' $Dns='DNN_NAME
' # create the DNN resource with the port as the resource name Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag # set the DNS name of the DNN resource Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns # start the DNN resource Start-ClusterResource -Name $Port # add the Dependency from availability group resource to the DNN resource Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]" #bounce the AG resource Stop-ClusterResource -Name $Ag Start-ClusterResource -Name $AgSubstitua
DNN_PORT
pela porta do listener de DNN. A porta do listener de DNN precisa ser configurada com uma porta exclusiva. Para mais informações, consulte Considerações sobre portas.Substitua
DNN_NAME
pelo nome do listener de DNN.Crie regras de firewall para a porta do listener de DNN em
node-1
enode-2
.netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=
DNN_PORT
Como testar o failover
Agora você está pronto para testar se o failover funciona conforme esperado:
- Volte para a sessão do PowerShell em
witness
. Execute o script a seguir:
while ($True){ $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=
LISTENER
;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 }Substitua
LISTENER
pelo nome DNS do listener ou pelo listener de DNN e pela porta do grupo de disponibilidade.A cada dois segundos, o script se conecta ao SQL Server usando o listener do grupo de disponibilidade ou o listener de DNN e consulta o nome do servidor.
Deixe o script em execução.
Retorne à sessão da Área de trabalho remota em
node-1
para acionar um failover:- No SQL Server Management Studio, acesse Alta disponibilidade AlwaysOn > Grupos de disponibilidade > bookshelf-ag (primário) e clique com o botão direito do mouse no nó.
- Selecione Failover.
- 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 indicaNo data loss
. Depois, selecione Avançar. - Na página Conectar à réplica, selecione Conectar.
- Na caixa de diálogo Conectar-se ao servidor, verifique se o nome do servidor é
node-2
e clique em Conectar. - Selecione Avançar e Concluir.
- Na página Resultados, verifique se o failover foi bem-sucedido.
Volte para a sessão do PowerShell em
witness
.Observe a saída do script em execução e veja que o nome do servidor mudou de
node-1
paranode-2
como resultado do failover.Para interromper o script, pressione
Ctrl+C
.
Limpar
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.