Alta disponibilidade do SQL Server - Espelhamento com MSCS?

2

Estou analisando as opções de alta disponibilidade para meu aplicativo com SQL Server.

Os requisitos são:

  • proteção contra alta de falha de armazenamento.
  • Acessibilidade de dados quando um dos servidores de banco de dados está passando por atualizações de software (por exemplo, interrupção planejada para os service packs do Windows Update / SQL Server).
  • Não deve envolver muito a aquisição de hardware.
  • O aplicativo é um aplicativo da Web ASP.NET.
  • Os usuários do aplicativo da web possuem suas próprias instâncias de banco de dados.

Eu já vi duas opções principais: clustering de failover do SQL Server e espelhamento do SQL Server.

Entendo que o clustering de failover do SQL Server exige a compra de uma matriz de discos compartilhada e não oferece nenhuma proteção se o armazenamento compartilhado ficar inativo (portanto, a documentação recomenda configurar um espelhamento entre dois clusters).

O espelhamento de banco de dados parece ser a opção mais barata (já que requer apenas dois servidores de banco de dados e uma simples caixa de testemunhas) - mas ouvi dizer que não funciona bem quando você tem um grande número de bancos de dados. O aplicativo que estou desenvolvendo envolve dar a cada cliente seu próprio banco de dados para o aplicativo - pode haver centenas de bancos de dados. Configurar o espelhamento não é problema, graças aos sistemas de automação que temos em funcionamento.

Meu último ponto diz respeito a como o failover funciona com relação a conexões de cliente - o cluster de failover do SQL Server usa MSCS, o que significa que o cluster é invisível para clientes - uma tentativa de conexão pode falhar durante o failover, mas uma reconexão simples . No entanto, o espelhamento, até onde eu sei, requer que o cliente esteja ciente dos parceiros espelhados: se o cliente não puder se conectar ao servidor principal, ele tentará o servidor secundário.

Eu estou querendo saber como isso funciona com relação ao pool de conexão em aplicativos ASP.NET - faz o failover de conexão do cliente significa que há uma potencial 2 segundos (assumindo 2000ms TCP tempo limite diretiva) pausa quando o pool de conexão tenta o servidor principal em cada tentativa de conexão?

Eu li em algum lugar que o espelhamento pode ser usado em cima do MSCS, o que significa que o cliente não precisa estar ciente do espelhamento (portanto, não haveria nenhum atraso potencial durante a conexão e também que nenhuma alteração precisaria ser feita para o cliente, nem mesmo a string de conexão) - no entanto, estou achando difícil obter documentação ou white papers sobre essa abordagem. Mas se for verdade, significa que o melhor método é Espelhar (para HA) com MSCS (para a ignorância do cliente e o desempenho da conexão).

... mas como isso se adapta a uma instância do servidor que pode conter centenas de bancos de dados espelhados?

    
por Dai 12.04.2012 / 03:16

1 resposta

1

Você está certo em que o espelhamento e o clustering podem ser usados juntos, mas acho que sua concepção de como funciona está um pouco errada. Se você quiser que seu aplicativo seja compatível com o espelhamento, será necessário definir a cadeia de conexão de forma que ela tenha o parceiro de failover especificado nela. Agora, se você tiver um failover de cluster, o que acontece depende de como você tem o espelhamento configurado. Se você tiver configurado para failover automático, o espelho assumirá e seu aplicativo se conectará ao parceiro de espelhamento. Se você tiver definido como failover manual, um dos outros nós do cluster para o primário iniciará o serviço SQL e o principal continuará a veicular o tráfego. Consulte o link para obter mais informações.

Como um aparte, o SQL 2012 introduziu uma nova maneira de fazer isso chamado "Always On". Pode resolver seus problemas com menos esforço.

    
por 12.04.2012 / 04:22