すべてのリソースを構成することは、ジョブのほんの一部分です。クラスタが必要なすべてのリソースを認識しても、正しく処理できるとは限りません。たとえば、ファイルシステムをdrbdのスレーブノードにマウントしようとしても意味がありません(実際、drbdでは失敗します)。クラスタにこのようなことを通知するには、制約を定義します。
High Availabilityでは、使用できる制約には3種類あります。
リソースを実行するノードを定義する、場所の制約(crmシェルで、locationコマンドで定義)。
クラスタにノード上で一緒に実行できる、または実行できないリソースを通知する、コロケーションの制約(colocation)。
アクションの順序を定義する、順序の制約(order)。
この種類の制約は、各リソースに複数追加できます。すべてのrsc_location制約は、所定のリソースに対して評価されます。ID fs1-locのリソースを名前earthのノードで実行する確率を100に増加する簡単な例を、次に示します。
crm(live)configure# location fs1-loc fs1 100: earth
colocationコマンドは、同じホストまたは別のホストで実行するリソースを定義するために使用します。通常、次の順序を使用します。
crm(live)configure# order rsc1 rsc2 crm(live)configure# colocation rsc2 rsc1
+INFINITYまたは-INFINITYのスコアのみが設定でき、同じノードで常に実行されるか、または常に実行されないリソースを定義します。たとえば、IDがfilesystem_resourceとnfs_groupの2つのリソースを常に同じホストで実行するには、次の制約を使用します。
crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource
マスタスレーブ構成では、現在のノートがマスタかどうかと、リソースをローカルに実行しているかどうかを把握することが必要です。これは追加のto_roleまたはfrom_role属性からチェックできます。
サービスを開始させる順序の指定が必要となる場合があります。たとえば、デバイスがシステムで利用できるようになるまで、ファイルシステムはマウントできません。順序の制約を使用して、開始、停止、マスタへの昇格など、別のリソースが特殊な条件を満たす直前または直後に、サービスを開始または停止できます。次のコマンドをcrmシェルで使用して、順序の制約を設定します。
crm(live)configure# order nfs_after_filesystem mandatory: group_nfs filesystem_resource
この章で使用される例は、制約を追加しないと予期したように動作しません。すべてのリソースが同じマシン上でdrbdリソースのマスタとして実行することが不可欠です。もう1つの重要なことは、その他のリソースが開始する前にdrbdリソースがマスタになることが必要であることです。drbdがマスタでないときにdrbdデバイスをマウントしようとしても、失敗します。満たす必要がある制約は、次のようになります。
ファイルシステムは常に同じノード上にdrbdリソースのマスタとして存在する必要があります。
crm(live)configure# colocation filesystem_on_master inf: \
filesystem_resource drbd_resource:Master
NFSサーバとIPアドレスは、ファイルシステムとして同じノード上に存在する必要があります。
crm(live)configure# colocation nfs_with_fs inf: \
nfs_group filesystem_resource
NFSサーバとIPアドレスは、ファイルシステムがマウントされた後に開始されます。
crm(live)configure# order nfs_second mandatory: \
filesystem_resource nfs_group
ファイルシステムは、drbdリソースがこのノードのマスタに昇格した後にマウントされる必要があります。
crm(live)configure# order drbd_first inf: \
drbd_resource:promote filesystem_resource