Database
 sql >> Base de Dados >  >> RDS >> Database

Configurando a conectividade do Grupo de Disponibilidade


Agora que os Grupos de Disponibilidade estão se tornando mais difundidos, pensei em abordar um tópico que pode ser negligenciado durante o planejamento inicial e a instalação do SQL Server nesse tipo de ambiente. Para realmente ter uma configuração tolerante a falhas, é necessário pensar e planejar a configuração da conectividade do banco de dados.

Não entrarei em detalhes sobre como configurar seu ambiente AlwaysOn nesta postagem, mas para obter ajuda adicional, sugiro que você dê uma olhada na postagem de Aaron Bertrand, "Solucionando problemas AlwaysOn – Às vezes, são necessários muitos pares de olhos". Depois que seu ambiente estiver configurado, a próxima etapa para fornecer conectividade de banco de dados é criar um Ouvinte de Grupo de Disponibilidade usando SQL Management Studio ou T-SQL:
ALTER AVAILABILITY GROUP [GroupName] 
  ADD LISTENER N'ListenerName' 
  (WITH IP ((N'10.x.x.x', N'255.255.255.0')), PORT=1433);
Strings de conexão do ouvinte AG

Seu nome de rede virtual (VNN) é registrado no DNS e sempre pertence à instância do SQL Server em que a réplica primária reside. Todos os endereços IP fornecidos durante a configuração do AG Listener são registrados no DNS com o mesmo nome de rede virtual.

Depois de criar seu AG Listener, você deve certificar-se de que seus clientes possam se conectar. Sua conexão de aplicativo funciona da mesma maneira que sempre, no entanto, em vez de apontar para um servidor específico em sua string de conexão, você aponta para o AG Listener.

Os ouvintes AG só podem ser conectados usando TCP e são resolvidos pelo DNS local para a lista de endereços IP e portas TCP mapeadas para o VNN. Seu cliente tentará se conectar a cada um dos endereços IP até obter uma conexão ou até atingir um tempo limite de conexão. Um parâmetro de cadeia de conexão importante a ser considerado é MultiSubnetFailover. Se este parâmetro for definido como true, o cliente tentará as conexões em paralelo, permitindo conectividade mais rápida e, se necessário, failovers de cliente mais rápidos:
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI; MultiSubnetFailover=True

Quando ocorre um failover, as conexões do cliente são redefinidas e a propriedade do Ouvinte do AG é movida para a instância do SQL Server que assume a função de réplica primária. O endpoint VNN é então vinculado aos novos endereços IP e portas TCP da nova instância de réplica primária. Dependendo do cliente, ocorrerá uma reconexão automática ao AG ou o usuário poderá ter que reiniciar manualmente o aplicativo ou a conexão afetada.
Intenção do aplicativo

Um dos maiores motivos para implementar Grupos de Disponibilidade é fornecer a capacidade de aproveitar seus ambientes de backup ou recuperação de desastres para descarregar o trabalho de seu ambiente de produção. Esses servidores agora podem ser usados ​​para backups, análises, consultas e relatórios ad-hoc ou qualquer outra operação em que seja suficiente ter uma cópia somente leitura do banco de dados.

Para fornecer acesso somente leitura às suas réplicas secundárias, o parâmetro de cadeia de conexão ApplicationIntent é usado. Uma lista de roteamento opcional somente leitura de pontos de extremidade do SQL Server pode ser configurada em cada réplica. Essa lista é usada para redirecionar solicitações de conexão de cliente que usam o parâmetro ApplicationIntent=ReadOnly para a primeira réplica secundária disponível que foi configurada com um filtro de intenção de aplicativo apropriado.
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI; MultiSubnetFailover=True;ApplicationIntent=ReadOnly;
Filtragem de intenção do aplicativo

Para facilitar a intenção do aplicativo dos clientes que se conectam ao seu grupo de disponibilidade, cada instância do SQL Server no grupo deve ser configurada com um filtro de intenção do aplicativo apropriado. O filtro determina quais tipos de conexões cada réplica aceitará.

Uma réplica primária configurada para ter Conexões na Função Primária de “Permitir todas as conexões” aceitará todas as conexões feitas por meio do Ouvinte do AG. Uma réplica primária configurada como “Permitir conexões de leitura/gravação” rejeitará qualquer conexão que especifique “ApplicationIntent=ReadOnly”.



Ao configurar as réplicas, você também deve definir se cada uma será ou não uma Secundária Legível. Uma réplica configurada como “Não” recusará todas as conexões. Supõe-se que essa réplica seja usada apenas para failover em uma situação de recuperação de desastres. Se a réplica secundária estiver configurada como “Sim”, todas as conexões serão permitidas, mas apenas para acesso de leitura, mesmo que “ApplicationIntent=ReadOnly” não seja especificado. Por fim, se o secundário estiver configurado como “Intenção somente leitura”, somente os clientes que especificarem “ApplicationIntent=ReadOnly” poderão se conectar.


Roteamento somente leitura

Agora que sabemos como configurar o Application Intent nas instâncias do servidor e criar as strings de conexão necessárias, precisamos configurar o roteamento somente leitura do Grupo de Disponibilidade. Quando você se conecta ao AG Listener usando a cadeia de conexão conforme definido acima, o listener consulta a instância de réplica primária e determina se a conexão deve ser feita com o primário (leitura/gravação) ou com um secundário somente leitura. Para fazer isso, uma lista de roteamento deve ser criada para CADA réplica de disponibilidade que é usada se e quando a réplica assume a função de primária. Normalmente, a prática recomendada é incluir cada URL de roteamento somente leitura para cada réplica secundária somente leitura com a URL da réplica local no final da lista. As solicitações de conexão com intenção de leitura são roteadas para o primeiro secundário legível disponível na lista de roteamento, não há balanceamento de carga entre os secundários.

Primeiro, modifique cada réplica para fornecer o URL de roteamento somente leitura:
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER01' WITH 
  (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER01' WITH 
  (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.mydomain.com:1433'));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.mydomain.com:1433'));

Em segundo lugar, modifique cada réplica para fornecer a lista de roteamento somente leitura a ser usada quando a réplica especificada estiver na função principal:
ALTER AVAILABILITY GROUP [Group1]  MODIFY REPLICA ON N'COMPUTER01' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));

A URL de roteamento deve estar no formato “TCP://:”. Para obter ajuda para determinar seu URL, consulte este blog e script criado por Matt Neerincx.

Conclusão


Com seu roteamento somente leitura configurado, AG Listener criado e seus aplicativos cliente usando as strings de conexão corretas, você deve ter uma conexão totalmente tolerante a falhas para seu Grupo de Disponibilidade. Certifique-se de levar algum tempo para testar sua conectividade e a capacidade de seus aplicativos de seguir seus servidores quando eles falham.