クラスターの共有記憶域(CSV)を用いたフェールオーバークラスターを導入した経験のある方で、検証環境の断線試験では期待通りのフェールオーバーをするのに、商用環境で運用開始した後に実際にフェールオーバーが生じた際に思ったように動作してくれなかったという経験があるエンジニアの方がいらっしゃるかもしれません。
CSVを用いたフェールオーバークラスターでは、VSSの差分領域が大きくなったり、断片化していると、
- フェールオーバーに想定よりも長い時間がかかる
- スナップショットのマウント/アンマウントに長い時間がかかる
場合があります。NTFSまたはReFSでボリュームをマウントまたはアンマウントする際に、ボリュームのスナップショットについてもマウントまたはアンマウント処理を実施しますが、スナップショットの差分領域サイズが大きく、断片化している場合に処理に数分かかってしまう場合があることがこの原因です。これによって、フェールオーバー動作も長くなってしまう場合があります。
これを回避するには、KB2878635とKB2903939の一部として導入されたCSVソフトウェアスナップショットライフサイクルマネジメント メカニズムを利用し、CSVのスナップショットの最大差分領域サイズ(SnapshotDiffSizeプロパティ)とスナップショットの有効期間(SnapshotAgeLimit)を適切な値に調整します。
SnapshotDiffSizeの設定
SnapshotDiffSize はデフォルトではCSVボリュームサイズの20%に設定されています。最小サイズは320MB、最大サイズは1TBです。過去のスナップショットが長期に渡って保存されていたり、IO処理が大量に行われて大量の差分が発生するなどして、差分領域がこのスナップショットの最大差分領域サイズを超えた場合、Volsnapは自動的に古いスナップショットを削除します。古いスナップショットが削除されることで、関連づけられたバックアップが機能しなくなる原因となります。
大量にIO処理が走る環境で、差分が大量に発生することから恒常的に差分領域が足りない場合、Powershellから手動でこのサイズを大きく割り当てますが、CSVのフェールオーバーが遅い問題を回避するには、差分最大領域サイズは小さなサイズに指定します。
Get-ClusterSharedVolume <CSVディスク名> | Set-ClusterParameter snapshotdiffsize <スナップショットの差分最大サイズ(MB)>
SnapshotAgeLimitの設定
スナップショットを作成する期間はデフォルトで7日間に指定されています。SnapShotAgeLimitプロパティでは、1日~60日の間で任意の値を指定することができます。
CSVのフェールオーバーが遅い問題を回避するにはこの期間も、Powershellから短く変更することを検討します。
Get-ClusterResourceType "physical disk" | Set-ClusterParameter snapshotagelimit <スナップショット期間を日単位で指定>
参考:CSV failover time is longer than expected in Windows failover cluster