¿Pueden los grupos de disponibilidad proporcionar conmutación por error sin problemas (sin fallas de consulta)?

9

He estado probando la función Grupos de disponibilidad en SQL Server 2012 y descubro que hay aproximadamente 15 segundos de tiempo de inactividad cuando el servidor primario falla al servidor secundario. Todas las consultas SQL ejecutadas durante este tiempo fallan hasta que se completa la transición de conmutación por error.

¿Hay alguna forma de reducir esto a 0 segundos y evitar que las consultas fallen durante la transición de conmutación por error?

En otras palabras, ¿hay alguna manera de ejecutar las consultas durante el fallo para ser redirigido al servidor primario en lugar de fallar ... y hay alguna manera de obtener nuevas conexiones de db para conectarse inmediatamente al servidor secundario en lugar de fallar? conectarse durante la transición de conmutación por error?

Actualmente tengo 2 servidores configurados en el Grupo de disponibilidad.

Juan
fuente
1
Compruebe esta pregunta (y las respuestas): dba.stackexchange.com/questions/25124/…
Max Vernon
Solo Oracle RAC puede hacer eso.
Richard Brown
O debe usar linux loadballancer en la configuración adecuada frente al servidor sql, como HAproxy.
kakaz

Respuestas:

9

No, no hay forma de realizar una conmutación por error de tiempo de inactividad cero con AlwaysOn (o en SQL Server en general, por lo que yo sé). Para hacer eso, el SQL Server al que está conectado tendría que hacer una transferencia de estado a otro nodo a mitad de la consulta, y dado que muchas fallas son inesperadas, eso no es posible.

Sin embargo, puede habilitar "secundarios de solo lectura" en AlwaysOn, y luego sus lectores tendrían tiempo de inactividad cero cuando el servidor primario falla, ya que de todos modos se están conectando a una copia secundaria para hacer sus consultas SELECT, incluso nota la conmutación por error. Todavía habría una interrupción para los usuarios con una conexión de "Escritura" abierta, pero al menos una parte de su base de usuarios sería ininterrumpida.

SqlRyan
fuente
Con "secundarios" de sólo lectura habilitadas, hacer cualquier solicitudes de lectura se producen en el primario o están siempre se hace en los secundarios? ¿Y qué sucede si el servidor secundario tiene una falla en esa situación?
John
La lectura en un secundario solo ocurre si configura el cliente para conectarse al secundario.
Max Vernon
1
Ya veo, así que eso requiere una aplicación de cliente más inteligente.
John
@JohnHughes: Consulte este documento de Microsoft (a la mitad de la página 5): tinyurl.com/9dtvndv y esta publicación de blog: tinyurl.com/8cyr9za . No necesariamente necesita una aplicación más inteligente: cuando habilita la función, puede especificar que cualquier aplicación se pueda conectar al secundario legible, pero cualquier intento de realizar una transacción DDL / DML fallará. Si está utilizando el cliente nativo más nuevo, puede especificar "ReadIntent", lo que significa que el cliente más nuevo leerá desde su secundaria, mientras que los clientes más antiguos continuarán haciendo todas las transacciones contra su primario. Una opción pero se necesita algo de lectura.
SqlRyan
SqlRyan es correcto, no hay forma de conmutar por error una instancia de SQL Server utilizando Grupos de disponibilidad AlwaysOn sin que los clientes estén desconectados.
mrdenny