Hitachi

高信頼化システム監視機能 HAモニタ Linux(R)(x86)編


6.13.2 LANの状態設定ファイルの設定

HAモニタの場合,LANはサーバ単位に接続,切り離しをします。HAモニタでは,LANの状態設定ファイルを作成して設定する必要があります。

LANの状態設定ファイルの種類を,次に示します。

サーバ識別名.upファイル

LANを接続する場合に使用します。サーバが使用するIPアドレスをLANアダプタに割り当てるための情報を指定します。

サーバ識別名.downファイル

LANの切り離しをする場合に使用します。サーバが使用するIPアドレスをLANアダプタから削除するための情報を指定します。

これらのファイルは,サーバごとにHAモニタの環境設定用ディレクトリの下に作成します。ファイル名のサーバ識別名の部分は,サーバ対応の環境設定のaliasオペランドで指定した値にしてください。

HAモニタには,HAモニタサンプルファイル用ディレクトリの下に,server.upserver.down,server_ip.up,およびserver_ip.downというファイル名で,LANの状態設定ファイルのサンプルファイルが用意されています。これらのファイルをHAモニタ環境設定用ディレクトリの下にコピーして書き換えることで,LANの状態設定ファイルを最初から作成する手間が省けます。また,ファイルには実行権限を与えてください。

HAモニタでのLANの切り替えは,エイリアスIPアドレスを使用します。LANの状態設定ファイルには,OSのifconfigコマンド,ipコマンド,およびarpingコマンドの引数として,LANアダプタに追加・削除するエイリアスIPアドレスを指定します。OSのコマンドについては,OSのマニュアルを参照してください。

使用するコマンドに応じて,次のどちらかのLANの状態設定ファイルのサンプルファイルを使用してください。

ここでは,エイリアスIPアドレスを使用した場合の,LANの状態設定ファイルの設定方法について説明します。

〈この項の構成〉

(1) サーバ識別名.upファイルの設定

ipコマンドを使用する場合

サーバ識別名.upファイルには,系ごとに割り当てられたLANアダプタのインタフェース名エイリアスIPアドレス,およびプリフィックス(ネットワークを表すビット長)を設定します。必要に応じてブロードキャストアドレスおよびリトライ回数を設定してください。また,エイリアスIPアドレスを追加したあと,echoコマンドおよびarpingコマンドを実行します。echoコマンドの実行によって,ルーティングキャッシュをクリアし,arpingコマンドの実行によって,ARPリクエストがブロードキャストされ,IPアドレスとMACアドレスのマッピングが更新されます。なお,ARPリクエストのブロードキャストのタイミングについては注意が必要です。「(c) ARPリクエストのブロードキャストのタイミング」を参照して対処してください。

サーバ識別名.upファイルは,hbondingを使用するかどうかで,設定する内容が異なります。

hbondingを使用しないとき

サーバ識別名.upファイルの内容を,次に示します。

#!/bin/sh
set -x
 
INTERFACE=eXXX                     # LAN interface name
IPADDR=n.n.n.n                       # alias IP address
PREFIX=ee                           # address prefix
BROADCAST=nnn.nnn.nnn.nnn            # broadcast address
RETRYCNT=m                         # retry count
 
# Retry for the alias IP address adding.
exitcode=1
loopcnt=0
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is added to the LAN interface.
    /usr/sbin/ip addr add $IPADDR/$PREFIX broadcast $BROADCAST dev $INTERFACE
 
    # The information on old routing cache is deleted.
    /bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
    # The ARP caches are updated.
    /sbin/arping -U -c 2 -I $INTERFACE $IPADDR
    sleep 1
    /sbin/arping -U -c 2 -I $INTERFACE $IPADDR
 
    # Was the alias IP address registered to the system ?
    RCD=`/usr/sbin/ip addr show dev $INTERFACE | grep " $IPADDR/$PREFIX "`
    if [ "$RCD" = "" ]
    then
        # When it is not registered, "1" is returned as the termination code.
        exitcode=1
 
        loopcnt=`/usr/bin/expr $loopcnt + 1`
    else
        # When it is registered, "0" is returned as the termination code.
        exitcode=0
 
        break
 
    fi
