Use HAProxy para fornecer tolerância a falhas para SQL Servers espelhados

Use HAProxy para fornecer tolerância a falhas para SQL Servers espelhados

Estamos no meio da construçã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 em tempo real e um SQL Server 2008 secundário obterá seus dados espelhados do SQL Server primário (por meio do SQL Server integradoEspelhamentocapacidade). Faremos com que o Report Service seja executado no SQL Server secundário enquanto ele estiver em espera ativa quando o SQL Server primário ficar indisponível.

Ao nível da aplicação, temos 2 opções:

  1. Implemente a detecção de falhas na camada do aplicativo, portanto, se o SQL Server primário não responder, faça com que nosso DAL atinja o SQL Server secundário. OU
  2. Faça com que a camada do aplicativo aponte para um vip e faça com que o HAProxy lide com a detecção de falhas.

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

NOTA: Entendemos que existem outras maneiras de fornecer alta disponibilidade no nível do banco de dados (como clustering), mas nosso objetivo é uma solução que seja econômica.

Responder1

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

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

Você pode ter um cluster de failover e o cliente se conectar ao nome do recurso do cluster para começar e não ter conhecimento do nome do host do nó ativo para começar, mas isso não lhe dará nenhum acesso aos dados no parceiro em espera.

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

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

E... basicamente é isso. Exceto criar sua própria tecnologia interna de espelhamento de dados, seja lá o que isso signifique.

Atualizada

Se você usar o Database Mirroring, basta especificar o parceiro de failover na cadeia de conexão. ConsulteConectando clientes a um banco de dados espelhado. Seu aplicativo deve lidar com a consistência transacional diante de eventos de failover. O evento de failover desconectará abruptamente os clientes e uma exceção será gerada no código do cliente. Qualquer transação pendente será abortada. O código do cliente deve se reconectar, ler o estado persistido e retomar o trabalho a partir do estado encontrado no banco de dados. Aplicativos escritos corretamente lidarão com isso de maneira elegante e sem problemas.

O espelho está sempre offline e não pode ser acessado. Se desejar executar relatórios no espelho, você deverá obter uma captura instantânea do banco de dados e executar os relatórios na captura instantânea. O instantâneo deve ser atualizado periodicamente (descartado e recriado). VerEspelhamento de banco de dados e instantâneos de banco de dados.

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

Responder2

Que talnenhuma das acima?

Por favor, esclareça o que você quer dizer com servidores SQL espelhados. Você está usando algum tipo de SAN para fazer espelhamento ou usando a função de espelhamento integrada do SQL Server?
Posso ver como você poderia usar o HAProxy na camada web, mas por que fazer isso com o SQL Server? existem outras opções de HA muito mais suportadas com o SQL Server, como clustering, espelhamento e replicação. Eu investigaria isso primeiro.

informação relacionada