PowerShell で WSFC の所有者ノードを切り替える

PowerShell で、Windows Server フェールオーバー クラスター (WSFC) 内のクラスター化された役割 (リソースグループ) を、指定した所有者ノードに移動する方法でです。

PowerShell は、「フェールオーバー クラスター マネージャー」がインストールされたサーバー上で実行します。

全てのリソースグループを一括で切り替えるサンプル スクリプトもあります。

前提条件

本記事は、次の WSFC 構成を前提とした内容となります。

  • OS
    Windows Server 2019
  • クラスターノードのコンピューター名
    – Node01
    – Node02
  • クラスター名
    Cluster01
  • クラスター化された役割名
    – C01-role01
    – C01-role02

Cluster01 上のクラスター化されたリソースグループ (C01-role01、C01-role02、およびクラスター ディスク etc) の所有者ノードを、指定したノードに切り替えます。

PowerShell での実行ステップ

管理者権限の PowerShell プロンプトで、次のCmdletを実行します。

(1) クラスターのリソースグループ名を取得します。

Get-ClusterGroup -Cluster Cluster01

次のような結果が表示されます。

Name                OwnerNode  State
----                ---------  -----
C01-role01          Node01     Online
C01-role02          Node02     Online
クラスター グループ Node01     Online
使用可能記憶域      Node02     Offline

(2) 上記の結果表示された全ての Name に対して、所有者ノードの変更を実行します。
※ C01-role01 の所有者ノードを Node02 に変更する例です。

Move-ClusterGroup -Cluster Cluster01 -Name C01-role01 -Node Node02

次のような結果が表示されるので、OwnerNode が設定した内容になっていることを確認します。

Name       OwnerNode  State
----       ---------  -----
C01-role01 Node02     Online

所有者ノードを変更したいリソースグループに対して、同様に Move-ClusterGroup を実行します。

PowerShell スクリプト (一括切り替え)

指定したクラスター上の全てのリソースグループの所有者ノードを、一括で切り替えるサンプル スクリプトです。

Change-ClusterNode.ps1

Param(
    [string]$Cluster,
    [string]$Node
)

$groups = Get-ClusterGroup -Cluster $Cluster
foreach ($grp in $groups) {
    Move-ClusterGroup -Cluster $Cluster -Name $grp.Name -Node $Node
}

スクリプトの使い方

Cluster01 上の全てのリソースグループの所有者ノードを Node01 にする場合は、次のように実行します。

.\Change-ClusterNode.ps1 -Cluster Cluster01 -Node01

次のように、実行結果が表示されます。

Name             OwnerNode  State
----             ---------  -----
C01-role01       Node01     Online
C01-role02       Node01     Online
クラスター グループ Node01     Online
使用可能記憶域     Node01     Offline

スクリプトの中身の解説

スクリプトで実行している内容を、解説していきます。

Param(
    [string]$Cluster,
    [string]$Node
)

スクリプトを実行時に指定するオプションを定義しています。

上記のように記述することで、PowerShell のプロンプトでのオプション入力を補完してくれます。
例えば、オプション入力時に「-Cl」のように途中まで入力し[Tab]キーを押すと、「-Cluster」と自動的に入力できます。

$groups = Get-ClusterGroup -Cluster $Cluster

Cluster オプションで指定したクラスター上のリソースグループを全て取得し、$groups に格納しています。

foreach ($grp in $groups) {
    Move-ClusterGroup -Cluster $Cluster -Name $grp.Name -Node $Node
}

$groups に格納されたグループ情報を1個ずつ$grpに取り出し、逐次、foreach 内の処理を実施する。

foreach 内では、$grp のグループ名と Node オプションで指定した所有者ノード名を指定して、Move-ClusterGroup を実行しています。

以上で、クラスター上のリソースグループの所有者ノードの切り替えは完了です。