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 を実行しています。
以上で、クラスター上のリソースグループの所有者ノードの切り替えは完了です。