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-17 04:46:19

バージョン2上での接続性の監視方法

pingd(ipfailに代わるコマンド)

pingdipfailに代わるコマンドです。バージョン2のほかのコマンドと同様に、任意の数のノードを含んだクラスタ内の接続性を確保する機能を提供します(および相対的な接続性に基いたリソースの実装)。

pingdの役割は、ノードの接続性の変更を検出して、同時に、その情報をCIBに更新することです。

管理者は、接続性が最も高いノードのリソースを特定するため、pingdがCIBに入れた情報を使用してください。 これは、pingdによって生成された属性を参照する位置制約を(管理者が)作成することで実行できます。下記の「位置制約でpingd出力を使用する」をご参照ください。

構成方法

pingdの構成には、次の2つのオプションがあります。

  1. 1つ目は、respawn命令をha.cfに追加するオプションです。

    • respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s
      pingdに渡されるオプションの意味については、下記の「pingdの使用方法」を参照してください。

  2. 2つ目は、pingdOCFリソースエージェントを使用してcloneを作成するオプションです。RAはrootとして開始されるので、「apiauth pingd uid=root」などの行をha.cfに追加してください。より適切な方法としては、user=haclusterのパラメータをRA構成に追加し、respawnメソッドと同じようにapiauth命令を使用こともできます。バージョン2.0.6では、指定したユーザーが書き込みパーミッションを持つ場所(/tmp/pingd-defaultなど)を指定するパラメータpidfileも追加する必要があります。

いずれの方法でも、ha.cfファイルにpingノードが含まれていなければなりません。RAのhost_listパラメータでは、ほかのホストではなく、サブセットのみ使用できます。

いずれの方法でも、CIBに最低1つのコロケーション制約を追加してください。下記の「位置制約でpingd出力を使用する」をご参照ください。

リソースエージェントを使用するメリットとして、以下が実行できます。

  • 接続性の情報をノードに制限する
    • 特定のプロパティ(名前、ID、ノード属性)を持つノード
    • 特定のリソースを実行しているノード
  • 入出力オプションを動的に変更する
    • 監視するpingノードのリスト
    • 属性名
    • 乗数
    • 抑制の遅延

以下に、上記のrespawn命令に相当するリソースです。

<clone id="pingd">
  <instance_attributes id="pingd" globally_unique="false">
    <attributes>
      <nvpair id="pingd-clone_node_max" name="clone_node_max" value="1"/>
    </attributes>
  </instance_attributes>
  <primitive id="pingd-child" provider="heartbeat" class="ocf" type="pingd">
    <operations>
      <op id="pingd-child-monitor" name="monitor" interval="20s" timeout="40s" prereq="nothing"/>
      <op id="pingd-child-start" name="start" prereq="nothing"/>
    </operations>
    <instance_attributes id="pingd_inst_attr">
      <attributes>
         <nvpair id="pingd-dampen" name="dampen" value="5s"/>
         <nvpair id="pingd-multiplier" name="multiplier" value="100"/>
      </attributes>
    </instance_attributes>
  </primitive>
</clone>

注: CIBに含まれる属性の場所を変更することは、たとえ可能な場合でも、お勧めはできません。各ノードの属性のコピーが複数作成されてしまうことになり、クラスタが予期せぬ動作をすることがあります。

pingdの使用方法

usage: pingd [-V?p:a:d:s:S:h:Dm:]
        --help (-?)                     This text
        --daemonize (-D)                Run in daemon mode
        --pid-file (-p) <filename>      File in which to store the process' PID
                                        * Default=/tmp/pingd.pid
        --attr-name (-a) <string>       Name of the node attribute to set
                                        * Default=pingd
        --attr-set (-s) <string>        Name of the set in which to set the attribute
                                        * Default=cib-bootstrap-options
        --attr-section (-S) <string>    Which part of the CIB to put the attribute in
                                        * Default=status
        --ping-host (-h) <single_host_name> Monitor a subset of the ping nodes listed in ha.cf
                                            (can be specified multiple times)
        --attr-dampen (-d) <integer>        How long to wait for no further changes to occur before
                                            updating the CIB with a changed attribute
        --value-multiplier (-m) <integer>   For every connected node, add <integer> to the value set in the CIB
                                            * Default=1

位置制約でpingd出力を使用する

pingdの構成例

  • respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set

CIBの例

Node

Connected Ping Nodes

default_ping_set Value

c001n01

5

500

c001n02

4

400

c001n03

5

500

  • c001n04

    N/A

    N/A

    c001n05

    0

    0

制約の例

<rsc_location id="my_resource:connected" rsc="my_resource">
    <rule id="my_resource:connected:rule" score_attribute="default_ping_set">
       <expression id="my_resource:connected:expr:defined" attribute="default_ping_set" operation="defined"/>
    </rule>
</rsc_location>

以下は、上記の制約の内容です。

  • default_ping_setに値を設定するよう要求する(c001n04は変更しない)

  • default_ping_setの値を100より大きく設定するよう要求する(c001n05は変更しない)

  • c001n01で実行するmy_resourceの設定を500増加させる

  • c001n02で実行するmy_resourceの設定を400増加させる

  • c001n03で実行するmy_resourceの設定を500増加させる

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

500

c001n02

4

400

400

