La forma en que siempre me gusta visualizar soluciones de alta disponibilidad es la siguiente:
Instancia de clúster de conmutación por error de SQL Server (FCI)
¿Qué es altamente disponible? Toda la instancia. Eso incluye todos los objetos de servidor (inicios de sesión, trabajos del Agente SQL Server, etc.). Esto también incluye bases de datos y sus entidades que contienen. Es una gran solución para instancias de SQL Server de alta disponibilidad, ya que ese será el nivel de contención con esta solución dada.
¿Qué pasa con los informes? Ninguno, NULL, inexistente. Una instancia de clúster de conmutación por error tiene un nodo activo que entrega el grupo de clúster que contiene la instancia, VNN, etc. y todos los demás nodos son pasivos, inactivos (en lo que respecta al grupo de clúster actual) y esperan una conmutación por error.
¿Qué sucede cuando hay una conmutación por error? El tiempo de inactividad para un FCI estará determinado por la cantidad de tiempo que el nodo pasivo tarda en tomar el recurso del clúster y poner la instancia de SQL Server en un estado de ejecución. Esto suele ser mínimo en el tiempo.
¿Alguna abstracción del cliente? Sí, esto se integrará de forma innata con el nombre de red virtual para la instancia del clúster de conmutación por error. Esto siempre apuntará al nodo activo que actualmente está entregando el recurso de clúster de SQL Server.
Grupos de disponibilidad AlwaysOn
¿Qué es altamente disponible? Un grupo de disponibilidad será la contención lógica de alta disponibilidad aquí, mientras que un grupo de disponibilidad consta de varias bases de datos y un nombre de red virtual (el oyente, un recurso de clúster opcional). Vale la pena señalar que los objetos del servidor, como los inicios de sesión y los trabajos del Agente SQL Server, no serán parte de la solución de alta disponibilidad, y se debe tener especial consideración para garantizar que se implementen correctamente con un grupo de disponibilidad. No es un requisito demasiado pesado, pero debe ser atendido.
¿Qué pasa con los informes? Esta es una gran solución para informar, aunque probablemente no usaría una réplica sincrónica como mi instancia de informes. Hay dos relaciones de confirmación, sincrónica y asincrónica. En mi opinión y por lo que he visto en la práctica, es que su réplica secundaria síncrona está allí esperando un desastre. Piense en ello como esa réplica que está lista para realizar una conmutación por error sin pérdida de datos en caso de un problema. Luego, hay réplicas asíncronas que pueden manejar esa carga de trabajo de informes. No está utilizando esta réplica como la solución mencionada anteriormente, sino más para cosas como los informes. Las cargas de trabajo de informes pueden apuntar a esta réplica (ya sea directa o indirectamente a través del enrutamiento de solo lectura a través del oyente).
¿Qué sucede cuando hay una conmutación por error? Para una réplica secundaria de confirmación síncrona que se combina con la conmutación por error automática, este será el cambio de estado de la función de réplica de SECONDARY_NORMAL a PRIMARY_NORMAL. Para que haya una conmutación por error automática, debe tener una réplica secundaria síncrona que esté actualmente sincronizada, y lo que se implementa es la Política de conmutación por error flexible para determinar cuándo, en realidad, debería ocurrir esta conmutación por error. Esa política es de hecho configurable.
¿Alguna abstracción del cliente? Sí, opcionalmente puede configurar un oyente de AlwaysOn Availability Group. Esto es básicamente solo un nombre de red virtual (puede verse a través de WSFC como un recurso de clúster en el grupo de clúster de AG) que apunta a la réplica principal actual. Esta es una parte clave para cambiar su carga de trabajo de informes, así como para configurar una lista de enrutamiento de solo lectura en cualquier servidor que desee redirigir el tráfico de ReadOnly (esto se configura a través de la cadena de conexión, con .NET Framework Provider para SQL Servidor, este será el parámetro Intención de aplicación , establecido en Solo lectura ). También deberá establecer una URL de enrutamiento de solo lectura para cada réplica que desee recibir esta carga de trabajo de informes mientras esté en la función de réplica secundaria.
Replicación transaccional
¿Qué es altamente disponible? Esto es discutible, pero no voy a decir nada . No veo la replicación como una solución de alta disponibilidad. Sí, las modificaciones de datos se envían a los suscriptores, pero estamos hablando a nivel de publicación / artículo. Esto va a ser un subconjunto de los datos (podría incluir todos los datos, pero eso no se aplicará. Es decir, crea una nueva tabla en la base de datos del editor, y eso no se enviará automáticamente a los suscriptores). En cuanto a HA, este es el fondo del barril y no lo agruparé allí con una solución de HA sólida como una roca.
¿Qué pasa con los informes? Una gran solución para informar sobre un subconjunto de datos, no hay duda al respecto. Si tiene una base de datos de 1 TB que es altamente transaccional y desea mantener esa carga de trabajo de informes fuera de la base de datos OLTP, la replicación transaccional es una excelente manera de enviar un subconjunto de datos a un suscriptor (o suscriptores) para la carga de trabajo de informes. ¿Qué sucede si de esos 1 TB de datos su carga de trabajo de informes es solo de unos 50 GB? Esta es una solución inteligente y relativamente configurable para satisfacer las necesidades de su negocio.
Resumen
Todo se reduce a un puñado de preguntas que deben ser respondidas (en parte por el negocio):
- ¿Qué necesita estar altamente disponible ?
- ¿Qué dicta el SLA para HA / DR?
- ¿Qué tipo de informes se llevarán a cabo y qué latencias son aceptables?
- ¿Qué necesitamos manejar con HA dispersa geográficamente ? (la replicación de almacenamiento es costosa, pero imprescindible con una FCI. Los AG no requieren almacenamiento compartido de instancias independientes, y podría usar un testigo de uso compartido de archivos para el quórum, lo que podría eliminar la necesidad de almacenamiento compartido)