done
 
exit $exitcode
(凡例)

eXXX:インタフェース名

n.n.n.n:エイリアスIPアドレス

ee:プリフィックス

nnn.nnn.nnn.nnn:ブロードキャストアドレス

m:リトライ回数

一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。

hbondingを使用するとき

サーバ識別名.upファイルの内容を,次に示します。このとき,label指定によって,エイリアスデバイスにIPアドレスを付与してください。また,arpingコマンドは,物理デバイスを指定して実行してください。

#!/bin/sh
set -x
 
INTERFACE=hbondX                    # LAN interface name
IF_LABEL=hbondX:Y                   # alias device name
IPADDR=n.n.n.n                      # alias IP address
PREFIX=ee                           # address prefix
BROADCAST=nnn.nnn.nnn.nnn           # broadcast address
RETRYCNT=m                          # retry count
 
# Retry for the alias IP address adding.
exitcode=1
loopcnt=0
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is added to the LAN interface.
    /usr/sbin/ip addr add $IPADDR/$PREFIX broadcast $BROADCAST dev $INTERFACE label $IF_LABEL
 
    # The information on old routing cache is deleted.
    /bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
    # The ARP caches are updated.
    /sbin/arping -U -c 2 -I $INTERFACE $IPADDR
    sleep 1
    /sbin/arping -U -c 2 -I $INTERFACE $IPADDR
 
    # Was the alias IP address registered to the system ?
    RCD=`/usr/sbin/ip addr show dev $INTERFACE | grep " $IPADDR/$PREFIX "`
    if [ "$RCD" = "" ]
    then
        # When it is not registered, "1" is returned as the termination code.
        exitcode=1
 
        loopcnt=`/usr/bin/expr $loopcnt + 1`
    else
        # When it is registered, "0" is returned as the termination code.
        exitcode=0
 
        break
 
    fi
done
 
exit $exitcode
(凡例)

hbondX:インタフェース名

hbondX:Y:エイリアスデバイス名

n.n.n.n:エイリアスIPアドレス

ee:プリフィックス

nnn.nnn.nnn.nnn:ブロードキャストアドレス

m:リトライ回数

一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。

ifconfigコマンドを使用する場合

サーバ識別名.upファイルには,系ごとに割り当てられたLANアダプタのインタフェース名IPインデックス番号,およびエイリアスIPアドレスを設定します。必要に応じてネットマスク,ブロードキャストアドレス,およびリトライ回数を設定してください。また,エイリアスIPアドレスを追加したあと,echoコマンドおよびarpingコマンドを実行します。echoコマンドの実行によって,ルーティングキャッシュをクリアし,arpingコマンドの実行によって,ARPリクエストがブロードキャストされ,IPアドレスとMACアドレスのマッピングが更新されます。なお,ARPリクエストのブロードキャストのタイミングについては注意が必要です。「(c) ARPリクエストのブロードキャストのタイミング」を参照して対処してください。

サーバ識別名.upファイルの内容を,次に示します。

#!/bin/sh
set -x
 
INTERFACE=xxx:y                       # LAN interface name
IPADDR=n.n.n.n                        # alias IP address
NETMASK=nn.nn.nn.nn                  # netmask address
BROADCAST=nnn.nnn.nnn.nnn            # broadcast address
RETRYCNT=m                            # retry count
 
# Retry for the alias IP address adding.
exitcode=1
loopcnt=0
 
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is added to the LAN interface.
    /sbin/ifconfig $INTERFACE inet $IPADDR netmask $NETMASK broadcast $BROADCAST
 
    # The information on old routing cache is deleted.
    /bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
    # The ARP caches are updated.
    IFNAME=`echo $INTERFACE | /bin/sed -e 's/:[0-9]*$//'`
    /sbin/arping -U -c 2 -I $IFNAME $IPADDR
    sleep 1
    /sbin/arping -U -c 2 -I $IFNAME $IPADDR
 
    # Was the alias IP address registered to the system ?
    RCD=`/sbin/ifconfig -a | /bin/grep -E "[:| ]$IPADDR "`
    if [ "$RCD" = "" ]
    then
        # When it is not registered, "1" is returned as the termination code.
        exitcode=1
 
        loopcnt=`/usr/bin/expr $loopcnt + 1`
    else
        # When it is registered, "0" is returned as the termination code.
        exitcode=0
 
        break
    fi
