Linux-HA Logo

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

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

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

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

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

構成方法

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

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

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

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

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

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

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

以下に、上記の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の構成例

CIBの例

Node

Connected Ping Nodes

default_ping_set Value

c001n01

5

500

c001n02

4

400

c001n03

5

500

制約の例

<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>

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

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

500

c001n02

4

400

400

c001n03

5

500

500

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

<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

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

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

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

600

c001n02

4

400

1600

c001n03

5

500

800

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

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

ノード

接続するPingノード

default_ping_setの値

複合スコア

c001n01

5

500

600

c001n02

4

400

700

c001n03

5

500

800

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

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

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

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

この制約を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[7] デーモンを構成した場合は、attributepingdからpingd[7]デーモンが使用するように構成した名前に変更する必要があります。

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

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

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

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


References

[1]http://www.linux-ha.org/ja/CIB_ja
[2]http://www.linux-ha.org/ja/v2/dtd1.0/annotated_ja#rsc%2Blocation
[3]http://www.linux-ha.org/ja/OCFResourceAgent_ja
[4]http://www.linux-ha.org/ja/v2/Concepts/Clones_ja
[5]http://www.linux-ha.org/ja/ha.cf_ja
[6]http://www.linux-ha.org/ja/v2/dtd1.0/annotated_ja#default%2Bresource%2Bstickiness
[7]http://www.linux-ha.org/ja/pingd_ja
[8]http://www.linux-ha.org/ja/CIB/Idioms/PingdAttrAsScore_ja


This information provided courtesy of the Linux-HA project at http://linux-ha.org/