Compartilhar via


Configurar a replicação com Grupos de Disponibilidade AlwaysOn

Aplica-se a:SQL Server – Somente Windows

A configuração dos grupos de disponibilidade AlwaysOn e da replicação do SQL Server envolve sete etapas. Cada etapa está descrita com mais detalhes nas seções a seguir.

1. Configurar as publicações e assinaturas do banco de dados

Configurar o distribuidor

O banco de dados de distribuição não pode ser colocado em um grupo de disponibilidade com o SQL Server 2012 e o SQL Server 2014. A colocação do banco de dados de distribuição em um grupo de disponibilidade tem suporte no SQL 2016 e posterior, exceto no caso de bancos de dados de distribuição usados em topologias de replicação ponto a ponto, de mesclagem ou bidirecionais. Para obter mais informações, confira Configurar o banco de dados de distribuição de replicação no grupo de disponibilidade Always On.

  1. Configurar a distribuição no distribuidor. Se os procedimentos armazenados estiverem sendo usados para configuração, execute sp_adddistributor Use o parâmetro @password para identificar a senha que será usada quando um publicador remoto se conectar ao distribuidor. A senha também será necessária em cada publicador remoto quando o distribuidor remoto for instalado.

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = '**Strong password for distributor**';
    
  2. Criar o banco de dados de distribuição no distribuidor. Se os procedimentos armazenados estiverem sendo usados para configuração, execute sp_adddistributiondb

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributiondb
        @database = 'distribution',
        @security_mode = 1;
    
  3. Configurar o publicador remoto. Se procedimentos armazenados estiverem sendo usados para configurar o distribuidor, execute sp_adddistpublisher. O parâmetro @security_mode é usado para determinar como o procedimento armazenado de validação do editor executado por meio de agentes de replicação executam se conecta ao primário atual. Se a autenticação do Windows definida como 1 for usada na conexão à primária atual. Se estiver definida como 0, a autenticação do SQL Server será usada com os valores @login e @password especificados. O logon e a senha especificada devem ser válidos em cada réplica secundária para o procedimento armazenado de validação se conectar com êxito a essa réplica.

    Observação

    Se qualquer agente de replicação modificado for executado em um computador que não seja o distribuidor, o uso da autenticação do Windows para a conexão à réplica primária exigirá a configuração da autenticação Kerberos para a comunicação entre os computadores host da réplica. O uso de um logon do SQL Server para a conexão à réplica primária atual não requer a autenticação Kerberos.

    USE master;
    GO
    
    EXECUTE sys.sp_adddistpublisher
        @publisher = 'AGPrimaryReplicaHost',
        @distribution_db = 'distribution',
        @working_directory = '\\MyReplShare\WorkingDir',
        @login = 'MyPubLogin',
        @password = '**Strong password for publisher**';
    

Para obter mais informações, consulte sp_adddistpublisher.

Configurar o publicador no publicador original

  1. Configurar um distribuidor remoto. Se os procedimentos armazenados estiverem sendo usados para configurar o publicador, execute sp_adddistributor Especifique o mesmo valor para @password usado quando sp_adddistrbutor foi executado no distribuidor para configurar a distribuição.

    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = 'MyDistPass';
    
  2. Habilitar o banco de dados para replicação. Se os procedimentos armazenados estiverem sendo usados para configurar o publicador, execute sp_replicationdboption Se a replicação transacional e de mesclagem estiverem sendo configuradas para o banco de dados, cada um deverá ser habilitado.

    USE master;
    GO
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'publish',
        @value = 'true';
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'merge publish',
        @value = 'true';
    
  3. Criar publicações, artigos e assinaturas da replicação. Para obter mais informações sobre como configurar a replicação consulte os objetos Publishing Data e Database.

2. Configurar o grupo de disponibilidade

Na réplica primária pretendida, crie o grupo de disponibilidade com o banco de dados publicado (ou a ser publicado) como um banco de dados membro. Se estiver usando o Assistente de Grupo de Disponibilidade, você poderá permitir que o assistente sincronize os bancos de dados de réplica secundária inicialmente ou poderá executar a inicialização manualmente usando backup e restauração.

Crie um ouvinte de DNS para o grupo de disponibilidade que será usado pelos agentes de replicação para conectar à replicação primária atual. O nome de ouvinte que é especificado será usado como o destino de redirecionamento para o par publicador original/banco de dados publicado. Por exemplo, se você estiver usando DDL para configurar o grupo de disponibilidade, o exemplo de código a seguir poderá ser usado para especificar um ouvinte de grupo de disponibilidade para um grupo de disponibilidade existente chamado MyAG:

ALTER AVAILABILITY GROUP 'MyAG'
    ADD LISTENER 'MyAGListenerName' (WITH IP (('10.120.19.155', '255.255.254.0')));

Para obter mais informações, confira Criação e configuração de Grupos de Disponibilidade (SQL Server).

3. Verifique se todos os hosts de réplica secundária estão configurados para replicação

Em cada host de réplica secundária, verifique se o SQL Server foi configurado para oferecer suporte à replicação. A seguinte consulta pode ser executada em cada host de réplica secundária para determinar se a replicação é instalada:

