2.10. Red Hat Virtualization の排他的なリソースおよび Sanlock

Red Hat Virtualization 環境の特定のリソースには排他的にアクセスする必要があります。
SPM ロールは、そのようなリソースの 1 つです。複数のホストが SPM になると、同じデータが 2 つの場所から同時に変更される可能性があるため、データが破損する危険性があります。
Red Hat Enterprise Virtualization 3.1 より以前のバージョンでは、safelease という VDSM 機能を使用して SPM が排他的に維持および追跡されていました。このリースは、データセンター内の全ストレージドメインにある特別な領域に書き込まれ、環境内のすべてのホストが、ネットワークに依存しない方法で SPM ステータスを追跡することが可能でした。VDSM のセーフリースでは、1 つのリソース (SPM ロール) の排他性のみが維持されました。
Sanlock は同じ機能を提供しますが、SPM ロールを、ロックできるリソースの 1 つとして扱います。追加リソースをロックできるため、Sanlock にはより大きな柔軟性があります。
リソースのロックが必要なアプリケーションは、Sanlock で登録できます。登録されたアプリケーションは、Sanlock がアプリケーションの代わりにリソースをロックするように要求して、他のアプリケーションがそのリソースにアクセスできないようにすることが可能です。たとえば、VDSM は SPM ステータスをロックする代わりに、Sanlock にその処理を行うように要求します。
ロックは、lockspace のディスクで追跡されます。各ストレージドメインには 1 つの lockspace があります。SPM リソースのロックの場合、各ホストがライブ状態であるかどうか (ライブネス) は、ホストがストレージに接続したときに Manager から受け取った hostid を更新できるかどうか、ホストがタイムスタンプを定期的に lockspace に書き込むことができるかどうかにより、lockspace で追跡されます。ids 論理ボリュームは、各ホストの一意 ID を追跡し、ホストが hostid を更新するたびに更新されます。SPM リソースは、ライブ状態のホストのみが保持できます。
リソースは、リース論理ボリュームのディスクで追跡されます。リソースは、リソースを取得したプロセスの一意な ID でディスク上のその表現が更新された場合に、取得されたと見なされます。SPM ロールの場合、SPM リソースは SPM リソースを取得した hostid で更新されます。
各ホストの Sanlock プロセスは、リソースが取得されたことを確認するためにリソースを一度だけチェックする必要があります。最初のチェック後に、Sanlock は、ロックされたリソースがあるホストのタイムスタンプが古くなるまで lockspace を監視できます。
Sanlock は、リソースを使用するアプリケーションを監視します。たとえば、VDSM では SPM ステータスと hostid が監視されます。ホストが Manager から hostid を更新できない場合は、hostid が lockspace のすべてのリソースで排他的に失われます。Sanlock は、リソースが取得されていないことを示すようリソースを更新します。
SPM ホストが、一定の期間に、ストレージドメインの lockspace にタイムスタンプを書き込むことができない場合、Sanlock のホストインスタンスは VDSM プロセスがそのリソースを解放するよう要求します。VDSM プロセスが応答する場合、そのリリースは解放され、別のホストが lockspace の SPM リソースを取得できます。
SPM ホスト上の VDSM がリソースを解放する要求に応答しない場合、ホスト上の Sanlock は VDSM プロセスを終了します。kill コマンドが失敗した場合、Sanlock は sigkill を使用して VDSM を終了しようとします。sigkill が失敗した場合、Sanlock は watchdog デーモンを使用してホストを再起動します。
ホスト上の VDSM が hostid を更新し、タイムスタンプを lockspace に書き込むたびに、watchdog デーモンは pet を受け取ります。VDSM がそのような処理を行えない場合、watchdog デーモン は pet を受け取らなくなります。watchdog デーモンが一定時間の間 pet を受け取らないと、ホストが再起動されます。この最終的な手段によって、確実に SPM リソースが解放され、別のホストが SPM リソースを取得できるようになります。