6.12.2 LANの状態設定ファイルの設定
HAモニタの場合,LANはサーバ単位に接続,切り離しをします。HAモニタでは,LANの状態設定ファイルを作成して設定する必要があります。
LANの状態設定ファイルの種類を,次に示します。
- サーバ識別名.upファイル
-
LANを接続する場合に使用します。サーバが使用するIPアドレスをLANアダプタに割り当てるための情報を指定します。
- サーバ識別名.downファイル
-
LANの切り離しをする場合に使用します。サーバが使用するIPアドレスをLANアダプタから削除するための情報を指定します。
これらのファイルは,サーバごとにHAモニタの環境設定用ディレクトリの下に作成します。ファイル名のサーバ識別名の部分は,サーバ対応の環境設定のaliasオペランドで指定した値にしてください。
HAモニタには,HAモニタサンプルファイル用ディレクトリの下に,server.up,server.down,server_ip.up,およびserver_ip.downというファイル名で,LANの状態設定ファイルのサンプルファイルが用意されています。これらのファイルをHAモニタ環境設定用ディレクトリの下にコピーして書き換えることで,LANの状態設定ファイルを最初から作成する手間が省けます。また,ファイルには実行権限を与えてください。
HAモニタでのLANの切り替えは,エイリアスIPアドレスを使用します。LANの状態設定ファイルには,OSのifconfigコマンド,ipコマンド,およびarpingコマンドの引数として,LANアダプタに追加・削除するエイリアスIPアドレスを指定します。OSのコマンドについては,OSのマニュアルを参照してください。
- RHEL7以降のバージョンの場合
-
使用するコマンドに応じて,次のどちらかのLANの状態設定ファイルのサンプルファイルを使用してください。
-
ipコマンドを使用する場合:server_ip.upおよびserver_ip.down
-
ifconfigコマンドを使用する場合:server.upおよびserver.down
-
- RHEL6の場合
-
ifconfigコマンドを使用します。次のLANの状態設定ファイルのサンプルファイルを使用してください。
-
server.upおよびserver.down
-
ここでは,エイリアスIPアドレスを使用した場合の,LANの状態設定ファイルの設定方法について説明します。
(1) サーバ識別名.upファイルの設定
RHEL7以降のバージョンでipコマンドを使用する場合
サーバ識別名.upファイルには,系ごとに割り当てられたLANアダプタのインタフェース名,エイリアスIPアドレス,およびプリフィックス(ネットワークを表すビット長)を設定します。必要に応じてブロードキャストアドレスおよびリトライ回数を設定してください。また,エイリアスIPアドレスを追加したあと,echoコマンドおよびarpingコマンドを実行します。echoコマンドの実行によって,ルーティングキャッシュをクリアし,arpingコマンドの実行によって,ARPリクエストがブロードキャストされ,IPアドレスとMACアドレスのマッピングが更新されます。なお,ARPリクエストのブロードキャストのタイミングについては注意が必要です。「(c) ARPリクエストのブロードキャストのタイミング」を参照して対処してください。
サーバ識別名.upファイルは,RHEL7以降のバージョンでhbondingを使用するかどうかで,設定する内容が異なります。
- RHEL7以降のバージョンで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以上を指定することを推奨します。
- RHEL7以降のバージョンで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.upがeth1:1,server2.upがeth1:2にそれぞれエイリアスIPアドレスを付与する設定)の場合に,これらのLANの状態設定ファイルが同時に実行される※と,一方のifconfigコマンドがエラーになってエイリアスIPアドレスの付与に失敗することがあります。
このような場合は,処理をリトライすることで対処できます。サーバ識別子.upファイルのリトライ回数(m)に,「同一インタフェースに対してエイリアスIPアドレスを付与するLANの状態設定ファイルの数」を指定します。例えば,前述のserver1.upとserver2.upに設定する場合は,2を指定します。
- 注※
-
系障害による系切り替えで,切り替え先でserver1とserver2が同時に実行サーバとして起動する場合などに複数のLANの状態設定ファイルが同時に実行されることがあります。
(b) 一つのLANの状態設定ファイルで複数のエイリアスIPアドレスを付与する場合の例
一つのLANの状態設定ファイルで,eth1とeth2にエイリアス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ファイルの設定
RHEL7以降のバージョンでipコマンドを使用する場合
サーバ識別名.downファイルには,系ごとに割り当てられたLANアダプタのインタフェース名,エイリアスIPアドレス,およびプリフィックス(ネットワークを表すビット長)を設定します。必要に応じてリトライ回数を設定してください。
サーバ識別名.downファイルは,RHEL7以降のバージョンでhbondingを使用するかどうかで,設定する内容が異なります。
- RHEL7以降のバージョンで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以上を指定することを推奨します。
- RHEL7以降のバージョンで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以上を指定することを推奨します。