ラージビッグバナー(970x90)

Windows

AlwaysOnのステータスをSQL Server PowerShellで確認する方法

更新日:

ビッグバナー(piglog)728px

SQLServer で高可用性を実現するための機能として、AlwaysOnという機能があります。

このAlwaysOnを利用している際に、以下のようなコトをPowerShellを利用して確認することができます。

  • 可用性グループの状態
  • 可用性レプリカの状態
  • 可用性グループ内のプライマリサーバやセカンダリサーバのホスト名

などなど。

同期されていないときの調査やフェイルオーバーした際の状態確認などにも利用できると思います。この記事の内容を少し応用すれば、Zabbix などの監視ツールでフェイルオーバーしたかどうかの監視をすることもできます。

AlwaysOnのステータスをPowerShellで確認する

まず、PowerShellでSQLServerのインスタンスやオブジェクトを操作するためには、SQL Server PowerShell モジュールを利用する必要があります。

以下は、SQLServer PowerShell についてのMicrosoftのページからの引用です。

2 つの SQL Server PowerShell モジュールがあります。

SQLPS: このモジュールは (後方互換性のため) SQL Server のインストールに含まれていますが、今後更新されることはありません。 最新の PowerShell モジュールは SqlServer モジュールです。
SqlServer: このモジュールには、最新の SQL 機能をサポートする新しいコマンドレットが含まれています。 モジュールには、SQLPS 内のコマンドレットの更新バージョンも含まれています。

推奨は、SqlServerモジュールだが、SQLPS はSQLServer自体のインストールに含まれているため、追加の設定やインストールが不要で利用することができるということのようです。

今回は、別途インストールの必要がなく利用できる SQLPS を利用することにします。

コマンドプロンプトやPowerShellコンソールで、sqlps コマンドを最初に実行するだけで、SQLServerに接続することができます。

sqlps を実行したら、以下のコマンドを実行可能になります。

可用性グループとプライマリサーバの確認

以下の階層をGet-Childitemすることで、構成されている可用性グループを確認できる。

上記では、『AG_HOGE_DB』と『ALWAYS』という二つの可用性グループがあります。

※$(hostname)の変数は展開されてコマンドを実行しているホストの名前がはいります。
階層の構造としては以下のようになっているので自分のホスト名が入ればOKです。

where-objectで可用性グループ名を指定すれば、指定した可用性グループの情報だけが確認できる。

更に、この可用性グループのプライマリサーバのホスト名が知りたければ以下のように指定すれば良い。
こんな感じで「ホスト名だけ」がとれれば、例えば Zabbix で UserParameter を利用して、フェイルオーバーの監視なんかもできる。
zabbixで監視する方法は別の記事でまとめます。

スクリプトに書くときなんかは、一度変数に入れたほうが後で見たときにわかりやすいですね。

可用性レプリカの確認

以下のように実行することで、可用性グループ内の可用性レプリカ(AlwaysOnでクラスタを構成するホスト)の一覧を表示できる。

以下でAlwaysOnを構成するホストを指定すれば、そのホストだけの情報を取得できる。

そのホストが、現在PrimaryなのかSecondaryなのかを知りたければ以下。

この辺もフェイルオーバーを検知するための監視で使えますね。前回値から変化があった場合にアラートを発報させるようにすればフェイルオーバーを検知することができます。Zabbixでやるので別記事でまとめる予定です。

可用性グループ内の可用性レプリカの健全性を評価する

1.AvailabilityReplicas配下で各ノードの一覧を確認できる。

2.Test-SqlAvailabilityReplica コマンドレットを使うことで可用性レプリカ(各ホスト)のステータスを確認できる。

2-1.SQL-NODE01のステータスを確認する場合

2-2.ステータスだけとりたければ以下のように。

3-1.試しに SQL-NODE01 のSQLSERVERのサービスを停止してみると、HealthState が Healthy → Warning → Error に変化したところを確認できました。

4-1.エラー状態にある(健全でない)可用性レプリカを確認する場合

現在の各ノード(可用性レプリカ)の状態は以下。

4-2.エラーステータスのノード(可用性レプリカ)を取得する

4-3.ヘルシーステータス以外のノード(可用性レプリカ)を取得する

可用性データベースの健全性を確認する

SQL-NODE01のSQLServerがダウンしている状態で確認した結果。(SynchronizationState が NotSynchronizing と表示されています)

この結果に、Test-SqlDatabaseReplicaState コマンドレッドをかませると、ステータスを取得できる。

あとは同じやり方で、ステータスがヘルシー以外を取得する。

例えば、ステータスがヘルシー以外のホストを取得するとしたら以下のように。

可用性グループの健全性を確認する

Test-SqlAvailabilityGroup コマンドレットを使用して、可用性グループのパスを指定することでステータスを確認できる。

Test-SqlAvailabilityReplica コマンドレットを使用して片系のホストが Warning の状態で可用性グループのステータスを確認してみる。

やはり、方系が異常だと可用性グループとしては Error となりますね。

まとめ

実際に使えそうなやり方を紹介してみましたが、いかがでしょうか。

実際の運用では、手動でコマンドを利用して確認する、というよりも、Zabbixなどの監視ツールを利用してフェイルオーバーしたらアラートメールを送信する、などのように自動で検知する仕組みを用意する必要があると思いますが、AlwaysOnの状態確認の 基本のき ということでまとめてみました。

以上です。

↓↓↓ 持っていると便利な一冊 ↓↓↓

レクタングル (大)

レクタングル (大)

リンクユニット(レスポンシブ)

-Windows
-,

Copyright© ぴぐろぐ , 2019 All Rights Reserved.