Servidores - SQL Server always on

Luan Moreno

Janeiro 2014

Dn592089.060DE5057573180CEC6D227C6D3E2207(pt-br,MSDN.10).png

Introdução

O SQL Server 2012 traz significantes mudanças em relação ao comportamemento de HA e DR dentro do banco de dados. Cada vez mais as organizações precisam estar com suas bases de dados sempre disponíveis e operantes, sendo assim devemos evitar o máximo de downtime de um servidor assim como a perda de dados de uma empresa.

HA e DR

O HA = High Availability ou Alta disponibilidade e o DR = Disaster Recovery ou plano de recuperação de disastres, tem como principal objetivo minimizar o impacto do downtime dos servidores de uma empresa. Uma plataforma para ser considerada altamente disponível deve possuir o seguinte cálculo:

Dn592089.96FAC99511009F17EE56E76503CAADF4(pt-br,MSDN.10).png

(Figura 1 – Cálculo de Uptime de um servidor.)

Ou seja, o resultado desse cálculo gera um valor no qual chamamos de os 9’s, que significa o número anual de minutos que os servidores podem estar em downtime.

Dn592089.C9A475FCDF0872D8BDF82D3948742449(pt-br,MSDN.10).png

(Figura 2 – Quantidade de downtime por tempo.)

Como solução anterior, no SQL Server 2012 possuíamos a estratégia de failover clustering para proteger toda a instância do banco de dados, junto com Database Mirroring (espelhamento de banco de dados) para cada base de dados, provendo assim um sistema com alta disponibiliade porém não totalmente eficaz e integrado.

Porém, para as organizações que desejam mais de um datacenter, a solução é possuir um espelhamento de banco de dados com o log shipping, essa seria outra opção para gerar assim uma alta disponibilidade das informações armazenadas na empresa.

Dn592089.140F864603A0BD0389B0211C1F79F436(pt-br,MSDN.10).png

(Figura 3 – Modo Assíncrono do espelhamento de dados ente servidores em lugares geograficamente diferentes.)

Dn592089.B21D9616295D8045702F5181668B1941(pt-br,MSDN.10).png

(Figura 4 – Modo síncrono do espelhamento de dados entre servidores geograficamente iguais e log shipping para servidores de diferentes locais.)

Pensando em todos esses problemas e dificuldades que enfrentávamos, o SQL Server 2012 provê uma nova solução chamada AlwaysOn. Esse novo recurso faz com que seja possível realizar a proteção em alto nível como o Failover de diversos bancos de dados, possuir múltiplos secondários dentre outras opções que veremos logo a frente.

AlwaysOn Availability Groups

O AlwaysOn Availability Group provê uma alternativa ao espelhamento de banco de dados, esse novo recurso possibilita a abilidade de realizar failover automático ou manual de grupos de bancos de dados, sendo possível possuir até 4 locais secundários.

Essa nova solução provê proteção de todas as informações “sem” perda de dados e é totalmente flexível. A mesma pode ser realizada com armazenamento local ou compartilhado, diferente do Cluster, e ainda possuindo movimento dos dados entre os eles de forma sincróna ou assíncrona. Uma de suas grandes qualidades é o failover entre instâncias assim como reparação de páginas danificadas.

Dn592089.A806B7CCD8F2DA105201BD89DCB9B3A9(pt-br,MSDN.10).png

(Figura 5 – A primeira réplica replicando os dados de forma síncrona para duas réplicas no mesmo datacenter e ainda provendo a réplica 4 que está no servidor secundário a informaçõe de forma assíncrona – Possibilidades do AlwaysON.)

Conceitos e Terminologia

Os Availability Groups são criados a partir do Windows Failover Clustering. O primeiro passo a ser configurado é realizar a criação de um Windows Failover Cluster (WFC) ou seja realizar a criação de um grupo de servidores alto disponíveis.

Availability Replica Roles

Cada Availability Group ou seja cada grupo contendo diversos bancos de dados, deverá possuir 2 ou mais parceiros que são chamados de Availability Replicas ou seja replicas idênticas, para que assim o failover de uma máquina para outra possa acontecer.

Cada instância do SQL Server no Availability Group é armazenada no Failover Cluster Instance (FCI). Esse recurso provê em nível servidor a alta disponibilidade das máquinas e recursos utilizados. Cada Réplica do Availability Group armazena uma cópia idêntica dos bancos de dados em cada servidor e instância do banco de dados.

Modos de Sincronização de Dados

A movimentação dos dados de uma réplica primária para uma réplica secundária é feita de forma síncrona ou assíncrona.

  • Utilizando a forma síncrona = Synchronous-Commit Mode

