※LifeKeeper for Linux v9.7.0 からオンラインマニュアルに IP Recovery Kit の処理概要が追加されました。
管理ガイドにある処理概要をご参照ください。
https://docs.us.sios.com/spslinux/9.7.0/ja/topic/application-recovery-kits
対象製品
IP Recovery Kit (LifeKeeper for Linux)
本処理概要は LifeKeeper for Linux v9.4.1 に付属するリカバリキットをもとに作成し、IPv4 を保護する場合を例にご案内しております。
基本的な動作といたしましては、v7.4.0 以降において同じものとなっています。
起動処理
1) 保護対象の IP アドレスの確認
保護している IP アドレスが物理IPアドレスかどうかを確認します。
物理 IP アドレスを保護している場合は、2)以降の処理をスキップし、起動処理は正常終了します。
※この処理は v9.1.2 以前では実施されません。
2) リンク状態の確認
本項において IP_NOLINKCHECK=1 が設定されている場合は本項目は実施せず、次の 3) の処理へ移行します。
下記コマンドラインを発行し、出力中の”NO-CARRIER”の有無を基にリンクダウン状態またはリンクアップ状態を判断します。
# ip -o link show <デバイス>
上記コマンドラインにおいてデバイスがリンクアップ状態の場合は次の 3) の処理へ移行します。
なお、デバイスがリンクダウン状態の場合は、一度だけデバイスの停止・起動を実施します。
2-1) # ifdown <デバイス>
2-2) 5秒の待機
2-3) # ifup <デバイス>
上記 2-3) までを実施した後、最大5回のリンク状態の確認を実施します。
2-4) 1秒間(固定)の待機
2-5) # ip -o link show <デバイス>
[v9.4.1以降で追加]
RHEL7、RHEL8 の場合は Network Manager の起動状態を確認します。
# nmcli connection show --active | grep -qE <デバイス>
最終的に本項目においてデバイスがリンクアップ状態とならない場合は、
以降の処理は実施せずに起動処理が失敗終了します。
3) 割当状態の確認
下記コマンドラインを用いて、割当先デバイスに割り当てられているアドレスを取得し、出力中に仮想IPアドレスが存在することを確認します。
# ip -4 -o addr show dev <デバイス>
上記コマンドラインの出力中に仮想IPアドレスが含まれない場合は、次の 4) の処理へ移行します。
上記コマンドラインの出力中に仮想IPアドレスが含まれる場合には、監視処理 1) ~ 3) と同内容を実施し、正常性の有無を判断します。
※監視処理 1) ~ 3) の記載における「回復処理へ移行」は「起動処理の失敗」として読み替えてください。
正常性ありの場合は、この時点において起動処理の成功終了となります。
正常性なしの場合は、この時点において起動処理の失敗終了となります。
4) 重複確認
本項においてNOIPUNIQUE=1が設定されている場合は本項目は実施せず、次の 5) の処理へ移行します。
下記コマンドラインを用いて、ノード上の実IPアドレスから割り当て予定の仮想IPアドレスに対して疎通確認を実施します。
v9.1.1 以前
# /opt/LifeKeeper/bin/lkping -b -c IP_PINGTRIES -w IP_PINGTIMEOUT <仮想IP>
v9.1.2 以降
# /opt/LifeKeeper/bin/lkping -b -c 1 -w IP_PINGTIMEOUT <仮想IP>
疎通確認で応答が得られない場合は、仮想IPアドレスは重複していないと判断され、次の 5) の処理へ移行します。
疎通確認で応答が得られた場合には、仮想IPアドレスが重複していると判断され、以降の処理は実施せずに起動処理は失敗終了となります。
5) 仮想IPアドレスの割り当ておよびARPテーブルのフラッシュ
5-1) 仮想IPアドレスの割当
下記コマンドラインを用いて、仮想IPアドレスの割当を実施します。
# ip -4 addr add <仮想IP/Prefix> dev <デバイス>
※戻り値 0 は割当成功、戻り値 2 は割当済み。
上記コマンドラインの戻り値が 0 および 2 の両者以外の場合は割当失敗となり、以降の処理は実施されず起動処理は失敗終了となります。
上記コマンドラインの戻り値が 0 もしくは 2 の場合は割当成功となり、自ノード上の全ネットワークデバイスに対してARPキャッシュをフラッシュします。
# ip neigh flush dev <デバイス>
5-2) ARPテーブルのフラッシュ
下記コマンドライン群を用いて、ネットワーク上のARPテーブルのフラッシュを実施します。
# arping -Uq -c1 -s <仮想IP> -I <デバイス> <仮想IP>
# arping -Aq -c1 -s <仮想IP> -I <デバイス> <仮想IP>
# arping -Uq -c1 -s <仮想IP> -I <デバイス> <ブロードキャストアドレス>
# arping -Aq -c1 -s <仮想IP> -I <デバイス> <ブロードキャストアドレス>
なお、arping コマンドがOSにインストールされていない場合に限り、以下のコマンドラインを実施します。
# ip neigh flush dev <デバイス>
6) ソースアドレス設定の有効化
IPリソースのプロパティ画面から Source Address Setting を有効にしている場合、
下記コマンドラインを用いて仮想IPアドレスが属するネットワークに対する通信の送信元アドレスを仮想IPアドレスに設定します。
# ip -4 route change <仮想IPが属するサブネットのネットワークアドレス/Prefix> src <仮想IP>
7) 疎通確認
疎通確認処理は監視処理時と共通の処理内容となっています。
別途記載している「疎通確認処理」の項目を参照してください。
疎通確認処理が成功終了の場合は、起動処理が成功終了します。
疎通確認処理が失敗終了の場合は、起動処理が失敗終了します。
停止処理
1) 保護対象の IP アドレスの確認
保護している IP アドレスが物理IPアドレスかどうかを確認します。
物理 IP アドレスを保護している場合は、2)以降の処理をスキップし、停止処理は正常終了します。
※この処理は v9.1.2 以前では実施されません。
2) 割当状態の確認
下記コマンドラインを用いて、割当先デバイスに割り当てられているアドレスを取得し、出力中に仮想IPアドレスが存在することを確認します。
# ip -4 -o addr show dev <デバイス>
上記コマンドラインの出力中に仮想IPアドレスが含まれない場合は、この時点において停止処理は成功終了となります。
上記コマンドラインの出力中に仮想IPアドレスが含まれる場合には、次の 3) の処理へ移行します。
3) ソースアドレス設定の無効化
IPリソースのプロパティ画面から Source Address Setting を有効にしている場合、
下記コマンドラインを用いて仮想IPアドレスが属するネットワークに対する通信の送信元アドレスを実IPアドレスに設定します。
# ip -4 route change <仮想IPが属するサブネットのネットワークアドレス/Prefix>
4) 仮想IPアドレスの取り外し
下記コマンドラインにて仮想IPアドレスを取り外します。
# ip -4 addr delete <VIP/Prefix> dev <デバイス>
上記コマンドラインの戻り値が 0 の場合は停止成功となりますが、
以降の処理は必ず実施した上で停止処理が成功終了します。
上記コマンドラインの戻り値が 0 以外の場合は停止失敗となりますが、
以降の処理は必ず実施した上で停止処理が失敗終了します。
5) ルーティングキャッシュのクリア
下記コマンドラインにてルーティングキャッシュをクリアします。
# echo 0 > /proc/sys/net/ipv4/route/flush 2>/dev/null
監視処理
1) 割当状態の確認
下記コマンドラインを用いて、割当先デバイスに割り当てられているアドレスを取得し、出力中に仮想IPアドレスが存在することを確認します。
# ip -4 -o addr show dev <デバイス>
上記コマンドラインの出力中に仮想IPアドレスが含まれない場合は、この時点において監視処理失敗となり以降の処理は実施せず、回復処理へ移行します。
上記コマンドラインの出力中に仮想IPアドレスが含まれる場合には、次の 2) の処理へ移行します。
2) リンク状態の確認
本項においてIP_NOLINKCHECK=1 が設定されている場合は本項目は実施せず、次の 3) の処理へ移行します。
下記コマンドラインを発行し、出力中の”NO-CARRIER”の有無を基にリンクダウン状態またはリンクアップ状態を判断します。
# ip -o link show <デバイス>
本項目において、出力に”NO-CARRIER”がある場合はリンクダウン状態にあると判断し、
この時点において監視処理失敗となり以降の処理は実施せず、回復処理へ移行します。
本項目において、出力に”NO-CARRIER”がない場合はリンクアップ状態にあると判断し、次の 3) の処理へ移行します。
[v9.4.1以降で追加]
RHEL7、RHEL8 の場合は上記に加え Network Manager の起動状態を確認します。
# nmcli connection show --active | grep -qE <デバイス>
3) 疎通確認
疎通確認処理は起動処理時と共通の処理内容となっています。
別途記載している「疎通確認処理」の項目を参照してください。
疎通確認処理が成功終了の場合は稼働状態にあると判断します。
疎通確認処理が失敗終了の場合は監視処理失敗として回復処理へ移行します。
回復処理
監視処理において、正常と判断されなかった場合に本処理が実施されます。
本処理におきましては、v9.1.2 以前と、v9.2 以降で処理が異なっております。
v9.2以降
保護している IP アドレスが物理IPアドレスかどうかを確認します。
物理 IP アドレスを保護している場合は、以降の処理をスキップし、回復処理を異常終了させフェイルオーバを行います。
仮想 IP アドレスを保護している場合は、停止処理と起動処理を順に実施します。詳細は上述の各処理に関する記述をご参照ください。
本処理の内、起動処理の実施に失敗した場合は、リソース障害となりフェイルオーバーを行います。
v9.1.2以前
停止処理と起動処理を順に実施します。詳細は上述の各処理に関する記述をご参照ください。
疎通確認処理
本項目における確認処理は下記条件により大きく A) ~ C) の3種に分岐します。
- NOBCASTPINGの設定値(0 or 1)
- PingListの有無
本項における処理の中で「成功終了」または「失敗終了」の場合は、起動処理または監視処理の元の項目へ戻ってください。
A) ユニキャストpingおよびブロードキャストpingによる疎通確認
実施条件:PingList有かつ、NOBCASTPING=0または1
A-1) ユニキャストpingによる疎通確認
下記コマンドラインを発行し、PingListに記載されている各IPに対しユニキャストpingを実施します。
v9.1.1 以前
# lkping -b -c IP_PINGTRIES -w IP_PINGTIME -I <仮想IP> <PingListIP>
v9.1.2 以降
# lkping -b -c 1 -w IP_PINGTIME -I <仮想IP> <PingListIP>
本項目においてひとつでも応答がある場合は、この時点において本処理は成功終了します。
本項目においてひとつも応答がない場合には、次の A-2) の処理へ移行します。
A-2) ブロードキャストpingによる疎通確認
本項目において NOBCASTPING=1 である場合は、前の A-1) の処理に失敗していることを理由として、
この時点において本処理は失敗終了します。
本項目において NOBCASTPING=0 である場合は、下記コマンドラインを発行し、
仮想IPアドレスが属する論理サブネットのブロードキャストアドレスに対し、ブロードキャストpingを実施します。
v9.1.1 以前
# lkping <BCASTアドレス> -b -c IP_PINGTRIES -w IP_PINGTIME -I <仮想IP> -z <自ノードIP>
v9.1.2 以降
# lkping <BCASTアドレス> -b -c 1 -w IP_PINGTIME -I <仮想IP> -z <自ノードIP>
※BCAST=ブロードキャスト
※ -z オプションは自ノードからの応答を無視することを目的としています。
上記コマンドラインにおいてひとつでも応答がある場合は、この時点において本処理は成功終了します。
上記コマンドラインにおいてひとつも応答がない場合には、この時点において本処理は失敗終了します。
B) 疎通確認を実施せずに成功終了
実施条件:PingList無かつ、NOBCASTPING=1
本条件においては疎通確認は実施せず、この時点において本処理は成功終了します。
C) ブロードキャストpingのみによる疎通確認
実施条件:PingList無かつ、NOBCASTPING=0
下記コマンドラインを発行し、仮想IPアドレスが属する論理サブネットのブロードキャストアドレスに対し、ブロードキャストpingを実施します。
v9.1.1 以前
# lkping <BCASTアドレス> -b -c IP_PINGTRIES -w IP_PINGTIME -I <仮想IP> -z <自ノードIP>
v9.1.2 以降
# lkping <BCASTアドレス> -b -c 1 -w IP_PINGTIME -I <仮想IP> -z <自ノードIP>
※BCAST=ブロードキャスト
※ -z オプションは自ノードからの応答を無視することを目的としています。
上記コマンドラインにおいてひとつでも応答がある場合は、この時点において本処理は成功終了します。
上記コマンドラインにおいてひとつも応答がない場合には、この時点において本処理は失敗終了します。
関連パラメータ
以下は、IP Recovery Kit のパラメータ名とその意味を説明しています。
これらの値は /etc/default/LifeKeeper 設定ファイルを編集することにより設定可能です。
IP_NOLINKCHECK
単位:真偽 (1=真, 0=偽)
デフォルト:0
影響範囲:リソースの起動処理および、監視処理
説明:デバイスのリンクアップ状態の確認を無効化する場合に使用します。
デフォルトでは 0 である為、リンクアップ状態の確認は有効化されています。
IP_PINGTIME
単位:秒
デフォルト:1
影響範囲:リソースの起動処理および、監視処理
説明:lkping による疎通確認のタイムアウトを指定します。
1つ目のパケットでタイムアウトした際は v9.1.1 以前と、v9.1.2 以降で動作が異なります。
- v9.1.1以前:1つ目のパケットを IP_PINGTIME の時間待機し、2つ目以降は約 1秒ずつ待機します。
例) IP_PINGTIME=3 でのタイムアウト時間
IP_PINGTRIES=1 :約 3秒
IP_PINGTRIES=2 :約 4秒
IP_PINGTRIES=3 :約 5秒
- v9.1.2 以降:パケット送出数は 1個に固定されるため、IP_PINGTIME の時間待機する動作を IP_PINGTRIES の回数分繰り返します。
例) IP_PINGTIME=3 でのタイムアウト時間
IP_PINGTRIES=1 :約 3秒
IP_PINGTRIES=2 :約 6秒
IP_PINGTRIES=3 :約 9秒
IP_PINGTRIES
単位:個
デフォルト:3
影響範囲:リソースの起動処理および、監視処理
説明:
- v9.1.1 以前 :lkping による疎通確認において送出されるパケットの数を指定します。
- v9.1.2 以降 :lkping コマンドの実行最大回数を指定します。
NOIPUNIQUE
単位:真偽 (1=真, 0=偽)
デフォルト:0
影響範囲:リソースの起動処理
説明:仮想IPアドレスの重複確認を無効化する場合に使用します。
デフォルトでは 0 である為、重複確認は有効化されています。
NOBCASTPING
単位:真偽 (1=真, 0=偽)
デフォルト:0
影響範囲:リソースの起動処理および、監視処理
説明:疎通確認においてブロードキャストPINGの発行を無効化する場合に使用します。
デフォルトでは 0 である為、ブロードキャストPINGの発行は有効化されています。
lkpingについて
本リソースの操作に使用される lkping について詳細は、以下のリンク先文書をご参照ください。
[Linux] lkping コマンドについて
改訂履歴
掲載日: 2016年04月15日
改訂日: 2017年10月06日
改訂日: 2018年09月27日 タイトル変更 改訂日: 2018年10月05日 lkping について追記
関連ワード
#バージョンアップ #アップデート #アップグレード