Partilhar via


Configurar o roteamento de leitura apenas para um grupo de disponibilidade Always On

Aplica-se a:SQL Server

Para configurar um grupo de disponibilidade Always On para dar suporte ao roteamento somente leitura no SQL Server, você pode usar o Transact-SQL ou o PowerShell. Roteamento somente leitura refere-se à capacidade do SQL Server de rotear solicitações de conexão somente leitura qualificadas para uma réplica secundária legível Always On disponível (ou seja, uma réplica configurada para permitir cargas de trabalho somente leitura quando executadas sob a função secundária). Para oferecer suporte ao roteamento de leitura apenas, o grupo de disponibilidade deve possuir um ouvinte do grupo de disponibilidade. Os clientes somente leitura devem direcionar suas solicitações de conexão para esse ouvinte e as cadeias de conexão do cliente devem especificar a intenção do aplicativo como "somente leitura". Ou seja, devem ser solicitações de conexão com intenção de leitura.

O roteamento de leitura única está disponível no SQL Server 2016 (13.x) e versões posteriores.

Observação

Para obter informações sobre como configurar uma réplica secundária legível, consulte Configurar o acesso Read-Only em uma réplica de disponibilidade (SQL Server).

Pré-requisitos

Quais propriedades de réplica você precisa configurar para dar suporte ao roteamento Read-Only?

  • Para cada réplica secundária legível que ofereça suporte à roteação somente leitura, é necessário especificar uma URL de roteação somente leitura. Essa URL entra em vigor somente quando a réplica local está sendo executada sob a função secundária. A URL de roteamento somente leitura deve ser especificada em uma base de réplica por réplica, conforme necessário. Cada URL de roteamento somente leitura é usado para rotear solicitações de conexão com intenção de leitura para uma réplica secundária legível específica. Normalmente, a cada réplica secundária legível é atribuída uma URL de encaminhamento apenas para leitura.

    Para obter informações sobre como calcular a _read_only_routing_url_ para uma réplica de disponibilidade, consulte Calculando read_only_routing_url para Always On

  • Para cada réplica de disponibilidade que você deseja oferecer suporte ao roteamento somente leitura quando for a réplica primária, você precisa especificar uma lista de roteamento somente leitura. Uma determinada lista de roteamento somente leitura entra em vigor somente quando a réplica local está sendo executada sob a função principal. Essa lista deve ser especificada réplica a réplica, conforme necessário. Normalmente, cada lista de roteamento somente leitura conteria todas as URLs de roteamento somente leitura, com a URL da réplica local no final da lista.

    Observação

    As solicitações de conexão com intenção de leitura são encaminhadas para a primeira entrada disponível na lista de encaminhamento de leitura da réplica primária atual. No entanto, o balanceamento de carga entre réplicas de leitura é suportado. Para obter mais informações, consulte Configurar o balanceamento de carga em réplicas somente leitura.

Observação

Para obter informações sobre os ouvintes de grupos de disponibilidade e sobre o roteamento em modo de leitura, consulte Ouvintes de Grupos de Disponibilidade, Conectividade de Cliente e Failover de Aplicação (SQL Server).

Permissões

Tarefa Permissões
Para configurar réplicas ao criar um grupo de disponibilidade Requer associação à função de servidor fixa sysadmin e uma das seguintes permissões: permissão de servidor CREATE AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER.
Para modificar uma réplica de disponibilidade É necessário ter permissão ALTER AVAILABILITY GROUP no grupo de disponibilidade, permissão CONTROL AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER.

Usando Transact-SQL

Configurar uma lista de roteamento somente leitura

