web-dev-qa-db-ja.com

この可用性グループで読み取り専用ルーティングが機能しないのはなぜですか?

まず、これがすでに他の場所で回答されている場合は、申し訳ありません。私の正確な状況を説明する記事やスレッドを見つけることはできませんでしたが、完璧なGoogle-fuはありません。

それが邪魔にならないように、これが私の状況です:私はSQL Server 2017(14.0.1000.169)エンタープライズ環境で3つのAGレプリカ(1つはプライマリ、1つは同期コミットのセカンダリ、もう1つは非同期コミットのセカンダリ)を使用しており、 ApplicationIntent=ReadOnlyを使用してリスナーに接続し、AGデータベースを指定すると、次のエラーが発生します。

SQL Serverへの接続を確立しているときに、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできません。インスタンス名が正しいかどうか、およびSQL Serverがリモート接続を許可するように構成されているかどうかを確認してください。

ApplicationIntentフラグを指定しない場合、またはデータベースを指定しない場合、問題なく接続されます。これは私がすでにチェックしたものです:

  • リスナーが設定され、通常どおり接続できます。
  • FQDNとTCPそのインスタンスのポートを使用して、レプリカごとに読み取り専用ルーティングURLが構成されています(提供されたスクリプトを実行 ここ して、それらが正しいことを確認します) 。
  • 読み取り専用ルーティングリストは、レプリカごとに構成されます。
  • 同期セカンダリはSynchronizedステータスにあり、非同期セカンダリはSynchronizingステータスにあります。
  • セカンダリレプリカは、すべての接続を許可するように設定され(ALLOW_CONNECTIONS = ALL)、独自のインスタンス名を使用して直接クエリできます。

レプリカをホストする各SQL Serverインスタンスは、エンドポイントURLと読み取り専用ルーティングURL(3つのインスタンス間で6つの異なるポート)の両方に、他とは異なるTCPポートを使用しています。リスナーはこれらすべてとは別のポートでリッスンしていますが、これは問題とは関係ないと思いますが、念のために言及します。

上記で述べたように、私が見つけることができたすべての結果は、ルーティングリストなどを設定していない人たちであったため、私は正確な状況に役立つものは何も見つかりませんでした。ここでの次のステップに関するアイデア、または私が見逃している可能性があるものはありますか?環境に関する追加情報が必要な場合はお知らせください。

4
RollingDBA

いつものように、人間の要素が問題でした。 3つのレプリカすべての読み取り専用ルーティングURLで、プライマリレプリカのサーバー名を誤って使用したことがわかりました。何十回も見ても、それぞれの名前の文字の違いが1つしかないため、見つけづらくなりました。

URLをプルするように要求してくれた@SeanGallardyに感謝しました。

誠意をもって支援してくれた@clifton_hに感謝します。 Y'all good people!

2
RollingDBA

リスナーはポート1433を使用するように構成されていますか?そうでない場合は、接続文字列でポートを指定する必要があります。

0
SQLcyclopedia

私にも同じ問題がありましたが、代わりにFQDNでmachinename.localを使用することで、なんとか機能させることができました。

0
BeginnerDBADan