done
 
exit $exitcode
(凡例)

xxx:インタフェース名

y:IPインデックス番号

n.n.n.n:エイリアスIPアドレス

nn.nn.nn.nn:ネットマスク

nnn.nnn.nnn.nnn:ブロードキャストアドレス

m:リトライ回数

一つのインタフェースで複数のエイリアスIPアドレスを使用する場合は,各エイリアスIPアドレスに対応して異なるIPインデックス番号を設定します。

なお,LANの状態設定ファイルが一つしかない,または複数のLANの状態設定ファイルが同一のインタフェースに対してエイリアスIPアドレスを付与することがない場合は,リトライする必要はありません。この場合は,バージョン01-52までで使用していたサーバ識別名.upファイルも使用できます。ただし,一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。

(a) リトライ処理の概要

ifconfigコマンドを使用する場合のリトライ処理の概要を説明します。なお,ipコマンドを使用する場合は該当しません。

複数のLANの状態設定ファイルでそれぞれが同一のインタフェースにエイリアスIPアドレスを付与する設定(例:server1.upeth1:1server2.upeth1:2にそれぞれエイリアスIPアドレスを付与する設定)の場合に,これらのLANの状態設定ファイルが同時に実行されると,一方のifconfigコマンドがエラーになってエイリアスIPアドレスの付与に失敗することがあります。

このような場合は,処理をリトライすることで対処できます。サーバ識別子.upファイルのリトライ回数(m)に,「同一インタフェースに対してエイリアスIPアドレスを付与するLANの状態設定ファイルの数」を指定します。例えば,前述のserver1.upserver2.upに設定する場合は,2を指定します。

注※

系障害による系切り替えで,切り替え先でserver1server2が同時に実行サーバとして起動する場合などに複数のLANの状態設定ファイルが同時に実行されることがあります。

(b) 一つのLANの状態設定ファイルで複数のエイリアスIPアドレスを付与する場合の例

一つのLANの状態設定ファイルで,eth1eth2にエイリアスIPアドレスを付与する場合の例を示します。

この例では,次の条件を想定しています。

  • このLANの状態設定ファイルのほかにeth1に別のエイリアスIPアドレスを付与するLANの状態設定ファイルが一つある(リトライ回数がeth1に対して2回)。

  • eth2に別のエイリアスIPを付与するLANの状態設定ファイルが二つある(リトライ回数がeth2に対して3回)。

  • eth1へのエイリアスIPアドレスの付与に失敗した場合,eth2へのIPアドレスの付与をしない。

    #!/bin/sh
    set -x
     
    INTERFACE=eth1:1                    # LAN interface name
    IPADDR=192.168.100.100              # alias IP address
    NETMASK=255.255.255.0               # netmask address
    BROADCAST=192.168.100.255           # broadcast address
    RETRYCNT=2                          # retry count
     
    # Retry for the alias IP address adding.
    exitcode=1
    loopcnt=0
    while [ $loopcnt -lt $RETRYCNT ]
    do
        # The alias IP address is added to the LAN interface.
        /sbin/ifconfig $INTERFACE inet $IPADDR netmask $NETMASK broadcast $BROADCAST
     
        # The information on old routing cache is deleted.
        /bin/echo 0 > /proc/sys/net/ipv4/route/flush
     
        # The ARP caches are updated.
        IFNAME=`echo $INTERFACE | /bin/sed -e 's/:[0-9]*$//'`
        /sbin/arping -U -c 2 -I $IFNAME $IPADDR
        sleep 1
        /sbin/arping -U -c 2 -I $IFNAME $IPADDR
     
        # Was the alias IP address registered to the system ?
        RCD=`/sbin/ifconfig -a | /bin/grep ":$IPADDR "`
        if [ "$RCD" = "" ]
        then
            # When it is not registered, "1" is returned as the termination code.
            exitcode=1
     
            loopcnt=`/usr/bin/expr $loopcnt + 1`
        else
            # When it is registered, "0" is returned as the termination code.
            exitcode=0
     
            break
        fi
    done
     
    if [ "$exitcode" = "1" ]
    then
        exit $exitcode
    fi
     
    INTERFACE=eth2:1                    # LAN interface name
    IPADDR=192.168.200.100              # alias IP address
    NETMASK=255.255.255.0               # netmask address
    BROADCAST=192.168.200.255           # broadcast address
    RETRYCNT=3                          # retry count
     
    # Retry for the alias IP address adding.
    exitcode=1
    loopcnt=0
    while [ $loopcnt -lt $RETRYCNT ]
    do
        # The alias IP address is added to the LAN interface.
        /sbin/ifconfig $INTERFACE inet $IPADDR netmask $NETMASK broadcast $BROADCAST
     
        # The information on old routing cache is deleted.
        /bin/echo 0 > /proc/sys/net/ipv4/route/flush
        # The ARP caches are updated.
        IFNAME=`echo $INTERFACE | /bin/sed -e 's/:[0-9]*$//'`
        /sbin/arping -U -c 2 -I $IFNAME $IPADDR
        sleep 1
        /sbin/arping -U -c 2 -I $IFNAME $IPADDR
     
        # Was the alias IP address registered to the system ?
        RCD=`/sbin/ifconfig -a | /bin/grep ":$IPADDR "`
        if [ "$RCD" = "" ]
        then
            # When it is not registered, "1" is returned as the termination code.
            exitcode=1
     
            loopcnt=`/usr/bin/expr $loopcnt + 1`
        else
            # When it is registered, "0" is returned as the termination code.
            exitcode=0
     
            break
        fi
    done
     
    exit $exitcode

