Redirecionamento de conexão de leitura/gravação de réplica secundária para primária (Grupos de Disponibilidade Always On)
Aplica-se a: SQL Server 2019 (15.x)
O SQL Server 2019 (15.x) CTP 2.0 apresenta o redirecionamento de conexão de leitura/gravação de réplica secundária para primária para 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 cadeia de conexão pode ser direcionada a uma réplica secundária. Dependendo da configuração de réplica do AG (grupo de disponibilidade) e as configurações na cadeia 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 redirecionam o tráfego do usuário para a réplica primária para garantir a reconexão depois do failover. O SQL Server 2019 (15.x) continua a ser compatível com a funcionalidade de ouvinte do AG e adiciona redirecionamento de conexão da réplica para cenários que não podem incluir um ouvinte. Por exemplo:
- A tecnologia de cluster integrada pelos grupos de disponibilidade do SQL Server não oferece uma funcionalidade semelhante a ouvinte
- 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/gravação:
- A réplica secundária precisa estar online.
- A especificação de réplica
PRIMARY_ROLE
precisa incluirREAD_WRITE_ROUTING_URL
. - A cadeia de conexão deve ser
ReadWrite
definindoApplicationIntent
comoReadWrite
ou não configurandoApplicationIntent
e permitindo que o padrão (ReadWrite
) entre em vigor.
Definir a opção READ_WRITE_ROUTING_URL
Para configurar o redirecionamento de conexão 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 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=ReadWrite Padrão |
Conexões com falha | Conexões com falha | Conexões bem-sucedidas Leituras bem-sucedidas Gravações com falha |
ApplicationIntent=ReadOnly |
Conexões com falha | Conexões bem-sucedidas | Conexões 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) definido
Depois de definir o redirecionamento de conexão de leitura/gravação, a maneira como a réplica trata as solicitações de conexão se comporta de forma 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=ReadWrite Padrão |
Conexões com falha | Conexões com falha | Rotas de conexões para a primária |
ApplicationIntent=ReadOnly |
Conexões com falha | Conexões bem-sucedidas | Conexões 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
.
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 o domínio de nível superior do nome de domínio totalmente qualificado. Por exemplo,
corporation.com
.
- Domínio e o 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/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 passou por failover manual 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 Acesso de conexão de cliente a réplicas de disponibilidade (SQL Server)
Ouvintes do grupo de disponibilidade, conectividade de cliente e failover de aplicativo (SQL Server)