Utilice HAProxy para proporcionar tolerancia a fallos para servidores SQL reflejados

Utilice HAProxy para proporcionar tolerancia a fallos para servidores SQL reflejados

Estamos en medio de la construcción de nuestro entorno de producción para un próximo producto web. Para esta pila, se utilizará un SQL Server 2008 primario para operaciones de bases de datos en vivo y un SQL Server 2008 secundario obtendrá sus datos reflejados desde el SQL Server primario (a través de la interfaz integrada de SQL Server).Duplicacióncapacidad). Haremos que el servicio de informes se ejecute en el servidor SQL secundario mientras que tendrá un modo de espera activo cuando el servidor SQL principal deje de estar disponible.

A nivel de aplicación, tenemos 2 opciones:

  1. Implemente la detección de fallas en el nivel de aplicación, de modo que si el servidor SQL principal no responde, haga que nuestro DAL acceda al servidor SQL secundario. O
  2. Haga que el nivel de la aplicación apunte a un vip y haga que HAProxy maneje la detección de fallas.

La pregunta es: ¿es la opción n.° 2 una opción viable?

NOTA: Entendemos que existen otras formas de proporcionar alta disponibilidad a nivel de base de datos (como la agrupación en clústeres), pero nuestro objetivo es encontrar una solución que sea rentable.

Respuesta1

¿Qué quiere decir con "datos reflejados"?

Puede tener una duplicación de la base de datos, en cuyo caso el cliente (es decir, su DAL) puede usar FailoverPartner en la cadena de conexión y seguir el evento de conmutación por error y conectarse al nuevo principal. Sus informes se ejecutarán a partir de instantáneas de la base de datos, no de la base de datos en sí, ya que el espejo no está disponible.

Puede tener un clúster de conmutación por error y el cliente se conecta al nombre del recurso del clúster para comenzar y no conoce el nombre de host del nodo activo para comenzar, pero esto no le brinda ningún acceso a los datos del socio en espera.

Puede tener duplicación de hardware, pero ese es un tema aparte.

Algunos dicen que la replicación es una opción, pero yo no estoy en ese campo.

Y... prácticamente eso es todo. Aparte de desarrollar su propia tecnología interna de duplicación de datos, sea lo que sea que eso signifique.

Actualizado

Si utiliza Database Mirroring, simplemente especifique el socio de conmutación por error en la cadena de conexión, consulteConexión de clientes a una base de datos reflejada. Su aplicación debe manejar la coherencia transaccional frente a eventos de conmutación por error. El evento de conmutación por error desconectará abruptamente a los clientes y se generará una excepción en el código del cliente. Cualquier transacción pendiente será abortada. El código del cliente debe volver a conectarse, leer el estado persistente y reanudar el trabajo desde el estado encontrado en la base de datos. Las aplicaciones escritas correctamente manejarán esto con gracia y sin problemas.

El espejo siempre está fuera de línea y no se puede acceder a él. Si desea ejecutar informes en el espejo, debe tomar una instantánea de la base de datos y ejecutar los informes en la instantánea. La instantánea debe actualizarse periódicamente (eliminarse y volverse a crear). VerDuplicación de bases de datos e instantáneas de bases de datos.

Los balanceadores de carga de la capa de red no tienen nada que ver con la duplicación y no resuelven nada.

Respuesta2

Qué tal si¿Ninguna de las anteriores?

Aclare lo que quiere decir con servidores SQL reflejados. ¿Está utilizando algún tipo de SAN para realizar la duplicación o está utilizando la función de duplicación integrada de SQL Server?
Puedo ver cómo se podría usar HAProxy en el nivel web, pero ¿por qué hacer esto con SQL Server? Hay otras opciones de HA mucho más compatibles con SQL Server, como agrupación en clústeres, duplicación y replicación. Yo los investigaría primero.

información relacionada