(c) ARPリクエストのブロードキャストのタイミング

クライアントを含む同じネットワーク内のマシン(ノード)に,ARPエントリのロック期間が設定されている場合があります。系切り替え時のARPリクエストのブロードキャストが,それらのノードのロック期間内に行われると,ARPリクエストを受信したノードのARPエントリが更新されないで,系切り替え先との通信に失敗するおそれがあります。

そのため,系切り替え時のARPリクエストのブロードキャストが,それらのノードのロック期間経過後に行われるよう,一度arpingコマンドを実行したあとにロック期間分sleepし,その後再度arpingコマンドを実行してください。

なお,系切り替え対象のTCP通信を行うプログラムが停止してから系切り替え先でARPリクエストをブロードキャストするまでの時間が,ロック期間より長いシステムの場合は,ロック期間分のsleepと二度目のarpingコマンドは不要です。

注※

ARPエントリのロック期間とは,最後にTCP通信が切断されてから,ARPエントリを更新しないで保持する時間です。

RHELではデフォルトで1秒の設定となっています。

RHELの各系に設定されているARPエントリのロック期間は,/proc/sys/net/ipv4/neigh/<インタフェース名>/locktimeから確認できます(数値はjiffy単位)。

(2) サーバ識別名.downファイルの設定

ipコマンドを使用する場合

サーバ識別名.downファイルには,系ごとに割り当てられたLANアダプタのインタフェース名,エイリアスIPアドレス,およびプリフィックス(ネットワークを表すビット長)を設定します。必要に応じてリトライ回数を設定してください。

サーバ識別名.downファイルは,hbondingを使用するかどうかで,設定する内容が異なります。

hbondingを使用しないとき

サーバ識別名.downファイルの内容を,次に示します。

#!/bin/sh
set -x
 
INTERFACE=eXXX                      # LAN interface name
IPADDR=n.n.n.n                        # alias IP address
PREFIX=ee                            # address prefix
RETRYCNT=m                          # retry count
 
# Retry for the alias IP address delete.
exitcode=1
loopcnt=0
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is deleted from the LAN interface.
    /usr/sbin/ip addr del $IPADDR/$PREFIX dev $INTERFACE
 
    # Was the alias IP address deleted from the system ?
    RCD=`/usr/sbin/ip addr show dev $INTERFACE | grep " $IPADDR/$PREFIX "`
    if [ "$RCD" = "" ]
    then
        # When it is deleted, "0" is returned as the termination code.
        exitcode=0
        break
    else
        # When it is not deleted, "1" is returned as the termination code.
        exitcode=1
        loopcnt=`/usr/bin/expr $loopcnt + 1`
        sleep 1
    fi
