2.10. Red Hat Virtualization における排他的リソースと Sanlock

Red Hat Virtualization 環境の特定のリソースには、排他的にアクセスする必要があります。

SPM のロールはそのようなリソースの 1 つです。複数のホストが SPM になると、同じデータが 2 つの場所から同時に変更される可能性があるため、データが破損するリスクがあります。

Red Hat Enterprise Virtualization 3.1 以前では、SPM の除外は、セーフリース と呼ばれる VDSM 機能を使用して維持および追跡されました。リースは、データセンター内のすべてのストレージドメインの特別な領域に書き込まれました。環境内のすべてのホストは、ネットワークに依存しない方法で SPM ステータスを追跡できます。VDSM のセーフリースは、SPM のロールという 1 つのリソースの独占権のみを維持していました。

Sanlock は同じ機能を提供しますが、SPM ロールをロック可能なリソースの 1 つとして扱います。Sanlock は、追加のリソースをロックできるため、より柔軟性があります。

リソースのロックが必要なアプリケーションは、Sanlock に登録できます。登録されたアプリケーションは、Sanlock が自分に代わってリソースをロックするように要求できるため、他のアプリケーションはそのリソースにアクセスできません。たとえば、VDSM が SPM ステータスをロックする代わりに、VDSM は Sanlock にロックするように要求するようになりました。

ロックは、ロックスペース のディスクで追跡されます。ストレージドメインごとに 1 つのロックスペースがあります。SPM リソースのロックの場合、各ホストの liveness は、ストレージに接続したときに Manager から受け取ったホスト ID を更新し、定期的にタイムスタンプをロックスペースに書き込むホストの機能によってロックスペースで追跡されます。ids 論理ボリュームは各ホストの一意の識別子を追跡し、ホストが hostid を更新するたびに更新されます。SPM リソースは、ライブホストのみが保持できます。

リソースは、leases 論理ボリュームのディスクで追跡されます。ディスクの表現が、それを取得したプロセスの一意識別子で更新した場合に、リソースが 取得 されることを意味します。SPM ロールの場合、SPM リソースは、それを取得した hostid で更新されます。

各ホストの Sanlock プロセスは、リソースが取得されていることを確認するために 1 回だけリソースをチェックする必要があります。最初のチェックの後、Sanlock は、ロックされたリソースを持つホストのタイムスタンプが古くなるまで、ロックスペースを監視できます。

Sanlock は、リソースを使用するアプリケーションを監視します。たとえば、VDSM は SPM ステータスとホスト ID について監視されます。ホストが Manager からホスト ID を更新できない場合は、ロックスペース内のすべてのリソースの排他性が失われます。Sanlock はリソースを更新して、リソースが使用されなくなったことを示します。

SPM ホストがストレージドメインのロックスペースにタイムスタンプを一定時間書き込むことができない場合、ホストの Sanlock のインスタンスは、VDSM プロセスがそのリソースを解放するように要求します。VDSM プロセスが応答すると、そのリソースが解放され、ロックスペース内の SPM リソースを別のホストが取得できます。

SPM ホスト上の VDSM がリソースを解放する要求に応答しない場合、ホスト上の Sanlock は VDSM プロセスを強制終了します。kill コマンドが失敗した場合、Sanlock は sigkill を使用して VDSM を強制終了しようとしてエスカレーションします。sigkill が失敗した場合は、Sanlock は ウォッチドッグデーモン に依存してホストを再起動します。

ホストの VDSM が hostid を更新し、ロックスペースにタイムスタンプを書き込むたびに、ウォッチドッグデーモンは ペット を受け取ります。VDSM がこれを実行できない場合、ウォッチドッグデーモンは pet されなくなります。ウォッチドッグデーモンが一定時間ペットを受信しないと、ホストを再起動します。この最終レベルのエスカレーションに達すると、SPM リソースが解放され、別のホストが取得できることが保証されます。