Partilhar via


Configurar a replicação com grupos de disponibilidade Always On

Aplica-se a:SQL Server - somente Windows

A configuração da replicação do SQL Server e dos grupos de disponibilidade Always On envolve sete etapas. Cada etapa é 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 é suportada com o SQL 2016 e superior, exceto para bancos de dados de distribuição usados em topologias de replicação de mesclagem, bidirecional ou ponto a ponto. Para obter mais informações, consulte Configurar o banco de dados de distribuição de replicação no grupo de disponibilidade Always On.

  1. Configure 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 editor remoto se conectar ao distribuidor. A senha também será necessária em cada editor remoto quando o distribuidor remoto estiver configurado.

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = '**Strong password for distributor**';
    
  2. Crie 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. Configure o editor remoto. Se os procedimentos armazenados estiverem a ser 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, que é executado pelos agentes de replicação, se conecta ao primário atual. Se estiver definido para 1, usa-se a autenticação do Windows para se conectar ao atual primário. Se definido como 0, a autenticação do SQL Server será usada com os valores @login e @password especificados. O login e a senha especificados devem ser válidos em cada réplica secundária para que o procedimento armazenado de validação se conecte com êxito a essa réplica.

    Observação

    Se algum agente de replicação modificado for executado em um computador diferente do distribuidor, o uso da autenticação do Windows para a conexão com o primário exigirá que a autenticação Kerberos seja configurada para a comunicação entre os computadores host da réplica. O uso de um logon do SQL Server para a conexão com o primário atual não exigirá 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 editor no editor original

  1. Configure a distribuição remota. Se os procedimentos armazenados estiverem a ser usados para configurar o publicador, execute sp_adddistributor e especifique o mesmo valor para @password que o usado quando sp_adddistrbutor foi executado no distribuidor para configurar a distribuição.

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

    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. Crie a publicação de replicação, os artigos e as assinaturas. Para obter mais informações sobre como configurar a replicação, consulte Publicando objetos de dados e banco de dados.

2. Configurar o grupo de disponibilidade

Na 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 inicialmente os bancos de dados de réplica secundária ou poderá executar a inicialização manualmente usando backup e restauração.

Crie um listener DNS para o grupo de disponibilidade que será utilizado pelos agentes de replicação para se conectarem ao primário atual. O nome do ouvinte especificado será usado como destino de redirecionamento para o par de banco de dados publicado/editor original. Por exemplo, se você estiver usando DDL para configurar o grupo de disponibilidade, o exemplo de código a seguir pode 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, consulte criação e configuração de grupos de disponibilidade (SQL Server).

3. Certifique-se de que todos os hosts de réplica secundários estejam configurados para replicação

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

USE master;
GO

DECLARE @installed AS INT;

EXECUTE @installed = sys.sp_MS_replication_installed;

SELECT @installed;

Se @installed for igual a 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 atuar como publicador ou republicador de replicação, mas a replicação deve ser configurada para que a réplica secundária possa assumir o controlo após uma transferência de serviço. No distribuidor, configure a distribuição para cada host de réplica secundário. Especifique o mesmo banco de dados de distribuição e diretório de trabalho que foi especificado quando o editor 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 @login e @password foram usados para o editor original, especifique os mesmos valores para cada um quando adicionar os hosts de réplica secundários como editores.

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ário, configure a distribuição. Identifique o distribuidor do editor 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ário, certifique-se de que os assinantes push das publicações de banco de dados apareçam 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 AG

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

USE distribution;
GO

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

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

No distribuidor, na base de dados de distribuição, execute o procedimento armazenado sp_validate_replica_hosts_as_publishers para verificar se todos os servidores de réplicas agora estão configurados para servir como editores para a base de dados publicada.

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 procedimento armazenado sp_validate_replica_hosts_as_publishers deve ser executado a partir de um login com autorização suficiente no host de réplica de cada 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 autor da chamada e não utiliza o login 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 seguinte erro ao validar hosts de réplica secundária que não permitem acesso de leitura ou exigem que a intenção de leitura seja especificada.

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

A consulta no editor redirecionado 'MyReplicaHostName' para determinar se havia entradas sysserver para os assinantes do editor 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 é suspensa ou a réplica de disponibilidade não está habilitada para acesso de leitura. Para permitir acesso somente leitura a este e outros bancos de dados no grupo de disponibilidade, habilite o acesso de leitura a uma ou mais réplicas de disponibilidade secundária no grupo. Para obter mais informações, consulte a instrução ALTER AVAILABILITY GROUP nos Manuais Online do SQL Server.

Um ou mais erros de validação do editor foram encontrados para o host de réplica 'MyReplicaHostName'.

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

7. Adicione o editor original ao Replication Monitor

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

Replicação

Criar e configurar um grupo de disponibilidade