Siempre en el grupo de disponibilidad, siempre redirige al usuario a la instancia de solo lectura


9

Tenemos un grupo de disponibilidad Always On con un primario y un secundario habilitado para lectura. Tenemos un usuario para el equipo de implementación que usa la base de datos para verificar la exactitud de los datos que tienen la intención de poner en la base de datos.

Los usuarios solo tienen derechos para leer de la base de datos, pero cuando se conectan (a través de SSMS) a través de AG Listener siempre se conectan al nodo activo.

Intenté que accedan directamente a la instancia de solo lectura, pero están atascados en sus formas y después de un día o dos vuelven al nodo activo nuevamente.

¿Hay alguna manera para que SQL Server diga que este usuario siempre va a ser con intención de solo lectura y redirigirlo allí?

NOTA: He intentado configurar 'ApplicationIntent = ReadOnly' en los parámetros de conexión adicionales, pero esto no parece redirigir al nodo secundario, y no es la solución ideal, ya que inevitablemente olvidarán configurarlo para nuevos iniciadores.

SQL Server 2012 Enterprise, grupo de disponibilidad 1 primario, 1 secundario legible con confirmación sincrónica.

No tengo la intención de que un usuario se conecte a un servidor vinculado, ni a través de ningún otro servidor. Los usuarios se conectan directamente a la base de datos a través de SSMS (ninguna otra aplicación) y me gustaría que AG Listener (o algo por ahí) pueda dirigir a ese usuario a un nodo secundario si hay uno disponible (ya que solo tiene acceso de lectura allí no tiene sentido acceder al primario) sin que el usuario tenga que hacer nada, ya que se mueven alrededor de las máquinas y olvidarán agregar la intención de la aplicación. También encuentro que agregar eso a los parámetros de conexión adicionales no siempre lo dirige al nodo secundario.


Además de los comentarios a continuación, debe especificar la base de datos en el AG al que se está conectando.
swasheck

Respuestas:


4

No tengo una respuesta a su pregunta completa (aunque hoy respondí a una pregunta similar https://dba.stackexchange.com/a/137844/36812 ) pero mencionó que usar ApplicationIntent = ReadOnly no funciona correctamente.

¿Ha configurado URL de enrutamiento de solo lectura? Debido a que no está listo para usar y si no lo hace, esta configuración y esa bandera no funcionarán. Creo que si funciona, entonces podría comenzar a reevaluar sus requisitos.

Instrucciones en MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx y más fácilmente en PowerShell.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica

1

Ste, lo que quieres es una solución de apuntar y hacer clic o una configuración en algún lugar. Desafortunadamente, ninguno de estos existe actualmente en forma "lista para usar". Sería realmente bueno si Microsoft incluyera esto en la configuración de conexión para un Servidor Registrado para poder guardarlo, pero lamentablemente no lo hacen.

Esto te deja con una de dos opciones:

  • Escribe algo tu mismo
  • Cambiar comportamiento del usuario

Me encontré con una descarga de Microsoft para SNAC - SQL Native Access Client, buscando algo que pudiera cumplir con sus requisitos. Esto le permitiría escribir un pequeño código para que los usuarios tengan un botón para acceder directamente a la secundaria de solo lectura. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

La otra posibilidad es obligar a los usuarios a completar el diálogo de parámetros de conexión cuando se conectan a través de SSMS. Para forzar este comportamiento, deberá modificar los inicios de sesión en los servidores primario y secundario, negando la conexión a la primaria y permitiendo la conexión a las secundarias. Puede usar un trabajo de Agente SQL para verificar el estado del servidor y establecer inicios de sesión en consecuencia.

Es cierto que no he intentado hacer esto último, pero en teoría debería funcionar.


-2

Parece que ahora es una característica en SQL Server 2019.

Desde la redirección de conexión de lectura / escritura de réplica secundaria a primaria (Grupos de disponibilidad siempre activada) en la documentación oficial:

SQL Server 2019 preview CTP 2.0 presenta la redirección de conexión de lectura / escritura de réplica secundaria a primaria para los grupos de disponibilidad Always On. La redirección de conexión de lectura / escritura está disponible en cualquier plataforma de sistema operativo. Permite que las conexiones de la aplicación cliente se dirijan a la réplica principal independientemente del servidor de destino especificado en la cadena de conexiones.

Por ejemplo, la cadena de conexión puede apuntar a una réplica secundaria. Según la configuración de la réplica del grupo de disponibilidad (AG) y la configuración de la cadena de conexión, la conexión se puede redirigir automáticamente a la réplica principal.


No estoy seguro de poder ver cómo esta nueva característica es relevante aquí. El escenario del OP parece ser diferente del que esta característica está destinada. El OP quiere redirigir las conexiones de solo lectura a un nodo secundario (solo lectura), mientras que la documentación de esta nueva característica dice que es para redirigir las conexiones de lectura / escritura al nodo primario. ¿Podría explicar cómo podría usarse la nueva funcionalidad para resolver el problema en cuestión?
Andriy M
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.