Use as etapas a seguir para configurar o roteamento somente leitura usando o Transact-SQL. Para obter um exemplo de código, consulte Exemplo (Transact-SQL), mais adiante nesta seção.

  1. Conecte-se à instância do servidor que hospeda a réplica primária.

  2. Se você estiver especificando uma réplica para um novo grupo de disponibilidade, use a instrução Transact-SQL CREATE AVAILABILITY GROUP . Se estiveres a adicionar ou a modificar uma réplica para um grupo de disponibilidade existente, usa a instrução ALTER AVAILABILITY GROUP Transact-SQL.

    • Para configurar o roteamento somente leitura para a função secundária, na cláusula ADD REPLICA ou MODIFY REPLICA WITH, especifique a opção SECONDARY_ROLE, da seguinte maneira:

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')

      Os parâmetros da URL de roteamento somente leitura são os seguintes:

      de endereço do sistema
      É uma cadeia de caracteres, como um nome de sistema, um nome de domínio totalmente qualificado ou um endereço IP, que identifica inequivocamente o sistema do computador de destino.

      porto
      É um número de porta usado pelo Mecanismo de Banco de Dados da instância do SQL Server.

      Por exemplo: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      Em uma cláusula MODIFY REPLICA, o ALLOW_CONNECTIONS é opcional se a réplica já estiver configurada para permitir conexões somente leitura.

      Para obter mais informações, consulte Calculando read_only_routing_url para Always On.

    • Para configurar o roteamento somente leitura para a função principal, na cláusula ADD REPLICA ou MODIFY REPLICA WITH, especifique a opção PRIMARY_ROLE, da seguinte maneira:

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('servidor' [ ,... n ] ))

      onde o servidor identifica uma instância de servidor que hospeda uma réplica secundária de leitura no grupo de disponibilidade.

      Por exemplo: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      Observação

      Você deve definir a URL de roteamento somente leitura antes de configurar a lista de roteamento somente leitura.

Configurar o balanceamento de carga em réplicas somente leitura

A partir do SQL Server 2016 (13.x), você pode configurar o balanceamento de carga em um conjunto de réplicas somente leitura. Antes, o encaminhamento de apenas leitura direcionava sempre o tráfego para a primeira réplica disponível na lista de encaminhamento. Para tirar partido desse recurso, use um único nível de parênteses aninhados em torno das instâncias do servidor READ_ONLY_ROUTING_LIST nos comandos CREATE AVAILABILITY GROUP ou ALTER AVAILABILITY GROUP.

Por exemplo, a lista de roteamento a seguir equilibra a carga da solicitação de conexão com intenção de leitura entre duas réplicas somente leitura, Server1 e Server2. Os parênteses aninhados que envolvem esses servidores identificam um conjunto balanceado de carga. Se nenhuma das réplicas estiver disponível nesse conjunto, ela continuará a tentar se conectar sequencialmente às outras réplicas, Server3 e Server4, na lista de roteamento somente leitura.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')  

Observe que cada entrada na lista de roteamento pode ser um conjunto de réplicas somente leitura com balanceamento de carga. O exemplo a seguir demonstra isso.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')  

Apenas um nível de parênteses aninhados é suportado.

Exemplo (Transact-SQL)

O exemplo a seguir modifica duas réplicas de disponibilidade de um grupo de disponibilidade existente, AG1 para oferecer suporte ao encaminhamento só de leitura se uma dessas réplicas atualmente desempenhar a função principal. Para identificar as instâncias do servidor que hospedam a réplica de disponibilidade, este exemplo especifica os nomes das instâncias COMPUTER01 e COMPUTER02.

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO  
  

Usando o PowerShell

Configurar uma lista de roteamento somente leitura

Use as etapas a seguir para configurar o roteamento somente leitura usando o PowerShell. Para obter um exemplo de código, consulte Exemplo (PowerShell), mais adiante nesta seção.

  1. Defina o padrão (cd) para a instância do servidor que hospeda a réplica primária.

  2. Ao adicionar uma réplica de disponibilidade a um grupo de disponibilidade, use o cmdlet New-SqlAvailabilityReplica . Ao modificar uma réplica de disponibilidade existente, use o cmdlet Set-SqlAvailabilityReplica . Os parâmetros relevantes são os seguintes:

    • Para configurar o roteamento de leitura apenas para a função secundária, especifique o parâmetro ReadonlyRoutingConnectionUrl"url".

      onde, url é o FQDN (nome de domínio totalmente qualificado) de conectividade e a porta a ser usada ao rotear para a réplica para conexões somente leitura. Por exemplo: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      Para obter mais informações, consulte Calculando read_only_routing_url para Always On.

    • Para configurar o acesso à conexão para a função principal, especifique ReadonlyRoutingList"server" [ ,... n ], onde o servidor identifica uma instância do servidor que hospeda uma réplica secundária somente leitura no grupo de disponibilidade. Por exemplo: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      Observação

      Você deve definir a URL de roteamento somente leitura de uma réplica antes de configurar sua lista de roteamento somente leitura.

    Observação

    Para exibir a sintaxe de um cmdlet, use o cmdlet Get-Help no ambiente do SQL Server PowerShell. Para obter mais informações, consulte Obter Ajuda no SQL Server PowerShell.

