分散ロック・マネージャ (DLM) には,クラスタ内で連携して動作するプロセスが,共用リソース (raw ディスク・デバイスやプログラムなど) へのアクセスの同期をとるための機能があります。DLM によって共用リソースへのアクセスの同期を効率的にとるには,クラスタ内でリソースを共用するプロセスすべてが,DLM 機能を使用してそのリソースへのアクセスを制御しなければなりません。たとえば,分散型データベース・アプリケーションはロック・マネージャ・サービスを使用して,データベースに関連する共用ディスクへのアクセスの同期をとります。
アプリケーションは,名前付き共用リソースに対し,ロックを取得します。リソース名は,一次元の名前とツリー構造の名前のどちらにもできます。リソース・ツリーを使用すると,共用リソースの構造を反映する,ロックとサブロックの階層構造を作成することもできます。DLM には,次のような機能があります。
相互排他的データ・アクセス,制限付き共用データ・アクセス,完全な共用データ・アクセスが可能。
ロックを保持しているプロセスに対して,そのロックによって他のプロセスのリソースへのアクセスがブロックされる場合に通知が行われる。
リソースへのロック要求をキューイングしたプロセスに対して,その要求が許可されたときに通知が行われる。
ロックのモードを,緩やかな制限のモードと厳しい制限のモードの間で切り替えることができる。
ロックに関する情報を返す。
DLM は,分散型の集中ツリー構造に設計されています。DLM は,各クラスタ・メンバにロック情報を複製しません。ロック・ツリーを管理するクラスタ・メンバが,そのツリーに関するすべての情報を保持します。ロックを保持しているメンバは,そのリソースに対し自分がロックを行っていることだけを認識します。どのメンバ・システムも,任意のロック・ツリーのマスタとして動作できます。これにより,ロック管理の全体的な負荷が分散されます。
DLM は分散ディレクトリ・サービスを使用して,リソース・ツリーのディレクトリ・ノードの位置をすばやく見つけます。ディレクトリ・テーブルは,ルート・リソース名と,リソースのマネージャであるクラスタ・メンバを対応付けます。このディレクトリ・テーブルは,すべてのクラスタ・メンバで同じです。
DLM は,メンバの障害に対処するように設計されています。ロックを保持しているメンバに障害が発生すると,そのロックは解放されます。メンバ・システムに障害が発生すると,そのメンバが直前にマスタとなっていたロックに対して新しいロック・マスタが選ばれ,関連するロック情報がすべて渡されます。