こんばんは。この記事では、AlwaysOn可用性グループを構成したSQL Serverにアプリケーションから接続する方法をまとめておきます。
それではまいります。
Contents
前提
- AlwaysOn可用性グループのリスナーにはDNN(分散ネットワーク名)リスナーを使用
- アプリケーションの言語は.NET 6(データベースにはMicrosoft.Data.SqlClientで接続)
アプリケーションの実装
結論、以下のようにDNNリスナーに接続するよう接続文字列を構成すればOKです。(AlwaysOn可用性グループを構成していないときは、Primaryのインスタンスに直接接続していたかと思います)
## 接続文字列の構成コードサンプル
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
★builder.DataSource = "<DNNリスナー名>.<ドメイン名>,<DNNリスナーポート>";
builder.UserID = "SQL Server認証のユーザ名";
builder.Password = "SQL Server認証のパスワード";
builder.InitialCatalog = "初期接続先データベース";
★builder.MultiSubnetFailover = true;
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
・・・
接続文字列を構成するときの、DataSourceの設定方法と、MultiSubnetFailover=Trueオプションがある点が通常と異なります。
この点については、以下の公式Docsで言及されています。
可用性グループの DNN リスナーの構成 – SQL Server on Azure VMs | Microsoft Docs
MultiSubnetFailoverオプションの説明はこちら。
アプリケーションが異なるサブネット上のAlways On可用性グループ (AG) または Always On フェールオーバー クラスター インスタンス (FCI) に接続している場合は、MultiSubnetFailover=true を設定すると、(現在) アクティブなサーバーの検出と接続が高速化されます。
SqlConnectionStringBuilder.MultiSubnetFailover プロパティ (System.Data.SqlClient) | Microsoft Docs
超簡単な動作検証。
接続先のSQL Server名を取得して表示する適当なアプリを作ります。内部では、上のような接続文字列を構成しています。
プライマリのSQL Server(sqlserver-0)をフェールオーバーさせてセカンダリだったsqlserver-1をプライマリに昇格させると・・・
アプリケーションの接続先インスタンスも切り替わっていることが確認できました。
以上、AlwaysOn可用性グループを構成したSQL Serverに接続する方法のメモでした。
少しでも参考になりましたら幸いです。
おしまい
おまけ
Always On可用性グループ・DNNリスナーをこれから構成するという方はこちらに手順のメモを残しているので、参考になりましたら幸いです。
そもそもAlwaysOn可用性グループとは、についてはこちら。
コメントを残す