Se você executa várias instâncias do SQL Server Enterprise no Compute Engine, pode configurá-las para usar o Windows Server Failover Clustering e os grupos de disponibilidade AlwaysOn do SQL Server para suporte a alta disponibilidade e recuperação de desastres.
Este tutorial mostra como criar um cluster de instâncias com SQL Server Enterprise, com as definições de rede necessárias, e configurá-las para usar o Windows Server Failover Clustering e os SQL Server AlwaysOn Availability Groups. É possível usar instâncias do SQL Server Enterprise criadas com base nas imagens públicas do SQL Server ou no Microsoft License Mobility.
Pré-requisitos
Para fazer este tutorial, é necessário conhecer os seguintes items:
- Redes VPC e Regras de firewall do Compute Engine.
- Criação de instâncias do Windows no Compute Engine
- Configuração do Active Directory no Compute Engine
Como configurar a rede VPC
Crie uma rede VPC de modo personalizado com três sub-redes. Em seguida, defina as regras de firewall para permitir o tráfego entre máquinas virtuais internas (VMs). É possível usar uma rede existente para essa tarefa, se necessário, mas recomendamos isolar sistemas em redes e sub-redes diferentes. Este tutorial espera que você crie a seguinte configuração de rede e sub-redes VPC:
Crie uma rede VPC personalizada.
gcloud compute networks create wsfcnet --subnet-mode custom
Adicione três sub-redes à rede VPC.
gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \ --region us-central1 --range 10.0.0.0/24
gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \ --region us-central1 --range 10.1.0.0/24
gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \ --region us-central1 --range 10.2.0.0/24
Crie uma regra de firewall para permitir o tráfego entre as instâncias nos endereços IP internos na nova rede VPC.
gcloud compute firewall-rules create allow-internal-ports \ --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \ --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
Crie uma regra de firewall para permitir o RDP na porta
3389
na rede VPC.gcloud compute firewall-rules create allow-rdp --network wsfcnet \ --allow tcp:3389 --source-ranges 0.0.0.0/0
Como criar um controlador de domínio do Windows
Crie um controlador de domínio do Windows. Para este tutorial, o domínio é dbeng.com
e o nome do controlador de domínio é dc-windows
no endereço IP 10.2.0.100
. O controlador de domínio está usando a sub-rede wsfcsubnet3
.
Crie uma instância para usar como controlador de domínio. Para este tutorial, especifique um tipo de máquina
n1-standard-2
e a imagem mais recente da família de imagenswindows-2016
.gcloud compute instances create dc-windows --machine-type n1-standard-2 \ --boot-disk-type pd-ssd --image-project windows-cloud \ --image-family windows-2016 --boot-disk-size 200GB \ --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
Crie uma senha para se conectar à VM do controlador de domínio usando uma conta local. Anote o nome de usuário e a senha para uso futuro.
Usando o RDP, conecte-se à VM do controlador de domínio com o nome de usuário e a senha da conta local.
Na instância, execute o PowerShell como administrador para abrir o terminal PowerShell.
Configure um usuário administrador.
Execute o comando a seguir e digite uma senha para usar com a conta de administrador.
PS C:\> $Password = Read-Host -AsSecureString
Anote a senha que você digitou.
Defina a senha da conta de administrador.
PS C:\> Set-LocalUser -Name Administrator -Password $Password
Ative a conta de administrador.
PS C:\> Enable-LocalUser -Name Administrator
Configure as variáveis a seguir:
PS C:\> $DomainName = "dbeng.com";
PS C:\> $DomainMode = "Win2012R2";
PS C:\> $ForestMode = "Win2012R2";
PS C:\> $DatabasePath = "C:\Windows\NTDS";
PS C:\> $LogPath = "C:\Windows\NTDS";
PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
Instale as seguintes ferramentas do Active Directory:
PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
Se a instância não reiniciar automaticamente depois de criar o domínio, reinicie-a manualmente.
Após a instância ser reiniciada, reconecte-se usando a conta
Administrator
com o nome de domínio recém-criado (dbeng.com
, neste tutorial).Crie uma conta de domínio, chamada
sql_service
, em que você executará o SQL Server:Digite uma senha a ser usada com a conta de serviço do SQL Server.
PS C:> $Password = Read-Host -AsSecureString
Anote a senha que você digitou. Use essa senha para a conta de serviço do SQL Server.
Crie a conta de serviço do SQL Server e defina a senha.
PS C:\> New-LocalUser -Name "sql_service" -Description "SQL Agent and SQL Admin account." -Password $Password
O controlador de domínio está configurado e é possível se desconectar da
instância dc-windows
. Em seguida,
crie as instâncias para o grupo de disponibilidade.
Como criar instâncias para o grupo de disponibilidade
Crie instâncias do SQL Server para um grupo de disponibilidade. Existem limitações de tamanho para o nome desse grupo.
Essas instâncias usam as seguintes configurações de endereço IP com IPs de alias:
- Nome da instância:
cluster-sql1
- Endereço IP interno:
10.0.0.4
- Nome do cluster de failover do Windows:
cluster-ag
- Endereço IP do cluster de failover:
10.0.0.5
(IP do alias) - Nome do grupo de disponibilidade:
cl-listener
- Endereço do listener do grupo de disponibilidade:
10.0.0.6
(IP do alias)
- Endereço IP interno:
- Nome da instância:
cluster-sql2
- Endereço IP interno:
10.1.0.4
- Nome do cluster de failover do Windows:
cluster-ag
- Endereço IP do cluster de failover:
10.1.0.5
(IP do alias) - Nome do grupo de disponibilidade:
cl-listener
- Endereço do listener do grupo de disponibilidade:
10.1.0.6
(IP do alias)
- Endereço IP interno:
Crie as instâncias do SQL Server usando um dos seguintes métodos:
- Crie uma instância do SQL Server usando uma imagem pública
- Leve suas licenças para o Compute Engine usando a mobilidade de licenças por meio do Software Assurance e aplique-as nas imagens públicas do Windows Server.
Imagens públicas do SQL Server
Crie duas instâncias de imagens públicas do SQL Server. Para esse exemplo,
nomeie as instâncias cluster-sql1
e
cluster-sql2
. Especifique um tamanho do disco de inicialização 200GB
e um tipo de máquina n1-highmem-4
. As instâncias do SQL Server
normalmente exigem mais recursos de computação do que a instância do controlador
de domínio. Se for preciso mais recursos de computação posteriormente, é possível
alterar
o tipo de máquina
dessas instâncias. Se você precisar de mais espaço de armazenamento,
adicione um disco ou redimensione
um disco de inicialização permanente. Em grupos de disponibilidade maiores, é possível
criar várias instâncias.
Além disso, inclua a
sinalização --metadata sysprep-specialize-script-ps1
para executar um
comando do PowerShell durante a criação da instância que instala o
recurso Failover-Clustering
.
Para este exemplo, crie duas instâncias usando os seguintes comandos:
gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \ --zone us-central1-a \ --network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \ --can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \ --zone us-central1-f \ --network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \ --can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
Para grupos de disponibilidade maiores, é possível criar instâncias adicionais com os endereços IP apropriados.
Licenças existentes
Se você quiser levar suas próprias licenças do SQL Server Enterprise
com base na
License Mobility
da Microsoft por meio da garantia de software, crie uma imagem do Windows
com --guestOSFeatures
ativado. Depois, instale
o SQL Server Enterprise manualmente.
Observação: esse método de configuração de cluster requer a
opção --guestOSFeatures
, que é um recurso Beta no
comando gcloud
beta compute images create
.
- Crie uma instância do Windows Server.
- Na instância, atualize todos os componentes para a versão mais recente.
- Defina
o estado de exclusão automática como
false
para o disco de inicialização dessa instância. - Exclua a instância.
- Crie um disco temporário com uma imagem padrão do Windows Server.
- No novo disco, crie uma imagem personalizada do Windows Server com
MULTI_IP_SUBNET
ativado no parâmetroguestOSFeatures
. - Depois que a imagem for criada, exclua o disco temporário.
- Use a imagem personalizada para criar as novas instâncias do SQL Server para o
grupo de disponibilidade. Instâncias do SQL Server normalmente exigem mais recursos de
computação do que a instância do controlador de domínio. Portanto, especifique
pelo menos um tipo de máquina
n1-highmem-4
. Se precisar de mais recursos de computação posteriormente, é possível alterar o tipo de máquina dessas instâncias. Se for preciso espaço de armazenamento adicional, adicione um disco ou redimensione o disco de inicialização permanente. Em grupos de disponibilidade maiores, é possível criar várias instâncias. Para este exemplo, crie duas instâncias: - Em uma das instâncias, instale o SQL Server Enterprise manualmente.
gcloud compute disks create windows-2012-disk-new --size 200 \ --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \ --image-project windows-cloud
gcloud beta compute images create windows-server-2012-r2-dc-new \ --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \ --guest-os-features MULTI_IP_SUBNET
gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image windows-server-2012-r2-dc-new --zone us-central1-a \ --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \ --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image windows-server-2012-r2-dc-new --zone us-central1-f \ --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \ --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
Depois de criar as instâncias, configure-as para que possam funcionar como um grupo de disponibilidade.
- Conecte-se às duas instâncias usando conexões RDP.
Altere as duas instâncias para que usem endereços IP estáticos e configure a máscara de rede como
255.255.0.0
. Abra um terminal do PowerShell como administrador e defina os endereços IP estáticos como "estático". Esses comandos podem encerrar sua conexão de área de trabalho remota e, se isso acontecer, você precisará se conectar novamente:Instância 1:
PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
Instância 2:
PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
Adicione as duas instâncias ao domínio do Windows. Abra um PowerShell como administrador e execute o seguinte comando
Add-Computer
nas duas instâncias:PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
O comando solicita suas credenciais. Quando o comando terminar de executar, a instância reiniciará.
Reconecte-se às instâncias usando o RDP para definir as contas de serviço do SQL Server:
- Abra o SQL Server Configuration Manager.
- Selecione a guia Serviços do SQL Server, clique com o botão direito do mouse em SQL Server e em Propriedades.
- Defina a conta e a senha de
sql_service
.
As instâncias agora estão criadas para o grupo de disponibilidade. Em seguida, configure o Failover Cluster Manager.
Como configurar o Failover Cluster Manager
Ative o cluster de failover nas instâncias no grupo de disponibilidade e configure uma instância para agir como Failover Cluster Manager. Ative "AlwaysOn High Availability" em todas as instâncias no grupo.
Reconecte-se às instâncias usando o RDP, mas use as credenciais de administrador do domínio. Para este exemplo, o domínio é
dbeng
e a conta de administrador éAdministrator
. Se estiver usando o Chrome RDP para Google Cloud, no menu Opções, na lista Certificados, exclua os certificados RDP existentes para esses endereços.Selecione uma das instâncias e configure-a para executar como Failover Cluster Manager.
Abra o PowerShell como administrador e defina variáveis que reflitam o ambiente do cluster. Para este exemplo, configure as seguintes variáveis:
PS C:\> $node1 = "cluster-sql1"
PS C:\> $node2 = "cluster-sql2"
PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
Crie o cluster de failover:
PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
Ative a Alta disponibilidade AlwaysOn para os dois nós do cluster:
PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
Na instância secundária, em que não há Cluster Manager, crie uma pasta de backup em
C:\SQLBackup
e compartilhe-a como\\cluster-sql2\SQLBackup
para a contasql_service
para leitura e gravação.Nas duas instâncias, crie duas pastas em
C:\SQLData
eC:\SQLLog
. Use essas pastas para os dados do banco de dados e os arquivos de registro.
O Failover Cluster Manager está pronto. Em seguida, crie o grupo de disponibilidade.
Criar o grupo de disponibilidade
Crie um banco de dados de teste e configure-o para trabalhar com um novo grupo de disponibilidade. Como alternativa, é possível especificar um banco de dados existente para o grupo de disponibilidade.
Se não tiver um banco de dados já configurado, crie um banco de dados de teste. Na instância do Cluster Manager, execute o SQL Server Management Studio e crie um banco de dados de teste com o seguinte comando SQL:
CREATE DATABASE TestDB ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB ) LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB ) GO USE [TestDB] Exec dbo.sp_changedbowner @loginame = 'sa', @map = false; ALTER DATABASE [TestDB] SET RECOVERY FULL; GO BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT GO
Na instância do Cluster Manager, execute o SQL Server Management Studio.
Clique com o botão direito do mouse em Alta disponibilidade AlwaysOn e selecione Assistente do novo grupo de disponibilidade.
Na página Specify Name, configure um nome para o grupo de disponibilidade. Para este exemplo, especifique
cluster-ag
.Na página Select Databases, especifique o banco de dados que quer replicar. Para este exemplo, especifique o banco de dados
TestDB
.Na página Specify Replicas, configure as duas instâncias como réplicas, com failover automático e confirmação síncrona.
Na página Select Data Synchronization, especifique o compartilhamento de rede para manter o backup do banco de dados para a sincronização inicial. Para este exemplo, especifique
\\cluster-sql2\SQLBackup
.A página Validation gera uma advertência porque não há listener, mas você pode ignorá-la.
Depois que o assistente terminar, clique com o botão direito do mouse no novo grupo de disponibilidade e selecione Add Listener.
Especifique os parâmetros para este ouvinte:
- Nome DNS do listener:
cluster-listener
. - Porta de rede:
1433
- Modo de rede:
Static IP
.
- Nome DNS do listener:
Adicione dois campos de sub-rede e endereço IP. Para este exemplo, use os seguintes pares de sub-rede e endereço IP:
10.0.0.0/16
e10.0.0.6
10.1.0.0/16
e10.1.0.6
Agora é possível se conectar ao SQL Server usando cluster-listener
como o nome do banco de dados do SQL Server em vez do nome das instâncias. Essa conexão aponta para a instância que está ativa no momento.
A seguir
- Se as instâncias exigirem mais recursos de computação, altere o tipo de máquina da instância.
- Se for preciso mais espaço de armazenamento, adicione um disco ou redimensione o disco permanente de inicialização.