A transação para ser efetivada, deverá ser aceita em ambos servidores, isso significa consideravelmente a latência em rede. Essa opção é recomendada para servidores que compartilham uma rede de alto nível.

  • Utilizando a forma assíncrona = Assynchronous-Commit Mode

Aceita a transação na primária sem o parceiro ter escrito essa informação ainda em disco. Isso aumenta a performance entre os servidores.

Modos de Failover nos Availability Groups

Quando o Availability Group é configurado, possuímos dois modos de comportamento, são eles:

  • Automatic Failover (Failover Automático)

A Replica usa o modo de sincronização sincróna e assim suporta com que o failover possa ser manual ou automático.

  • Manual Failover (Failover Manual)

A replica utiliza tanto o modo de sincronização síncrona como assíncrona e assim possui o direito de realizar somente um Failover Manual entre os parceiros.

Modos de Conexão no Secondário

O modo de conexão para cada servidor secondário pode ser:

  • Dissalow Connections (Não Permitir Conexões) – As réplicas secondárias não permitem que seja realizada nenhuma conexão.
  • Allow Only Read-Intent Connections – A réplica permite somente a leitura de conexões que tem a intenção de ler e passam pelo native client do SQL Server.
  • Allow all Connections – É permitido qualquer conexão.

Availability Group Listener

Esse grupo possibilita uma forma de conexão dos bancos de dados com o Availability Group via uma Virtual Network (Rede Virtual). Quando o Availability Group falha então esse grupo redireciona todas as conexões para o novo servidor que passará a será o primário.

***** Pré-Requisitos

Para a criação do AlwaysOn, necessitamos de:

  • Windows Server 2008 R2 com Hyper-V Instalado.

Dn592089.18C0D433B999CDE60FD20058BAAAF7BF(pt-br,MSDN.10).png

  • 1 Máquina Domain Controller Windows Server 2008 R2 – DC com IP estático, com DNS e Dóminio criado.

Dn592089.83CC20548D66D195D4BF6688CA5B4A80(pt-br,MSDN.10).png

  • 3 Máquinas SQL Server 2012, com Windows Server 2008 R2, no domínio com framework 3.5 em cada uma sendo todas instância padrão de instalação do SQL Server.

Dn592089.FC8097EE9FC428D18505A390514E7311(pt-br,MSDN.10).png

Passo 1 – Configuração de uma Virtual Network (Rede Virtual)

No Hyper –V manager clique em Virtual Network Manager, logo após isso crie uma nova Rede Virtual com a opção interna.

Dn592089.701888EE4A9F5BF0E0235BA80732EF70(pt-br,MSDN.10).png

(Figura 6 – Criando a Rede Virtual para acesso das Vm’s criadas no Hyper – V.)

Agora, para cada VM criada informe a rede interna.

Dn592089.1BFA4C363E213BEB346B5863A4245237(pt-br,MSDN.10).png

(Figura 7 – Especificando a rede criada para cada Vm.)

Passo 2 – Compartilhando Pasta para Backup

Abra a primeira Vm que foi instalada o SQL Server, crie e compartilhe uma pasta.

Dn592089.CA262930437DAC9BFFF01D01881E670C(pt-br,MSDN.10).png

(Figura 8 – Pasta para compartilhamento.)

Botão Direito na pasta, Share this folder – Permissions e adicione o serviço criado do SQL Server no AD de nome SQLService e Administrator, todos contas do seu domínio criado.

Dn592089.8FFF057469BCF6D84967CBB9B9499FD5(pt-br,MSDN.10).png

(Figura 9 – Permitindo acesso aos usuários do AD.)

Passo 3 – Instalação, Validando e Criando o Failover Cluster em cada Instância

Depois das permissões concedidas, necessitamos criar a camada de alta disponibilidade em nível servidor. Se a feature ainda não está instalada realize a instalação da mesma.

Esses passos serão realizadas nas 3 máquinas contendo o SQL Server 2012.

Instalando…..

  • Conecte nas máquinas
  • Entre no Server Manager
  • Dentro do Server Manager botão direito em Feature Node e clique em Add Features.
  • Selecione Failover Clustering e clique em next
  • Confirme a instação e clique no final em Installation Results

Dn592089.53CECD70717BBACC6AAFE15DC8DBFD41(pt-br,MSDN.10).png

(Figura 10 – Selecionando a feature Failover Cluster Manager.)

* Realize a validação em somente uma máquina

Validando…..

  • Conecte na0 máquina
  • Expanda Features e clique em Failover Cluster Manager
  • Em Management clique em Validation
  • Selecione todas as máquinas de SQL Server
  • Clique em Check Names
  • Realize todos os testes , confirme as opções selecionadas e depois veja o sumário de configuração

