This site best when viewed with a modern standards-compliant browser. We recommend Firefox Get Firefox!.

Linux-HA project logo
Providing Open Source High-Availability Software for Linux and other OSes since 1999.

USA Flag UK Flag

Japanese Flag

ホームページ

サイトについて

コンタクト情報

使用条件

協力方法

セキュリティ

This web page is no longer maintained. Information presented here exists only to avoid breaking historical links.
The Project stays maintained, and lives on: see the Linux-HA Reference Documentation.
To get rid of this notice, you may want to browse the old wiki instead.

2010.1.28
追加パッケージ集リニューアル
追加パッケージ集は、こちらから

2008.8.28
RHEL用rpm更新
更新情報はこちらから

2008.8.18
Heartbeat 2.1.4
リリース!
Downloadはこちらから

2007.11.13
Linux-ha-japan日本語ML移植しました

2007.10.5
日本語サイトOPEN
日本語MLも開設しました

2007.10.5
OSC2007 Tokyo/Fall で Heartbeat紹介
発表資料を公開しました

Last site update:
2017-12-14 23:46:42

Contents

  1. 序文
  2. グループなしの構成
  3. 複数のグループ
  4. 制約(さらに高度な設定)
    1. コロケーションの設定
    2. 場所の設定
    3. 順序の設定
  5. 完全例
    1. 制約の例
  6. 関連情報

序文

このドキュメントでは、グループのないリソースを構成する方法、複数のグループを使用する方法、および制約についてご説明します。ドキュメント全体を通して、1つの例を使用します。

この例には、3つのノード(mars、venus、pluto)と5つのリソース(named、apache、mysql、2つのIP)が含まれており、グループや制約に関して詳細な内容になっています。分かりやすくするために、 モニタ属性 などは使用していません。

以下の構成を想定します。

  • apache、mars上で動作するIP。marsはvenusにフェイルオーバする。
  • mysql、venus上で動作するIP。venusはmarsまたはvenusにフェイルオーバする。
  • namedはpluto上で動作する。plutoはvenusにフェイルオーバする。

グループなしの構成

グループなしの構成では、<group>タグを使用せず、基本命令を<resource>タグで定義します。symmetric_cluster = trueの場合、デフォルトではリソースをどの場所でも実行できます。falseの場合には、実行可能な場所を定義してください。

構成は以下のようになります。

<resources>
    <primitive id="IPaddrid" class="ocf" type="IPaddr" provider="heartbeat">         
       <instance_attributes>
            <attributes>
                <nvpair name="ip" value="10.0.0.10"/>
            </attributes> 
       </instance_attributes>
    </primitive>     
    <primitive id="mysqlid" class="lsb" type="mysql"/>
    <primitive id="apache2id" class="lsb" type="apache2"/>
</resources>

複数のグループ

グループは、複数のリソースを順次、開始/停止するのに便利です。グループでは、制約の中で使用できるグループIDが提供されます。そのIDを使用して、グループ内の全リソースをアドレス指定して、constraintセクションを分りやすくすることができます。

<resources>
    <group id="group1">
        <primitive id="IPaddrid" class="ocf" type="IPaddr" provider="heartbeat">            
             <instance_attributes>
                <attributes>
                    <nvpair name="ip" value="10.0.0.10"/>
                </attributes>             
             </instance_attributes>
        </primitive>         
        <primitive id="mysqlid" class="lsb" type="mysql"/>
    </group>
    <group id="group2">
        <primitive id="apache2id" class="lsb" type="apache2"/>
        <primitive id="bindid" class="lsb" type="bind"/>
    </group>
</resources>

制約(さらに高度な設定)

2つのクラスタノードでは、制約は簡単で、一方のノードまたは相手ノードで実行されます。しかし、大規模なクラスタでは、リソースを実行する場所を指定した方が合理的です。 そのため、ここでは3つのノードと5つのリソースを使用しています。