USE master;
GO

DECLARE @installed AS INT;

EXECUTE @installed = sys.sp_MS_replication_installed;

SELECT @installed;

Se @installed for 0, a replicação deverá ser adicionada à instalação do SQL Server.

4. Configurar os hosts de réplica secundários como editores de replicação

Uma réplica secundária não pode agir como um editor de replicação ou republicador, mas a replicação deve ser configurada de modo que a secundária possa assumir o comando depois de um failover. No distribuidor, configure a distribuição para cada host de réplica secundária. Especifique o mesmo banco de dados de distribuição e diretório de trabalho que foram especificados quando o publicador original foi adicionado ao distribuidor. Se você estiver usando procedimentos armazenados para configurar a distribuição, use sp_adddistpublisher para associar os editores remotos ao distribuidor. Se foram usados @login e @password para o publicador original, especifique os mesmos valores para cada um quando adicionar os hosts de réplica secundária como publicadores.

EXECUTE sys.sp_adddistpublisher
    @publisher = 'AGSecondaryReplicaHost',
    @distribution_db = 'distribution',
    @working_directory = '\\MyReplShare\WorkingDir',
    @login = 'MyPubLogin',
    @password = '**Strong password for publisher**';

Em cada host de réplica secundária, configure a distribuição. Identifique o distribuidor do publicador original como o distribuidor remoto. Use a mesma senha usada quando sp_adddistributor foi executado originalmente no distribuidor. Se os procedimentos armazenados estiverem sendo usados para configurar a distribuição, o parâmetro @password de sp_adddistributor será usado para especificar a senha.

EXECUTE sp_adddistributor
    @distributor = 'MyDistributor',
    @password = '**Strong password for distributor**';

Em cada host de réplica secundária, verifique se os assinantes push das publicações de banco de dados aparecem como servidores vinculados. Se os procedimentos armazenados estiverem sendo usados para configurar os editores remotos, use sp_addlinkedserver para adicionar os assinantes (se ainda não estiverem presentes) como servidores vinculados aos editores.

EXECUTE sys.sp_addlinkedserver @server = 'MySubscriber';

5. Redirecionar o editor original para o nome do ouvinte do AG

No distribuidor, no banco de dados de distribuição, execute o procedimento armazenado sp_redirect_publisher para associar o publicador original e o banco de dados publicado com o nome do ouvinte de grupo de disponibilidade do grupo de disponibilidade.

USE distribution;
GO

EXECUTE sys.sp_redirect_publisher
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = 'MyAGListenerName';

6. Executar o procedimento armazenado de validação de replicação para verificar a configuração

No distribuidor, no banco de dados de distribuição, execute o procedimento armazenado sp_validate_replica_hosts_as_publishers para verificar se todos os hosts de réplica agora estão configurados para atuar como editores para o banco de dados publicado.

USE distribution;
GO

DECLARE @redirected_publisher AS sysname;

EXECUTE sys.sp_validate_replica_hosts_as_publishers
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = @redirected_publisher OUTPUT;

O sp_validate_replica_hosts_as_publishers de procedimento armazenado deve ser executado de um logon com autorização suficiente em cada host de réplica de grupo de disponibilidade para consultar informações sobre o grupo de disponibilidade. Ao contrário de sp_validate_redirected_publisher, ele usa as credenciais do chamador e não usa o logon retido no msdb.dbo.MSdistpublishers para se conectar às réplicas do grupo de disponibilidade.

Erro ao validar hosts de réplica secundários

sp_validate_replica_hosts_as_publishers falha com o erro a seguir ao validar hosts de réplica secundários que não permitem acesso de leitura ou exigem que a intenção de leitura seja especificada.

Mensagem 21899, Nível 11, Estado 1, Procedimento sp_hadr_verify_subscribers_at_publisher, Linha 109

A consulta no publicador redirecionado 'MyReplicaHostName' para determinar se havia entradas de sysserver para os assinantes do publicador original 'MyOriginalPublisher' falhou com o erro '976', mensagem de erro ' Erro 976, Nível 14, Estado 1, Mensagem: O banco de dados de destino, 'MyPublishedDB', está participando de um grupo de disponibilidade e atualmente não está acessível para consultas. A movimentação de dados está suspensa ou a réplica de disponibilidade não está habilitada para acesso de leitura. Para permitir o acesso somente leitura a esse banco de dados e a outros no grupo de disponibilidade, habilite o acesso de leitura para uma ou mais réplicas de disponibilidade secundárias no grupo. Para obter mais informações, consulte a instrução ALTER AVAILABILITY GROUP nos Manuais Online do SQL Server.

Foram encontrados um ou mais erros de validação de publicador para o host de réplica 'MyReplicaHostName'.

Este comportamento é esperado. Você deve verificar a presença das entradas de servidor de assinante nesses hosts de réplica secundária, consultando as entradas de sysserver diretamente no host.

7. Adicionar o editor original ao Replication Monitor

Em cada réplica de grupo de disponibilidade, adicione o publicador original ao Replication Monitor.

Replicação

Criar e configurar um grupo de disponibilidade