Dn592089.CC08F20BCF65F1684AF13A3024807D87(pt-br,MSDN.10).png

(Figura 14.1 – Validando o WFC.)

Dn592089.B0A4F67BC3D8EAAF0ACAA1B300009FF8(pt-br,MSDN.10).png

(Figura 14.2 – Validando o WFC.)

Criando…..

  • No Failover Cluster Manager clique em Create a Cluster
  • Selecione os servidores que formarão parte do cluster, neste caso todos que possuem SQL Server
  • Depois de selecionado, entre em Access Point for Administering the cluster e crie um nome para seu cluster
  • Informe um range no qual ele irá atuar na sua rede.
  • Depois finalize a tela e conclua a operação

Dn592089.AB642AF65F6142B51DAD59747E8865E9(pt-br,MSDN.10).png

(Figura 14 – Criado e configurado o WFC.)

Passo 4 – Preparando o Ambiente

Com nossa alta disponibilidade em nível servidor já disponível, agora podemos começar a preparar o ambiente para o AlwaysOn. Sendo assim, acesse a 1ª máquina do SQL Server, abra o SSMS 2012 – abra uma consulta e execute.

    IF DB_ID(‘Empresas’) IS NOT NULL
    BEGIN
        ALTER DATABASE Empresas SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
        DROP DATABASE Empresas;
    END
    GO
     
    IF DB_ID(‘Marketing’) IS NOT NULL
    BEGIN
        ALTER DATABASE Marketing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
        DROP DATABASE Marketing;
    END
    GO
     
    IF DB_ID(‘Produtos’) IS NOT NULL
    BEGIN
        ALTER DATABASE Produtos SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
        DROP DATABASE Produtos;
    END
    GO
     
    CREATE DATABASE Empresas;
    GO
    ALTER DATABASE Empresas SET RECOVERY FULL;
     
     
    CREATE DATABASE Marketing;
    GO
    ALTER DATABASE Marketing SET RECOVERY FULL;
     
     
    CREATE DATABASE Produtos;
    GO
    ALTER DATABASE Produtos SET RECOVERY FULL;
     
    go
     
    USE Empresas;
    GO
    IF OBJECT_ID(‘Dados’) IS NOT NULL
    BEGIN
        DROP TABLE Dados;
    END
    GO
     
    CREATE TABLE Dados
        (RowID INT IDENTITY PRIMARY KEY,
         Col1 INT,
         Col2 CHAR(10) DEFAULT(‘ABC123′),
         Col3 NCHAR(20) DEFAULT(’789XYZ’));
    GO
     
    DECLARE @StartTime DATETIME = CURRENT_TIMESTAMP;
    DECLARE @Loop INT = 1;
     
    BEGIN TRANSACTION
    WHILE @Loop <= 100000
    BEGIN
        INSERT INTO Dados (Col1) VALUES (@loop);
        SET @Loop = @Loop + 1;
    END
    COMMIT TRANSACTION
    SELECT DATEDIFF(ms, @StartTime, CURRENT_TIMESTAMP) AS Table1_Time;
    GO
     
    UPDATE Dados
    SET Col1 = RowID;
    GO
     
    USE master
    GO
     
    BACKUP DATABASE Empresas TO DISK = N’C:\InfoAlwaysOn\BackupAlwaysOn\Empresas.bak’;
    BACKUP DATABASE Marketing TO DISK = N’C:\InfoAlwaysOn\BackupAlwaysOn\Marketing.bak’;
    BACKUP DATABASE Produtos TO DISK = N’C:\InfoAlwaysOn\BackupAlwaysOn\Produtos.bak’;
    GO
    IF DB_ID(‘Empresas’) IS NOT NULL
    BEGIN
    ALTER DATABASE Empresas SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Empresas;
    END
    GO
    IF DB_ID(‘Marketing’) IS NOT NULL
    BEGIN
    ALTER DATABASE Marketing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Marketing;
    END
    GO
    IF DB_ID(‘Produtos’) IS NOT NULL
    BEGIN
    ALTER DATABASE Produtos SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Produtos;
    END
    GO
    3ª Máquina do SQL Server
    IF DB_ID(‘Empresas’) IS NOT NULL
    BEGIN
    ALTER DATABASE Empresas SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Empresas;
    END
    GO
    IF DB_ID(‘Marketing’) IS NOT NULL
    BEGIN
    ALTER DATABASE Marketing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Marketing;
    END
    GO
    IF DB_ID(‘Produtos’) IS NOT NULL
    BEGIN
    ALTER DATABASE Produtos SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE Produtos;
    END
    GO