Configurar e usar o provedor do SQL Server PowerShell

Exemplo (PowerShell)

O exemplo a seguir configura a réplica primária e uma réplica secundária em uma grupo de disponibilidade para roteamento de leitura única. Primeiro, o exemplo atribui uma URL de roteamento somente leitura a cada réplica. Em seguida, configura a lista de roteamento somente leitura na réplica primária. As conexões com a propriedade "ReadOnly" definida na cadeia de conexão serão redirecionadas para a réplica secundária. Se essa réplica secundária não for legível (conforme determinado pela configuração ConnectionModeInSecondaryRole ), a conexão será direcionada de volta para a réplica primária.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"  
  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica  

Acompanhamento: Após configurar o encaminhamento Read-Only

Depois que a réplica primária atual e as réplicas secundárias legíveis forem configuradas para oferecer suporte ao roteamento somente leitura em ambas as funções, as réplicas secundárias legíveis poderão receber solicitações de conexão com intenção de leitura de clientes que se conectam por meio do ouvinte do grupo de disponibilidade.

Sugestão

Ao usar o Utilitário bcp ou o Utilitário sqlcmd, você pode especificar o acesso somente leitura a qualquer réplica secundária habilitada para acesso somente leitura especificando a opção Somente leitura -K .

Requisitos e recomendações para Cliente Connection-Strings

Para que um aplicativo cliente use roteamento somente leitura, sua cadeia de conexão deve atender aos seguintes requisitos:

  • Use o protocolo TCP.

  • Defina o atributo/propriedade de intenção do aplicativo como somente leitura.

  • Faça referência ao ouvinte de um grupo de disponibilidade configurado para oferecer suporte ao roteamento somente leitura.

  • Faça referência a um banco de dados nesse grupo de disponibilidade.

Além disso, recomendamos que as cadeias de conexão habilitem o failover de várias sub-redes, que oferece suporte a um thread de cliente paralelo para cada réplica em cada sub-rede. Isso minimiza o tempo de reconexão do cliente após um failover.

A sintaxe de uma cadeia de conexão depende do provedor do SQL Server que um aplicativo está usando. O exemplo de cadeia de conexão a seguir para o Provedor de Dados do .NET Framework 4.0.2 para SQL Server ilustra as partes de uma cadeia de conexão que são necessárias e recomendadas para funcionar para roteamento somente leitura.

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

Para mais informações sobre a intenção de aplicação de leitura apenas e o roteamento de leitura apenas, consulte Ouvintes de Grupos de Disponibilidade, Conectividade de Cliente e Failover de Aplicação (SQL Server).

Se o roteamento Read-Only não estiver funcionando corretamente

Para obter informações sobre como solucionar problemas de uma configuração de roteamento somente leitura, consulte Read-Only o roteamento não está funcionando corretamente.

Reverter para o comportamento de roteamento padrão

A partir do SQL Server 2025 (17.x), pode especificar NONE como o destino READ_WRITE_ROUTING_URL ou READ_ONLY_ROUTING_URL para reverter o encaminhamento especificado para a réplica de disponibilidade e encaminhar o tráfego com base no comportamento predefinido. Para saber mais, consulte o comando ALTER AVAILABILITY GROUP Transact-SQL.

Próximas Etapas

Para exibir configurações de roteamento somente leitura

Para configurar o acesso à conexão do cliente

Para usar cadeias de conexão em aplicativos

Blogues:

Conteúdo adicional