Use o HAProxy para fornecer tolerância a falhas para servidores SQL espelhados

3

Estamos no meio da criação de nosso ambiente de produção para um próximo produto da web. Para esta pilha, um SQL Server 2008 primário será usado para operações de banco de dados ao vivo e um SQL Server 2008 secundário obterá seus dados espelhados do SQL Server primário (via built-in do SQL Server Mirroring ). O serviço de relatórios será executado no SQL Server secundário enquanto ele tiver um hot standby quando o SQL Server primário ficar indisponível.

No nível do aplicativo, temos duas opções:

  1. A detecção de falhas foi implementada na camada do aplicativo, portanto, se o SQL Server principal não estiver respondendo, faça com que o nosso DAL atinja o SQL Server secundário. OU
  2. A camada do aplicativo deve apontar para um vip e ter a detecção de falha do manipulador HAProxy.

A questão é, a opção 2 é uma opção viável?

OBSERVAÇÃO: Entendemos que existem outras maneiras de fornecer alta disponibilidade no nível de banco de dados (como clustering), mas estamos buscando uma solução que seja econômica.

    
por Jason 29.01.2010 / 04:10

2 respostas

4

O que você quer dizer com 'dados espelhados'?

Você pode ter espelhamento de banco de dados, caso em que o cliente (ou seja, seu DAL) pode usar o FailoverPartner na cadeia de conexão e seguir o evento de failover e se conectar ao novo principal. Seu relatório seria executado em instantâneos de banco de dados, não no próprio banco de dados, pois o espelho não está disponível.

Você pode ter um cluster de failover e o cliente se conecta ao nome do recurso do cluster para começar e ele não está ciente do nome do host do nó ativo para começar, mas isso não dá acesso a dados no parceiro em espera.

Você pode ter o espelhamento de hardware, mas esse é um tópico separado.

Alguns dizem que a replicação é uma opção, não estou nesse campo.

E ... praticamente é isso. Curta de fabricar sua própria tecnologia de espelhamento de dados interna, o que quer que isso signifique.

Atualizado

Se você usar o Espelhamento de banco de dados, basta especificar o parceiro de failover na cadeia de conexão, consulte Conectando clientes a um banco de dados espelhado . Seu aplicativo deve manipular consistência transacional em face de eventos de failover. O evento de failover desconectará abruptamente os clientes e uma exceção será levantada no código do cliente. Qualquer transação pendente será anulada. O código do cliente deve se reconectar, ler o estado persistente e retomar o trabalho a partir do estado encontrado no banco de dados. Aplicações escritas corretamente irão lidar com isso graciosamente e sem problemas.

O espelho está sempre offline e não pode ser acessado. Se você quiser executar relatórios no espelho, deverá fazer um instantâneo do banco de dados e executar os relatórios no instantâneo. O instantâneo deve ser periodicamente atualizado (descartado e recriado). Veja Espelhamento de banco de dados e instantâneos do banco de dados .

Os balanceadores de carga da camada de rede não têm nada a ver com o espelhamento e não resolvem nada.

    
por 29.01.2010 / 09:02
1

Que tal nenhuma das opções acima?

Por favor, esclareça o que você quer dizer com servidores sql espelhados. Você está usando uma SAN de algum tipo para fazer o espelhamento ou usando a função de espelhamento incorporada do SQL Server?
Posso ver como você pode usar o HAProxy na camada da Web, mas por que fazer isso com o SQL Server? há outras opções de HA muito mais suportadas com o SQL Server, como clustering, mirroring & replicação. Eu investigaria os primeiros.

    
por 29.01.2010 / 11:43