Os Grupos de Disponibilidade podem fornecer failover contínuo (sem falhas de consulta)?

9

Eu tenho testado o recurso Grupos de Disponibilidade no SQL Server 2012 e estou descobrindo que há aproximadamente 15 segundos de tempo de inatividade quando o servidor principal faz failover no servidor secundário. Todas as consultas SQL executadas durante esse período falham até que a transição de failover seja concluída.

Existe alguma maneira de reduzir isso para 0 segundos e impedir que as consultas falhem durante a transição de failover?

Em outras palavras, existe uma maneira de fazer com que as consultas em execução durante a falha sejam redirecionadas para o servidor principal em vez de falhar ... e existe alguma maneira de obter novas conexões db para conectar-se imediatamente ao servidor secundário em vez de não conectar durante a transição de failover?

Atualmente, tenho 2 servidores configurados no grupo de disponibilidade.

John
fonte
11
Verifique esta pergunta (e as respostas): dba.stackexchange.com/questions/25124/…
Max Vernon
Somente o Oracle RAC pode fazer isso.
Richard Brown
Ou Você deve usar o linux loadballancer nas configurações apropriadas na frente do servidor sql, como o HAproxy.
kakaz

Respostas:

9

Não, não há como fazer failover de tempo de inatividade zero com o AlwaysOn (ou no SQL Server em geral, pelo que sei). Para fazer isso, o SQL Server ao qual você está conectado precisaria fazer a transferência de estado para outro nó no meio da consulta e, como muitos failovers são inesperados, isso não é possível.

No entanto, você pode ativar "secundários somente leitura" no AlwaysOn e seus leitores terão tempo de inatividade zero quando o servidor principal falhar - pois eles estão se conectando a uma cópia secundária de qualquer maneira para fazer suas consultas SELECT, eles não até observe o failover. Ainda haveria uma interrupção para os usuários com uma conexão "Write" aberta, mas pelo menos uma parte da sua base de usuários seria ininterrupta.

SqlRyan
fonte
Com os "secundários somente leitura" ativados, alguma solicitação de leitura ocorre no primário ou é sempre feita no secundário? E o que acontece se o servidor secundário apresentar uma falha nessa situação?
John John
A leitura em um secundário ocorre apenas se você configurar o cliente para se conectar ao secundário.
Max Vernon
11
Entendo, isso requer um aplicativo cliente mais inteligente.
John
@ JohnHughes: Confira este documento da Microsoft (no meio da página 5): tinyurl.com/9dtvndv e esta postagem no blog: tinyurl.com/8cyr9za . Você não precisa necessariamente de um aplicativo mais inteligente - ao ativar o recurso, você pode especificar que qualquer aplicativo possa se conectar ao secundário legível, mas qualquer tentativa de realizar uma transação DDL / DML falhará. Se você estiver usando o cliente nativo mais recente, poderá especificar "ReadIntent", o que significa que o cliente mais novo lerá o seu secundário, enquanto os clientes mais antigos continuarão a fazer todas as transações com o seu principal. Uma opção, mas é necessária alguma leitura.
SqlRyan
SqlRyan está correto, não há como fazer failover de uma instância do SQL Server usando o AlwaysOn Availability Groups sem que os clientes sejam desconectados.
mrdenny