このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

17.11 Keepalivedの通知スクリプトと追跡スクリプトについて

通知スクリプトは、サーバーの状態が変更されたときにKeepalivedによって起動される実行可能プログラムです。 通知スクリプトを実装すると、ネットワーク・インタフェースの再構成や、サービスの起動、再ロード、停止などのアクションを実行できます。

通知スクリプトを起動するには、vrrp_instanceまたはvrrp_sync_groupセクション内に次のいずれかの行を挿入します。

notify program_path

次の引数を使用してprogram_pathを起動します。

$1

Keepalivedがプログラムをvrrp_instanceから起動したかvrrp_sync_groupから起動したかに応じて、INSTANCEまたはGROUPに設定します。

$2

vrrp_instanceまたはvrrp_sync_groupの名前に設定します。

$3

遷移の最終状態(BACKUPFAULTまたはMASTER)に設定します。

notify_backup program_path , notify_backup "program_path arg ..."

遷移の最終状態がBACKUPのときにprogram_pathを起動します(program_pathは実行可能スクリプトまたはバイナリのフルパス名)。 プログラムに引数がある場合は、プログラム・パスと引数の両方をカッコで囲んでください。

notify_fault program_path , notify_fault "program_path arg ..."

遷移の最終状態がFAULTのときにprogram_pathを起動します。

notify_master program_path , notify_master "program_path arg ..."

遷移の最終状態がMASTERのときにprogram_pathを起動します。

次の実行可能スクリプトは、notifyの汎用バージョンを処理するために使用できます。

#!/bin/bash

ENDSTATE=$3
NAME=$2
TYPE=$1

case $ENDSTATE in
    "BACKUP") # Perform action for transition to BACKUP state
              exit 0
              ;;
    "FAULT")  # Perform action for transition to FAULT state
              exit 0
              ;;
    "MASTER") # Perform action for transition to MASTER state
              exit 0
              ;;
    *)        echo "Unknown state ${ENDSTATE} for VRRP ${TYPE} ${NAME}"
              exit 1
              ;;
esac

追跡スクリプトは、Keepalivedがvrrp_script定義に従って一定の間隔で実行するプログラムです。

vrrp_script script_name {
  script       "program_path arg ..."
  interval i  # Run script every i seconds
  fall f      # If script returns non-zero f times in succession, enter FAULT state
  rise r      # If script returns zero r times in succession, exit FAULT state
  timeout t   # Wait up to t seconds for script before assuming non-zero exit code
  weight w    # Reduce priority by w on fall
}

program_pathは、実行可能スクリプトまたはバイナリのフルパス名です。

次の例のように、track_script句を指定することにより、追跡スクリプトをvrrp_instanceセクションと組み合せて使用できます。

vrrp_instance instance_name {
  state MASTER
  interface eth0
  virtual_router_id 21
  priority 200
  advert_int 1
  virtual_ipaddress {
    10.0.0.10/24
  }
  track_script {
    script_name
    ...
  }
}

構成されたスクリプトがゼロ以外の終了コードを連続してf回返す場合、KeepalivedはVRRPインスタンスまたはグループの状態をFAULTに変更し、eth0から仮想IPアドレス10.0.0.10を削除し、wによる優先順位値を減らしてマルチキャストVRRPパケットの送信を停止します。 その後、スクリプトがゼロの終了コードを連続してr回返した場合、VRRPインスタンスまたはグループはFAULT状態を終了し、その新しい優先度に応じてMASTERまたはBACKUP状態に遷移します。

1つ以上のインタフェースが停止した場合にサーバーをFAULT状態にするには、次の例のように、track_interface句を使用することもできます。

  track_interface {
    eth0
    eth1
  }

応用例として、Keepalivedサーバーの一部が通信を失ったときのスプリットブレイン条件を処理する追跡スクリプトを作成することもできます。 たとえば、スクリプトによって、他のKeepalivedサーバーの存在を追跡したり、共有ストレージやバックアップ通信チャネルを使用して投票メカニズムを実装したりできます。 ただし、スプリット・ブレイン条件を回避するようにKeepalivedを構成することは複雑であり、スクリプトによるソリューションでは対応できない場合もあります。

代替ソリューションの詳細は、17.12項「Oracle Clusterwareを使用したHAProxyの高可用性の実現」を参照してください。