<resources>
 <group id="apache_group">
  <primitive id="apache_ip" class="ocf" type="IPaddr" provider="heartbeat">
    <instance_attributes>
       <attributes>
         <nvpair name="ip" value="10.0.0.10"/>
       </attributes>
    </instance_attributes>
  </primitive>
  <primitive class="lsb" id="apache_id" type="apache"/>
 </group>
  <primitive class="lsb" id="named_id" type="named"/>
 <group id="mysl_group">
  <primitive class="lsb" id="mysql_id" type="mysql"/>
  <primitive id="mysql_ip" class="ocf" type="IPaddr" provider="heartbeat">
    <instance_attributes>
       <attributes>
         <nvpair name="ip" value="10.0.0.20"/>
       </attributes>
    </instance_attributes>
  </primitive>
 </group>
</resources>

以下の3種類の制約を指定できます。

  • 場所の制約:リソースを配置できる場所/できない場所
  • コロケーションの制約:ほかのリソースと相対的にリソースを配置できる場所/できない場所
  • 順序の制約:操作を実行する順序

どの制約も、何らかの形でスコアを持ちます。スコアは、条件に適合するノードで動作するよう、リソースの設定を調整します。リソースは、結果がマイナスのスコアとなるノードには配置されません。

スコアには、INFINITYと-INFINITYという2種類の特別な値があります。この値は、以下のように処理されます。

 INFINITY +/- -INFINITY :  ERROR
 INFINITY +/-  int      :  INFINITY
-INFINITY +/-  int      : -INFINITY

高度なリソースタイプが使用される場合、一部の制約は暗黙的になります。例えば、groupリソースでは、すべてが同じノード上で実行され、入力した順に開始(逆順に停止)することが暗黙的に定義されます。

コロケーションの設定

最も簡単な制約は、コロケーションの制約です(注釈付きのDTD)。2つのリソースのidと、同じノード上でリソースを実行できないか、または実行しなければならない場合には、指示するスコアを入力するだけでできます。

コロケーションの制約のスコアはINFINITYまたは-INFINITYにしか設定できませんが、今後変更される可能性があります。

リソースを同じノード上で実行しなければならないことを指示するには INFINITYを使用し、同じノード上で実行しないことを指示するには-INFINITYを使用します。

同じマシン上で、apache ipでapacheインスタンスを実行します。

<rsc_colocation id="web_same" from="apache_ip"
                to="apache_id" score="INFINITY"/>    

注:これらのリソースにはグループがあるため、この制約はすでに暗黙的です。apacheとnamedを同じマシンで実行しないという制約は大変便利です。

<rsc_colocation id="not_same" from="apache_group"
                to="named_id" score="-INFINITY"/>

場所の設定

場所の制約では、ルールを使用して、最低1つのクラスタノードを照合し、スコアを適用します。

symmetric_clusterオプションが場所の制約に対して、どれだけ影響を及ぼすかということはとても重要ですので、ここで指摘しておきます。

symmetric_clusterがTRUEの場合、リソースはデフォルトでどの場所でも実行できるので、次のいずれかを指定する必要があります。

  • -INFINITYのスコアを使用して、リソースを実行できない場所を指定する。
  • 相対的な設定を指定する(通常はプラスのスコアを使用する)。

symmetric_clusterがFALSEの場合、リソースはデフォルトでどの場所でも実行できなくなるので、次のいずれかを指定する必要があります。

  • INFINITYのスコアを使用して、リソースを実行しなければならない場所を指定する。
  • 相対的な設定を指定する(通常はプラスのスコアを使用する)。

以下の例は、symmetric_clusterの値に関係なく動作します。

ルールと制約については、Cluster情報ベース/詳細なルールのページをご参照ください。

可能であれば、uname="mars"ノードapache_groupを実行します。

<rsc_location id="run_apache" rsc="apache_group">
    <rule id="pref_run_apache" score="100">
        <expression attribute="#uname" operation="eq" value="mars"/>
    </rule>
</rsc_location>

uname="mars"ノードでは、named_idを絶対に実行しません。

<rsc_location id="dont_run_named" rsc="named_id">
    <rule id="pref_dont_run_named" score="-INFINITY">
        <expression attribute="#id" operation="eq" value="mars"/>
    </rule>
</rsc_location>

apache_groupuname="mars"ノードだけで実行できるように指定するには、以下の構成を使用します。

<rsc_location id="run_apache" rsc="apache_group">
    <rule id="pref_run_apache" score="INFINITY">
        <expression attribute="#uname" operation="eq" value="mars"/>
    </rule>
    <rule id="pref_run_apache" score="-INFINITY">
        <expression attribute="#uname" operation="ne" value="mars"/>
    </rule>
