Groupe de disponibilité Always On, redirige toujours l'utilisateur vers l'instance en lecture seule

9

Nous avons un groupe de disponibilité Always On avec un primaire et un secondaire en lecture. Nous avons un utilisateur pour l'équipe de mise en œuvre qui utilise la base de données pour vérifier l'exactitude des données qu'ils ont l'intention de mettre dans la base de données.

Les utilisateurs ont uniquement le droit de lire à partir de la base de données, mais lorsqu'ils se connectent (via SSMS) via l'AG Listener, ils se connectent toujours au nœud actif.

J'ai essayé de leur faire accéder directement à l'instance en lecture seule, mais ils sont bloqués à leur manière et après un jour ou deux, ils sont tous de retour sur le nœud actif.

Existe-t-il un moyen pour SQL Server de dire que cet utilisateur sera toujours intentionnellement en lecture seule et de le rediriger là-bas?

REMARQUE: J'ai essayé de définir 'ApplicationIntent = ReadOnly' dans les paramètres de connexion supplémentaires, mais cela ne semble pas rediriger vers le nœud secondaire, et ce n'est pas la solution idéale car ils oublieront inévitablement de le configurer pour de nouveaux démarreurs.

SQL Server 2012 Enterprise, groupe de disponibilité 1 principal, 1 secondaire lisible avec validation synchrone.

Je ne souhaite pas qu'un utilisateur se connecte à un serveur lié ou via un autre serveur. Les utilisateurs se connectent directement à la base de données via SSMS (aucune autre application) et j'aimerais que l'écouteur AG (ou quelque chose dans le coin) puisse diriger cet utilisateur vers un nœud secondaire s'il en existe un (car il n'y a qu'un accès en lecture) cela ne sert à rien d'accéder au primaire) sans que l'utilisateur n'ait rien à faire, car ils se déplacent sur les machines et oublient d'ajouter l'intention de l'application. Je trouve également que l'ajout de paramètres de connexion supplémentaires ne vous dirige pas toujours vers le nœud secondaire.

Ste Bov
la source
en plus des commentaires ci-dessous, vous devez spécifier la base de données dans l'AG à laquelle vous vous connectez.
swasheck

Réponses:

4

Je n'ai pas de réponse à votre question entière (bien que j'ai donné une réponse à une question similaire aujourd'hui https://dba.stackexchange.com/a/137844/36812 ) mais vous avez mentionné que l'utilisation d'ApplicationIntent = ReadOnly ne fonctionne pas correctement.

Avez-vous configuré des URL de routage en lecture seule? Parce que ce n'est pas fait hors de la boîte et si vous ne le faites pas, ces paramètres et cet indicateur ne fonctionneront pas. Je pense que si vous réussissez, vous pourrez commencer à réévaluer vos besoins.

Instructions sur MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx et plus faciles à faire dans 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
Cody Konior
la source
1

Ste, ce que vous voulez, c'est une solution pointer-cliquer ou un paramètre quelque part. Malheureusement, aucun de ceux-ci n'existe actuellement sous une forme "standard". Ce serait vraiment bien si Microsoft incluait cela dans les paramètres de connexion pour un serveur enregistré afin qu'il puisse être enregistré, mais hélas ils ne le font pas.

Cela vous laisse avec l'une des deux options:

  • Ecrivez quelque chose vous-même
  • Modifier le comportement des utilisateurs

J'ai parcouru un téléchargement Microsoft pour SNAC - SQL Native Access Client, à la recherche de quelque chose qui pourrait répondre à vos exigences. Cela vous permettrait d'écrire un petit morceau de code pour donner aux utilisateurs un bouton pour accéder directement au secondaire en lecture seule. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

L'autre possibilité est de forcer les utilisateurs à remplir la boîte de dialogue des paramètres de connexion lors de la connexion via SSMS. Pour forcer ce comportement, vous devrez modifier les connexions sur les serveurs principal et secondaire, en refusant la connexion au serveur principal et en autorisant la connexion aux ordinateurs secondaires. Vous pouvez utiliser un travail de l'Agent SQL pour vérifier l'état du serveur et définir les connexions en conséquence.

Certes, je n'ai pas essayé de faire ce dernier, mais en théorie, cela devrait fonctionner.

Steve Mangiameli
la source
-2

Il semble que ce soit désormais une fonctionnalité de SQL Server 2019.

De la redirection de connexion en lecture / écriture du réplica secondaire vers le réplica principal (groupes de disponibilité Always On) dans la documentation officielle:

L'aperçu SQL Server 2019 CTP 2.0 introduit une redirection de connexion secondaire / réplique primaire pour les groupes de disponibilité Always On. La redirection de connexion en lecture / écriture est disponible sur n'importe quelle plate-forme de système d'exploitation. Il permet aux connexions des applications client d'être dirigées vers le réplica principal, quel que soit le serveur cible spécifié dans la chaîne de connexions.

Par exemple, la chaîne de connexion peut cibler une réplique secondaire. Selon la configuration de la réplique du groupe de disponibilité (AG) et les paramètres de la chaîne de connexion, la connexion peut être automatiquement redirigée vers la réplique principale.

Mat
la source
Je ne suis pas sûr de pouvoir voir en quoi cette nouvelle fonctionnalité est pertinente ici. Le scénario de l'OP semble différent de celui auquel cette fonctionnalité est destinée. L'OP souhaite rediriger les connexions en lecture seule vers un nœud secondaire (lecture seule), tandis que la documentation de cette nouvelle fonctionnalité indique qu'il s'agit de rediriger les connexions en lecture / écriture vers le nœud principal. Pourriez-vous expliquer comment la nouvelle fonctionnalité pourrait être utilisée pour résoudre le problème en question?
Andriy M