Simplificando o AG – Read-Scale

Resolvi fazer um post sobre AG, mas não um post sobre AG que nem a gente já vê aos montes, mas falar sobre AG “Read-Scale”, já ouviu falar?

No AG “tradicional” você necessita configurar um cluster. Para configurar um cluster, você necessita de uns conhecimentos a mais de Windows, principalmente se você for configurar em seu ambiente de teste (já que é você por você mesmo). Geralmente você não tem um servidor de domínio em seu ambiente de teste e mesmo que configure este servidor é um passo a mais para o objetivo final.

“Mas Nane, tem o Cluster Workgroup”. Sim, tem o AG Workgroup, mas caímos mais uma vez na complexidade de criar um cluster Workgroup, antes de configurar o AG (seria um bom post também, quem sabe daqui algum tempo).

A ideia deste post é para você, DBA, DBA Junior que nunca mexeu em um AG, mas já quer aprender a ao menos da uma manutenção, conseguir montar um Read-Scale em seu ambiente de teste e sair testando e realizar comandos como: Adicionar base, tirar base, fazer failover. Isso tudo sem precisar configurar um Cluster.

 Resumindo: Vamos simplificar para que você possa montar em seu ambiente de teste.

Mas já aproveitando, vamos conhecer um pouco o Read-Scale?

  • É possível criar o Read-Scale a partir da versão 2017;
  • Ele veio como uma solução de DR e para substituir o Database Mirroring;
  • É uma opção também para clientes que não tem domínio, mas necessitam de um AG;
  • O servidor secundário pode ficar disponível para leitura na versão Enterprise;
  • Pode ser configurado como síncrono ou assíncrono;
  • Não tem Failover automático, somente manual;
  • Não é possível criar um listener para se beneficiar da Alta Disponibilidade (já que é necessário um cluster);
  • Pode ser criar uma “rota read only

Tutorial

Antes de começar, segue configuração do ambiente:

Aqui vamos precisar de 2 vm’s

NomeIPNome Instância
Node1192.168.10.10Inode1
Node2192.168.10.11Inode2
  1. Como em meu ambiente não tem AD e nem DNS, primeiramente vamos realizar alguns ajustes no Windows, como configurar o arquivo Hosts:

C:\Windows\System32\drivers\etc\hosts

Acrescentar as seguintes informações

192.168.10.10           node1

192.168.10.11           node2

  • Liberar portas 1433 e 5022 no firewall ou simplesmente desabilitá-lo (já que é teste. Não fazer isso em produção
  • Habilitar o recurso de AG nas duas instâncias:
  • Abrir o Configuration Manager

  • Na aba “Always On Availability Groups”, marcar a opção “Enable Always On Availability Groups”

  • Reiniciar o serviço para que as configurações tenham efeito.

4) Ações node1:

--Habilitar XEvents
ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

--Para casos em que não temos Domínio, criar SQL Authentication
CREATE LOGIN ag_login WITH PASSWORD = 'SenhaForte123!';
CREATE USER ag_login FOR LOGIN ag_login;

--Criar Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SenhaForte123!';

--Criar certificado
CREATE CERTIFICATE ag_certificateRS WITH SUBJECT = 'ag_certificateRS';

--Fazer Backup do certificado
BACKUP CERTIFICATE ag_certificateRS
   TO FILE = 'C:\tmp\dbm_certificate.cer'
   WITH PRIVATE KEY (
           FILE = 'C:\tmp\dbm_certificate.pvk',
           ENCRYPTION BY PASSWORD = 'SenhaForte123!'
       );

--Criar um endpoint
CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = 5022)
    FOR DATA_MIRRORING (
	    ROLE = ALL,
	    AUTHENTICATION = CERTIFICATE ag_certificateRS,
		ENCRYPTION = REQUIRED ALGORITHM AES
		);

--Iniciar Endpoint
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

--Conceder permissão no Endpoint ao usuário criado anteriormente
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO ag_login

5) Ação node2


--Habilitar XEvents
ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

--Para casos em que não temos Domínio, criar SQL Authentication
CREATE LOGIN ag_login WITH PASSWORD = 'SenhaForte123!';
CREATE USER ag_login FOR LOGIN ag_login;


--Cria  o certificado pegando os dados copiados do nó 1
--IMPORTANTE!!!!!
--Copiar o backup do certificado e da chave privada realizado no node1 para o node2
--Neste passo, no comando "FROM FILE" e "FILE" passar o caminho para onde esses backup foram copiados

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SenhaForte123!';
CREATE CERTIFICATE ag_certificateRS
    AUTHORIZATION ag_login
    FROM FILE =  'C:\tmp\dbm_certificate.cer'
    WITH PRIVATE KEY (
    FILE = 'C:\tmp\dbm_certificate.pvk',
    DECRYPTION BY PASSWORD = 'SenhaForte123!'
            );

--Criar um endpoint
CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = 5022)
    FOR DATA_MIRRORING (
	    ROLE = ALL,
	    AUTHENTICATION = CERTIFICATE ag_certificateRS,
		ENCRYPTION = REQUIRED ALGORITHM AES
		);

--Iniciar Endpoint
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

--Conceder permissão no Endpoint ao usuário criado anteriormente
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO ag_login

6) Criar AG node1

--Apontar para a porta 5022
--Caso as instâncias de teste fiquem no mesmo servidor, apontar no node2 uma porta diferente, exemplo: 5023
CREATE AVAILABILITY GROUP [ag1_teste]
    WITH (CLUSTER_TYPE = NONE)
    FOR REPLICA ON
        N'node1\inode1' WITH (
            ENDPOINT_URL = N'tcp://192.168.10.10:5022',
		    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
		    FAILOVER_MODE = MANUAL,
		    SEEDING_MODE = AUTOMATIC,
                    SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
		    ),
        N'node2\inode2' WITH (
		    ENDPOINT_URL = N'tcp://192.168.10.11:5022',
		    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
		    FAILOVER_MODE = MANUAL,
		    SEEDING_MODE = AUTOMATIC,
		    SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
		    );

ALTER AVAILABILITY GROUP [ag1_teste] GRANT CREATE ANY DATABASE;

7) Criar AG Node2

--Observem que aqui o Cluster Type está como "None"
ALTER AVAILABILITY GROUP [ag1_teste] JOIN WITH (CLUSTER_TYPE = NONE);
ALTER AVAILABILITY GROUP [ag1_teste] GRANT CREATE ANY DATABASE;

8) Testar criação de base

CREATE DATABASE [db1];

--Lembrando que para fazer parte do AG, a base deverá ser criada com o Recovery_Model FULL
ALTER DATABASE [db1] SET RECOVERY FULL;


--Fazer o primeiro backup 
BACKUP DATABASE [db1] TO DISK = N'c:\tmp\db1.bak';

--Adicionar nova base no AG
 ALTER AVAILABILITY GROUP [ag1_teste] ADD DATABASE [db1];



Pronto, seu ambiente de DR está configurado, agora é só aproveitar!!!

Revisão:

Aqui o “segredo” é configurar o arquivo hosts e criar o certificado para a comunicação entre os Endpoints.

No próximo post, iremos falar em como realizar outras configurações, como realizar um failover sem perda de dados.

Referências:

Configure read-scale for an availability group – SQL Server Always On | Microsoft Docs

2 comentários sobre “Simplificando o AG – Read-Scale

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s