Nesse script estamos realizando a criação dos bancos de dados, colocando todos como modo de recuperação FULL e depois realizando um backup full.

Passo 5 – Habilitando o Serviço

Para que possamos realizar a criação do High Availabiliy Group é necessário que realizemos a habilitação do serviço para todas as Vm’s SQL Server.

Dn592089.2B0A40A5B60235AA2C21472CFCD778AA(pt-br,MSDN.10).png

(Figura 15 – Habilitando o AlwaysOn Availability Group.)

Dn592089.77971ECAF46AD3D2CB79FE2347379F66(pt-br,MSDN.10).png

(Figura 16 – Reinicie todas as instâncias.)

Passo 6 – Criando o AlwaysOn Availability Group

Depois do serviço habilitado, abriremos a 1ª Máquina SQL Server e realizaremos a criação do grupo.

Primeiramente verifique se o modo de recuperação de todas as bases estão como FULL.

Agora realize o backup de todas as bases de dados em qualquer local ou pasta.

Logo após o backup de todas terem sido efetuados clique em – AlwaysOn High Availability – New Availability Group Wizard.

Dn592089.D2AEC8C9CF6D524F81176E5A2EE3C7FB(pt-br,MSDN.10).png

(Figura 17 – Iniciando a instalação e configuração no wizard.)

Dn592089.B2A1B3A8FA87910210970B433D7046A5(pt-br,MSDN.10).png

(Figura 18 – Introdução para a criação do processo.)

Dn592089.00C9AFC6F59CA88448C4DEECFB39EB1C(pt-br,MSDN.10).png

(Figura 19 – Nome do Grupo.)

Dn592089.392AFC8F2BF3F1509ACA0B0C556C71D4(pt-br,MSDN.10).png

(Figura 20 – Selecionando as bases de dados.)

As validações acima são referentes.

Dn592089.8F340B193572CDE64BF5889D68238AB6(pt-br,MSDN.10).png

(Figura 21 – Validações das bases de dados para o grupo.)

Dn592089.0CCFECCFC1364FBEF31531A3BB3A194A(pt-br,MSDN.10).png

(Figura 22 – Informando a réplica secundária.)

Dn592089.B8C8B61F4FD614111F5A8093242AE3B7(pt-br,MSDN.10).png

(Figura 23 – Verificando o Endpoint.)

Dn592089.176C60403F4463D61E831E9228574F32(pt-br,MSDN.10).png

(Figura 24 – Preferência durante a execução de um backup assim como sua prioridade.)

Dn592089.E5F646D365548D14DF887ECD5EC446BA(pt-br,MSDN.10).png

(Figura 25 – Configuração do Listerner para o Grupo, nesse caso não iremos configurá-lo neste instante.)

Dn592089.23E3F81C139B88D9352AF0F96F2EDD1D(pt-br,MSDN.10).png

(Figura 26 – Local compartilhado que criamos no começo da apresentação, ele servirá para que todos os banco de dados realizem backup neste repositório e assim seja restaurado dentro do grupo.)

Dn592089.45B4A7CE4C3928503E58EE0C96277EA3(pt-br,MSDN.10).png

(Figura 27 – Validação de todas as configurações realizadas, o Warning gerado é porque não realizamos a configuração do listener ainda.)

Dn592089.42BB5EDDBB8C7DC45F0DB3E796863EE6(pt-br,MSDN.10).png

(Figura 28 – Conclusão da instalação do grupo.)

Passo 7 – Criando o Group Listener

Nesse momento iremos realizar a criação de um Listerner para o grupo, ele terá como função realizar um failover automático caso a réplica primária esteja offline.

Acesse a 1ª Máquina do SQL Server, Object Explorer – AlwaysOn High Availability – Availability Group – Availability Group Listener.

Dn592089.48DC30FEFA17829E824DC3D6A7313D9D(pt-br,MSDN.10).png

(Figura 30 – Adicionando um Listener.) Insert Caption

Dn592089.ADF4EC6FD60C9E03B1C0892C403897FE(pt-br,MSDN.10).png

(Figura 31 – Nome, incluíndo a porta padrão 1433, porém iremos escolher um IP Estático para o mesmo, após isso conclua a operação. )

Com isso teremos um novo servidor que ficará escutando todas as transações entre os servidores do grupo, caso o primário esteja com problema, cabe ao listerner solucioná-lo e realizar o direcionamento para a nova réplica.)

Observação

O listener aparece no WFC

Dn592089.9F0E8203D91BD2D3B4CD9E334A70220E(pt-br,MSDN.10).png