c001n03

5

500

500

  • c001n04

    N/A

    N/A

    0

    c001n05

    0

    0

    0

例として、以下の制約があると仮定します。

<rsc_location id="my_resource:preferred" rsc="my_resource">
    <rule id="my_resource:prefer:c001n01" score="100">
       <expression id="my_resource:prefer:c001n01:expr" attribute="#uname" operation="eq" value="c001n01"/>
    </rule>
    <rule id="my_resource:prefer:c001n02" score="200">
       <expression id="my_resource:prefer:c001n02:expr" attribute="#uname" operation="eq" value="c001n02"/>
    </rule>
    <rule id="my_resource:prefer:c001n03" score="300">
       <expression id="my_resource:prefer:c001n03:expr" attribute="#uname" operation="eq" value="c001n03"/>
    </rule>
    <rule id="my_resource:never" score="-INFINITY" boolean_op="or">
       <expression id="my_resource:never:c001n04:expr" attribute="#uname" operation="eq" value="c001n04"/>
       <expression id="my_resource:never:c001n05:expr" attribute="#uname" operation="eq" value="c001n05"/>
    </rule>
</rsc_location>

その場合、リソースを実行するために更新されたスコアは、以下のようになります。

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

600

c001n02

4

400

600

c001n03

5

500

800

  • c001n04

    N/A

    N/A

    -INFINITY

    c001n05

    0

    0

    -INFINITY

現時点では、リソースが実行されていないか、resource stickinessがゼロに設定されている場合、リソースはc001n01c001n02をともにバックアップとしてc001n03で開始されます。

ただし、リソースがc001n02で実行され、resource_stickiness1000に設定されている場合、更新されたスコアは以下のようになります。

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

600

c001n02

4

400

1600

c001n03

5

500

800

  • c001n04

    N/A

    N/A

    -INFINITY

    c001n05

    0

    0

    -INFINITY

さらに、リソースは、c001n02で実行されたままになります。

あるいは、resource_stickiness100に設定されている場合、スコアは以下のようになります。

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

600

c001n02

4

400

700

c001n03

5

500

800

  • c001n04

    N/A

    N/A

    -INFINITY

    c001n05

    0

    0

    -INFINITY

さらに、リソースはc001n03に移動されます。

以下は、正しく設定することの重要性を示したものです。

  • pingdの--value-multiplierオプション

  • default_resource_stickiness / resource_stickiness

  • rsc_location制約のscore

クイックスタート – 最低1つのPingノードにアクセスするノードでのみmy_resourceを実行する

以下の行をha.cfに追加します。

  • respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s -a pingd

この制約をCIBに追加します。

ping接続が失われた際、特定のサービスを終了した方がよい場合もあります。このルールでは、外部へのping接続が確立されない場所からサービスを実行することを禁止しています。ある程度の接続が確立された全てのノードは、pingノードにアクセスできる数には関係なく同様に扱われます。

<rsc_location id="my_resource:connected" rsc="my_resource">
  <rule id="my_resource:connected:rule" score="-INFINITY" boolean_op="or">
    <expression id="my_resource:connected:expr:undefined"
      attribute="pingd" operation="not_defined"/>
    <expression id="my_resource:connected:expr:zero"
      attribute="pingd" operation="lte" value="0"/>
  </rule>
</rsc_location>

もちろん、デフォルト(pingd)以外の属性名を設定するようにpingd デーモンを構成した場合は、attributepingdからpingdデーモンが使用するように構成した名前に変更する必要があります。

注: pingを送信したノードが停止するか、ハートビートがノードへの接続性を失った場合、あらゆるリソースが停止されてしまいます。代わりに、最高の接続性が確立された、ノードを優先するスコア の使用を検討してください。

上記のpingdのrespawnルール、またはゼロ以外の--value-multiplier係数からpingdを開始するほとんどの方法を利用できます。複数のpingノードがある場合は、リソースを実行できますが、ノードが1つの場合は実行できません。

クイックスタート - 最高の接続性が実現されたノードでリソースを実行する

pingdの適切な使用方法の1つをご紹介します。この方法では、pingd属性値がルールのスコアになります。そのため、設定する--value-multiplier は、ほかの条件に割り当てたスコアによって大きく異なります。このルールでは、全てのノードが外部への接続性を失っってしまうと、リソースが完全に停止されます。

  • ほとんどの場合、 が特定のルールのスコアとして直接設定した属性値を許可することが妥当と言えるでしょう。

    例えば、pingdの倍率を100に設定し、1つのノードへのアクセスが100に相当する場合、2つのノードは200に相当します。

    このように、ほかの全ての条件が同等である場合には、最も高いping接続が確立されたノードが選択されるのです。複数のノードのスコアが同じ場合には、次のルールに従えば、同等の重要性が与えられます。

    <rsc_location id="my_resource:connected" rsc="my_resource">
      <rule id="my_resource:connected:rule" score_attribute="pingd" >
        <expression id="my_resource:connected:expr:defined"
          attribute="pingd" operation="defined"/>
      </rule>
    </rsc_location>
    

    もちろん、デフォルト(pingd)以外の属性名を設定するようにpingdデーモンを構成した場合には、score_attributeの名前をpingdから、pingdデーモン用に構成した名前に変更する必要があります。