</rsc_location>

順序の設定

順序の制約を使用すると、2つのリソース間の依存関係を定義することができます。リソースがほかのリソースの前または後に開始/停止するように定義できます。

詳細情報

ApacheはIPをリスンしますが、そのIPはapacheよりも先に起動していなければなりません。そのため、以下では、apacheサーバーが起動する前にIPアドレスを起動するよう定義します。symmetrical="TRUE"に設定すると、逆順の制約となります。

<rsc_order id="apache_group_order" from="apache_ip" action="start" type="before" to="apache_id" symmetrical="true"/>

注:両方のリソースはグループ内に含まれているため、リソースが順次起動します。apache_ipがapache_idの前に定義されているため、この例では上記は余分な設定です。

完全例

<cib>
    <configuration>
        <crm_config>
            <nvpair id="transition_idle_timeout" name="transition_idle_timeout" value="120s"/>
            <nvpair id="symmetric_cluster" name="symmetric_cluster" value="true"/>
            <nvpair id="no_quorum_policy" name="no_quorum_policy" value="stop"/>
        </crm_config>
        <nodes>
            <node id="f67904e0-4dfc-4db1-83a2-e930fc1d20f4" uname="mars" type="member"/>
            <node id="e9bdfde9-01b0-421f-acd8-8a65a53e775f" uname="venus" type="member"/>
            <node id="5d9a8c11-8684-43ea-9180-5e221530c193" uname="pluto" type="member"/>
        </nodes>
        <resources>
            <group id="apache_group">
                <primitive id="apache_ip" class="ocf" type="IPaddr" provider="heartbeat">
                    <instance_attributes>
                        <attributes>
                            <nvpair name="ip" value="10.0.0.10"/>
                        </attributes>
                    </instance_attributes>
                </primitive>
                <primitive class="lsb" id="apache_id" type="apache"/>
            </group>
            <primitive class="lsb" id="named_id" type="named"/>
            <group id="mysl_group">
                <primitive class="lsb" id="mysql_id" type="mysql"/>
                <primitive id="mysql_ip" class="ocf" type="IPaddr" provider="heartbeat">
                    <instance_attributes>
                        <attributes>
                            <nvpair name="ip" value="10.0.0.20"/>
                        </attributes>
                    </instance_attributes>
                </primitive>
            </group>
        </resources>
        <constraints>
            <rsc_colocation id="not_apache" from="apache_group" to="named_id" score="-INFINITY"/>
            <rsc_colocation id="not_named" from="named_id" to="apache_group" score="-INFINITY"/>
            <rsc_location id="location_apache_group" rsc="apache_group">
                <rule id="prefered_location_apache" score="100">
                    <expression attribute="#uname" operation="eq" value="mars"/>
                </rule>
                <rule id="prefered_location_apache" score="50">
                    <expression attribute="#uname" operation="eq" value="venus"/>
                </rule>
            </rsc_location>
            <rsc_location id="location_named" rsc="named_id">
                <rule id="prefered_location_named" score="100">
                    <expression attribute="#uname" operation="eq" value="pluto"/>
                </rule>
                <rule id="prefered_location_named" score="-INFINITY">
                    <expression attribute="#uname" operation="eq" value="mars"/>
                </rule>
            </rsc_location>
            <rsc_location id="location_mysql" rsc="mysql_group">
                <rule id="prefered_location_mysql" score="100">
                    <expression attribute="#uname" operation="eq" value="venus"/>
                </rule>
            </rsc_location>
        </constraints>
    </configuration>
    <status/>
</cib>

制約の例

最初の2つの制約では、apacheグループがnamedを実行できず、namedがapacheグループを実行できないことを定義します。

最初の場所の制約では、apacheグループmarsで実行され、marsに障害が発生した場合にvenusで実行されることを定義します。

2つ目の制約では、namedをplutoで実行し、marsでは実行しないことを設定します。これはvenusにフェイルオーバすることを意味しています。

最後の制約では、mysqlグループに設定された場所がvenusノードであることを定義します。フェイルオーバ先のノードは定義されていません。symmetrical="TRUE"であるため、CRMがフェイルオーバ先であるノードを選択します。

関連情報