(Figura 32 – Acessando e visualizando informações do listerner no WFC.)

Sendo assim podemos acessá-lo assim no SSMS…

Dn592089.D3D578FA3FB11312800CC14D94968C2D(pt-br,MSDN.10).png

(Figura 33.1 – Acessando o listener.)

Dn592089.7DC1888902B0BAC8A96C4A7923A98E1C(pt-br,MSDN.10).png

(Figura 33.2 – Conectado ao listener.)

Com isso temos nosso ambiente assim…

Dn592089.BABDA915CE9E305F53D5526451D8AF69(pt-br,MSDN.10).png

(Figura 34 – Ambiente configurado para o Availability Group, o servidor principal ou seja a réplica primária é o 1ª SQL Server.)

Agora que possuímos um Listener, iremos simular o failover. Para isso acesse o Failover Cluster Manager – clique em seu Cluster e – Move this service or application to another node – e então clique para mover para o 2ª Máquina do SQL Server.

Dn592089.B37DA753C47012E1A95CB474691B20C2(pt-br,MSDN.10).png

(Figura 35.1 – Movendo para o 2ª SQL Server parte 1.)

Dn592089.B8D64F336102B3BEC3AD90A842873518(pt-br,MSDN.10).png

(Figura 35.2 – Movendo para o 2ª SQL Server parte 2.)

Dn592089.D5D00DCAC32C3C399E5B43A1C99417DF(pt-br,MSDN.10).png

(Figura 35.3 – Movendo para o 2ª SQL Server parte 3.)

Dn592089.952E30451458FEF40919C4339A9DEE3C(pt-br,MSDN.10).png

(Figura 36 – 2ª Servidor SQL Server agora é o primário.)

Se desejar realizar o Failover pelo SSMS…

Dn592089.5273B21AA53BEF50138CE9C0482A439E(pt-br,MSDN.10).png

(Passo 1)

Dn592089.3A92949D95FC8CDD3EF86051229A248C(pt-br,MSDN.10).png

(Passo 2)

Dn592089.B0419B917EE7DAD723C22337CC1DD141(pt-br,MSDN.10).png

(Passo 3)

Dn592089.7BAD58C5853C8623E0B2FD5FDAD339FD(pt-br,MSDN.10).png

(Passo 4)

Dn592089.DD364B87B678BA82943958681F32A244(pt-br,MSDN.10).png

(Passo 5)

Dn592089.26F7398ED9C232FBDEC98A4AA794FD15(pt-br,MSDN.10).png

(Passo 6)

Dn592089.8BC927D73440B16478C38147407BABE1(pt-br,MSDN.10).png

(Figura 37 – Failover concluído com sucesso.)

Passo 8 – Adicionando uma Réplica para o Grupo

Como realizamos a instalação de 3 Instâncias do SQL Server, agora iremos adicionar a 3ª para o grupo de alta disponibilidade.

Acesse a 1ª Máquina SQL Server – AlwaysOn High Availability – Availability Groups – Add Replica.

Dn592089.CFF59528F6833C32721FF1CB21C423A7(pt-br,MSDN.10).png

(Passo 1)

Dn592089.257B7DCDC201FC2C9CB5D1C09DA119B1(pt-br,MSDN.10).png

(Passo 2)

Dn592089.066C9B2376786BFE573EB42B9B637291(pt-br,MSDN.10).png

(Passo 3)

Dn592089.2063D5C1C6A2C263985613DBD01147AA(pt-br,MSDN.10).png

(Passo 4)

Dn592089.57F1A20073D6319C7A7D87AA4D2BBB57(pt-br,MSDN.10).png

(Passo 5)

Dn592089.FAF1D0BEACF1E86E0F73D003E9930E54(pt-br,MSDN.10).png

(Passo 6)

Dn592089.8596FE520EFE83AEF9BE919F3E8ECE29(pt-br,MSDN.10).png

(Passo 7)

Depois da segunda réplica adicionada teremos o SSMS da seguinte forma…

Dn592089.DA9CF29D0F0EABED9727F17A8D3A6637(pt-br,MSDN.10).png

(Figura 38 – Availability Group pronto.)

Conclusão

Acreditamos que esse novo recurso que demorou bastante tempo para ser implementado pelo time de produto, solucione todos os casos e necessidades de HA e DR.

Espero que com esse recurso agora possamos reduzir o downtime e maximizar o tempo de um banco de dados em uptime, além de proteger os dados com maior segurança.

Vemos claramente que o SQL Server 2012 AlwaysOn provê total integração com os recursos de infra, sendo asim é claro que teremos uma ferramenta cada vez mais robusta.

| Home | Artigos Técnicos | Comunidade