SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows Server 2012 で追加されたクラスター化されたタスクスケジューラーのジョブについて

leave a comment

クラスターのプライマリで動作させる必要のあるジョブをタスクスケジューラー等で実装する場合、作成したスクリプト内で判断して組むようにしていることが多かったので使う機会がなく、まとめたことがなかったのですが、ちょっと気になったので。

機能としては Windows Server のフェールオーバー クラスタ リングの新機能 に記載されている内容となります。

タスク スケジューラとの統合


Windows Server 2012 では、タスク スケジューラがフェールオーバー クラスタリングと統合されて、クラスター化されたタスクを構成できるようになりました。 クラスター化されたタスクとは、すべてのクラスター ノードに登録されるタスク スケジューラのタスクです。 タスクは、すべてのノードで有効にすることも、一部のノードで有効にすることもできます。

クラスター化されたタスクは、次の 3 つの方法で構成できます。

  • クラスター全体です。すべてのクラスター ノードには、タスクがスケジュールされます。

  • 任意のノード。 無作為に選ばれる 1 つのノードでタスクがスケジュールされます。

  • リソース固有。 指定したクラスター リソースを持つノードでのみタスクがスケジュールされます。

クラスター化されたタスクの構成と管理には、次の Windows PowerShell コマンドレットを使用できます。

  • Register-ClusteredScheduledTask

  • Set-ClusteredScheduledTask

  • Get-ClusteredScheduledTask

  • Unregister-ClusteredScheduledTask

この変更の利点

クラスター化されたタスクは、クラスター リソースを使ってアプリケーションやプロセスをスケジュールに基づいて実行するための柔軟なメカニズムを提供します。

設定については How to Configure Clustered Tasks with Windows Server 2012 にまとめられていますね。

GUI からの操作はできないので、PowerShell で設定をすることになります。
登録するタスクの内容は適当ですが、以下のようなスクリプトで、クラスター化されたタスクスケジューラーのジョブを作成することができます。

$Action = New-ScheduledTaskAction -Execute C:\windows\notepad.exe
Register-ClusteredScheduledTask -Cluster 2016-WSFC -TaskName MyResourceSpecificTask -TaskType AnyNode -Action $Action

 

クラスター化されたジョブを登録すると、「Task Scheduler」というクラスターグループが追加され、その中に「Task Scheduler」というクラスターリソースが登録されます。

image

ジョブの登録を行うと、クラスターの各ノードの「\Microsoft\Windows\Failover Clustering」にジョブが登録されます。

image

 

クラスター化されたジョブをどのノードで実行するかはこのクラスターリソースが制御することになるようです。

先ほどのコマンドでは「TaskType = AnyNode」として実行をしています。

Register-ClusteredScheduledTask のヘルプから設定値は確認できますが、このオプションを使用することでどのノードで実行をするかを制御することができます。

— ResourceSpecific. Resource specific cluster nodes.

— AnyNode. Active cluster nodes.

— ClusterWide. All cluster nodes.

AnyNode の場合はクラスターグループが実行されているノードでジョブが実行されます。

# クラスターグループが実行されているノード以外では、該当のジョブが「無効」の状態となります。

この場合は、クラスター内の 1 つのノードでのみ実行するジョブが設定できる感じですね。

ClusterWide にした場合は、すべてのノードで有効になっているジョブを作成することができますので、全ノードで定期的に実行したい場合はこれを使うことができます。

ResourceSpecific は特殊で「特定のクラスターリソース」がオンラインになっているノードで実行するジョブを作ることができます。

「AnyNode」は「Task Scheduler」というグループがオンラインになっているノードで実行されるのですが、このグループはどのノードで実行されているかの保証がありません。

特定のクラスターリソースがオンラインになっている場合に、そのノードで実行したいジョブを作成したい場合は、以下のようにクラスターリソースを指定します。

$Action = New-ScheduledTaskAction -Execute C:\windows\notepad.exe
Register-ClusteredScheduledTask -Cluster 2016-WSFC -TaskName MyResourceSpecificTask -TaskType ResourceSpecific -Resource AG01 -Action $Action

 

これにより、特定のリソースが動作しているノードでクラスター化されたジョブが実行される状態となります。

Written by masayuki.ozawa

1月 18th, 2016 at 8:57 pm

Posted in Windows Server

Tagged with

Leave a Reply

*