Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2019 (15.x) e posterior
O SQL Server 2019 (15.x) introduz o redirecionamento de conexão de leitura/gravação da réplica secundária para a réplica primária em grupos de disponibilidade Always On. O redirecionamento de conexão de leitura/gravação está disponível em qualquer plataforma de sistema operacional. Ele permite que conexões do aplicativo cliente sejam direcionadas para a réplica primária, independentemente do servidor de destino especificado na cadeia de conexão.
Por exemplo, a string de conexão pode apontar para uma réplica secundária. Dependendo da configuração da réplica do grupo de disponibilidade (AG) e das configurações na string de conexão, a conexão pode ser redirecionada automaticamente para a réplica primária.
Casos de uso
Antes do SQL Server 2019 (15.x), o ouvinte do AG e o recurso de cluster correspondente redirecionavam o tráfego do usuário para a réplica primária para garantir a reconexão após o failover. O SQL Server 2019 (15.x) continua oferecendo suporte à funcionalidade de listener do AG e adiciona redirecionamento de conexão para réplicas em cenários que não podem incluir um listener. Por exemplo:
- A tecnologia de cluster com a qual os grupos de disponibilidade do SQL Server se integram não oferece um recurso semelhante a um listener
- Uma configuração de várias sub-redes, como na nuvem ou em um IP flutuante de várias sub-redes com o Pacemaker em que as configurações se tornam complexas, propensas a erros e com problemas difíceis de solucionar devido aos vários componentes envolvidos
- Escala de leitura ou recuperação de desastres e o tipo do cluster é
NONE, porque não há nenhum mecanismo simples para garantir a reconexão transparente após o failover manual
Requisito
Para que uma réplica secundária redirecione as solicitações de conexão de leitura e gravação:
- A réplica secundária precisa estar online.
- A especificação de réplica
PRIMARY_ROLEprecisa incluirREAD_WRITE_ROUTING_URL. - A cadeia de conexão deve ser
ReadWritedefinindoApplicationIntentcomoReadWriteou não configurandoApplicationIntente permitindo que o padrão (ReadWrite) entre em vigor.
Definir a opção READ_WRITE_ROUTING_URL
Para configurar o redirecionamento de conexões de leitura/gravação, defina READ_WRITE_ROUTING_URL para a réplica primária ao criar o AG.
Em SQL Server 2019 (15.x), READ_WRITE_ROUTING_URL foi adicionado à especificação <add_replica_option>. Consulte os seguintes tópicos:
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) não definido (padrão)
Por padrão, o redirecionamento de conexão de réplica de leitura/gravação não é definido para uma réplica. A forma como uma réplica secundária trata as solicitações de conexão depende se a réplica secundária está definida para permitir conexões ou não e a configuração de ApplicationIntent na cadeia de conexão. A tabela a seguir mostra como uma réplica secundária lida com as conexões com base em SECONDARY_ROLE (ALLOW CONNECTIONS = ) e ApplicationIntent.
ApplicationIntent valor |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
|---|---|---|---|
ApplicationIntent=ReadWritePadrão |
Conexões com falha | Conexões com falha | As conexões são realizadas com sucesso Leituras realizadas com sucesso Falha na escrita |
ApplicationIntent=ReadOnly |
Conexões com falha | As conexões são bem-sucedidas | As conexões são bem-sucedidas |
A tabela anterior mostra o comportamento padrão, que é o mesmo que as versões do SQL Server antes de SQL Server 2019 (15.x).
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) configurado
Depois de configurar o redirecionamento de conexão de leitura/gravação, a forma como a réplica lida com as solicitações de conexão passa a ser diferente. O comportamento de conexão ainda depende da configuração de SECONDARY_ROLE (ALLOW CONNECTIONS = ) e ApplicationIntent. A tabela a seguir mostra como uma réplica secundária com READ_WRITE_ROUTING definido lida com conexões com base em SECONDARY_ROLE (ALLOW CONNECTIONS = ) e ApplicationIntent.
ApplicationIntent valor |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
|---|---|---|---|
ApplicationIntent=ReadWritePadrão |
Conexões com falha | Conexões com falha | Rotas de conexões para a primária |
ApplicationIntent=ReadOnly |
Conexões com falha | As conexões são bem-sucedidas | As conexões são bem-sucedidas |
A tabela anterior mostra que, quando a réplica primária tem READ_WRITE_ROUTING_URL definido, a réplica secundária redirecionará as conexões para a réplica primária quando SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) e a conexão especificar ReadWrite.
Reverter para o comportamento de roteamento padrão
A partir do SQL Server 2025 (17.x), você pode especificar NONE como o READ_WRITE_ROUTING_URL ou o READ_ONLY_ROUTING_URL destino para reverter o roteamento especificado para a réplica de disponibilidade e rotear o tráfego com base no comportamento padrão. Para saber mais, examine ALTER AVAILABILITY GROUP Transact-SQL comando.
Exemplo
Neste exemplo, um grupo de disponibilidade tem três réplicas:
- Uma réplica primária em COMPUTER01
- Uma réplica secundária síncrona em COMPUTER02
- Uma réplica secundária assíncrona no COMPUTER03
A imagem a seguir representa o grupo de disponibilidade.
O script Transact-SQL a seguir cria este AG. Neste exemplo, cada réplica especifica o READ_WRITE_ROUTING_URL.
CREATE AVAILABILITY GROUP MyAg
WITH ( CLUSTER_TYPE = NONE )
FOR
DATABASE [<Database1>]
REPLICA ON
'COMPUTER01' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER02' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER03' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
);
GO
<domain>.<tld>- Domínio e domínio de nível superior do nome de domínio totalmente qualificado. Por exemplo,
corporation.com.
- Domínio e domínio de nível superior do nome de domínio totalmente qualificado. Por exemplo,
Comportamentos de conexão
No diagrama a seguir, um aplicativo cliente se conecta ao COMPUTER02 com ApplicationIntent=ReadWrite. A conexão é redirecionada para a réplica primária.
A réplica secundária redireciona chamadas de leitura e gravação para a réplica primária. Uma conexão de leitura e gravação para qualquer uma das réplicas será redirecionada para a réplica primária.
No diagrama a seguir, a réplica primária foi manualmente transferida para COMPUTER02. Um aplicativo cliente se conecta ao COMPUTER01 com ApplicationIntent=ReadWrite. A conexão é redirecionada para a réplica primária.
Consulte Também
Visão geral dos Grupos de Disponibilidade AlwaysOn (SQL Server)
Sobre o acesso do cliente às réplicas de disponibilidade (SQL Server)