AlwaysOn可用性グループを構成したSQL Serverにアプリケーションから接続する方法

こんばんは。この記事では、AlwaysOn可用性グループを構成したSQL Serverにアプリケーションから接続する方法をまとめておきます。

それではまいります。

前提

  • 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可用性グループとは、についてはこちら。

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。