done
 
# The information on old routing cache is deleted.
/bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
exit $exitcode
(凡例)

eXXX:インタフェース名

n.n.n.n:エイリアスIPアドレス

ee:プリフィックス

m:リトライ回数

一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。

hbondingを使用するとき

サーバ識別名.downファイルの内容を,次に示します。このとき,label指定によって,エイリアスデバイスにIPアドレスを付与してください。また,arpingコマンドは,物理デバイスを指定して実行してください。

#!/bin/sh
set -x
 
INTERFACE=hbondX                    # LAN interface name
IF_LABEL=hbondX:Y                   # alias device name
IPADDR=n.n.n.n                      # alias IP address
PREFIX=ee                           # address prefix
RETRYCNT=m                          # retry count
 
# Retry for the alias IP address delete.
exitcode=1
loopcnt=0
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is deleted from the LAN interface.
    /usr/sbin/ip addr del $IPADDR/$PREFIX dev $INTERFACE label $IF_LABEL
 
    # Was the alias IP address deleted from the system ?
    RCD=`/usr/sbin/ip addr show dev $INTERFACE | grep " $IPADDR/$PREFIX "`
    if [ "$RCD" = "" ]
    then
        # When it is deleted, "0" is returned as the termination code.
        exitcode=0
        break
    else
        # When it is not deleted, "1" is returned as the termination code.
        exitcode=1
        loopcnt=`/usr/bin/expr $loopcnt + 1`
        sleep 1
    fi
done
 
# The information on old routing cache is deleted.
/bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
exit $exitcode
(凡例)

hbondX:インタフェース名

hbondX:Y:エイリアスデバイス名

n.n.n.n:エイリアスIPアドレス

ee:プリフィックス

m:リトライ回数

一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。

ifconfigコマンドを使用する場合

サーバ識別名.downファイルには,系ごとに割り当てられたLANアダプタのインタフェース名,およびIPインデックス番号を設定します。

サーバ識別名.downファイルの内容を,次に示します。

#!/bin/sh
set -x
 
INTERFACE=xxx:y                      # LAN interface name
 
# The alias IP address is deleted from the LAN interface.
/sbin/ifconfig   $INTERFACE down
 
# The information on old routing cache is deleted.
/bin/echo 0 > /proc/sys/net/ipv4/route/flush
(凡例)

xxx:インタフェース名

y:IPインデックス番号

HAモニタの環境設定のfence_lanオペランドにuseを指定する場合は,エイリアスIPアドレスの削除結果を判定します。次の内容でサーバ識別名.downファイルを作成してください。

なお,fence_lanオペランドにuseを指定しない場合でも,次の内容を使用できます。

#!/bin/sh
set -x
 
INTERFACE=xxx:y                      # LAN interface name
RETRYCNT=m                           # retry count
 
# Retry for the alias IP address delete.
exitcode=1
loopcnt=0
while [ $loopcnt -lt $RETRYCNT ]
do
    # The alias IP address is deleted from the LAN interface.
    /sbin/ifconfig $INTERFACE down
 
    # Was the alias IP address deleted from the system ?
    RCD=`/sbin/ifconfig -a | /bin/grep -E "$INTERFACE( |: )"`
    if [ "$RCD" = "" ]
    then
    # When it is deleted, "0" is returned as the termination code.
        exitcode=0
        break
    else
        # When it is not deleted, "1" is returned as the termination code.
        exitcode=1
    loopcnt=`/usr/bin/expr $loopcnt + 1`
        sleep 1
    fi
done
 
# The information on old routing cache is deleted.
/bin/echo 0 > /proc/sys/net/ipv4/route/flush
 
exit $exitcode
(凡例)

xxx:インタフェース名

y:IPインデックス番号

m:リトライ回数

一時的な障害を考慮して,リトライ回数(m)に2以上を指定することを推奨します。