Always On可用性グループ、常にユーザーを読み取り専用インスタンスにリダイレクトする


9

プライマリと読み取りが有効なセカンダリを持つAlways On可用性グループがあります。データベースを使用して、データベースに入れる予定のデータの正確性をチェックする実装チームのユーザーがいます。

ユーザーはデータベースから読み取る権限のみを持っていますが、AGリスナーを介して(SSMSを介して)接続する場合、常にアクティブノードに接続します。

私は彼らに直接読み取り専用インスタンスにアクセスするように試みましたが、彼らは彼らの方法で立ち往生しており、1日か2日後に彼らは再びアクティブノードに戻ってきました。

SQL Serverがこのユーザーを常に読み取り専用のインテントにして、そこにリダイレクトする方法を教えてください。

注:追加の接続パラメーターで 'ApplicationIntent = ReadOnly'を設定しようとしましたが、これはセカンダリノードにリダイレクトされないようであり、新しいスターター用に設定することを忘れるので、理想的なソリューションではありません。

SQL Server 2012 Enterprise、可用性グループ1プライマリ、同期コミット付きの読み取り可能なセカンダリ1。

ユーザーがリンクサーバーに接続したり、他のサーバーを介して接続したりするつもりはありません。ユーザーはSSMS(他のアプリケーションはありません)を介してデータベースに直接接続します。AGリスナー(またはその周辺)が利用可能であれば、そのユーザーをセカンダリノードに誘導できるようにします(読み取りアクセスしかできないため)。プライマリにアクセスしても意味がありません)ユーザーはマシンを移動し、アプリケーションインテントを追加するのを忘れるので、ユーザーは何もする必要がありません。また、それを追加の接続パラメーターに追加しても、常にセカンダリノードに移動するとは限りません。


以下のコメントに加えて、接続しているAGのデータベースを指定する必要があります。
swasheck 2018年

回答:


4

私はあなたの質問全体に対する答えはありませんが(今日https://dba.stackexchange.com/a/137844/36812で同様の質問に答えましたが)、ApplicationIntent = ReadOnlyを使用しても機能しないと述べました正しく。

読み取り専用のルーティングURLを設定しましたか?すぐに実行できるわけではないので、実行しないと、これらの設定とそのフラグは機能しません。私はそれがうまくいったなら、あなたはあなたの要件を再評価し始めることができると思います。

MSDNの説明https://msdn.microsoft.com/en-us/library/hh710054.aspxおよび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、あなたが望んでいるのは、ポイントアンドクリックのソリューションまたはどこかの設定です。残念ながら、これらのどれも現在「既製」の形で存在しません。Microsoftがこれを登録済みサーバーの接続設定に含めて保存できるようにしておけば、本当にすばらしいでしょう。

これにより、次の2つのオプションのいずれかを使用できます。

  • 自分で何かを書く
  • ユーザーの行動を変更する

SNAC-SQL Native Access ClientのMicrosoftダウンロードに遭遇し、要件を満たす可能性のあるものを探しました。これにより、小さなコードを記述して、読み取り専用のセカンダリに直接アクセスするためのボタンをユーザーに提供できます。 https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

他の可能性は、SSMSを介して接続するときに、ユーザーに接続パラメーターダイアログの入力を強制することです。この動作を強制するには、プライマリサーバーとセカンダリサーバーのログインを変更して、プライマリへの接続を拒否し、セカンダリへの接続を許可する必要があります。SQLエージェントジョブを使用して、サーバーのステータスを確認し、それに応じてログインを設定できます。

確かに、私は後者を実行しようとしませんでしたが、理論的にはそれでうまくいくはずです。


-2

これは現在、SQL Server 2019の機能のようです。

セカンダリプライマリレプリカの読み取り/書き込み接続のリダイレクト(常時オン可用性グループ)への公式ドキュメントで:

SQL Server 2019プレビューCTP 2.0では、Always On可用性グループにセカンダリからプライマリレプリカの読み取り/書き込み接続リダイレクトが導入されています。読み取り/書き込み接続のリダイレクトは、どのオペレーティングシステムプラットフォームでも使用できます。これにより、接続文字列で指定されたターゲットサーバーに関係なく、クライアントアプリケーション接続をプライマリレプリカに送信できます。

たとえば、接続文字列はセカンダリレプリカをターゲットにすることができます。可用性グループ(AG)レプリカの構成と接続文字列の設定に応じて、接続は自動的にプライマリレプリカにリダイレクトされます。


この新機能がどのように関連しているかをここで確認できるかわかりません。OPのシナリオは、この機能が意図するシナリオとは異なるようです。OPは読み取り専用接続をセカンダリ(読み取り専用)ノードにリダイレクトする必要がありますが、この新機能のドキュメントには、読み取り/書き込み接続をプライマリノードにリダイレクトするためのものと記載されています。問題の問題を解決するために新しい機能をどのように使用できるかについて詳しく説明していただけますか?
Andriy M
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.