やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20080225 2008年 2月 25日 月曜日

IP アドレスを削減! Link-Base の IPMP 設定方法

今回は、Solaris 10 から追加されたリンクベースの障害検出 IP network multipathing (IPMP)の設定方法を紹介します。

IPMP は、Solaris8 10/00 からサポートされた機能ですが、当初は検査信号ベースの 障害検出のみサポートされておりました。その為、IPMP の設定にはサービス用 IP アドレスの他に検査用 IP アドレスが2つ必要であったり、検査に使用される ICMP Ping のトラフィックが発生したりと煩わしい部分がありました。

今回紹介するリンクベースの障害検出 IPMP は、検査 用 IP が不要で、サービス用の IP アドレス1つあれば設定可能ですし、ICMP Ping の トラフィックも発生しないメリットがあります。
さらに設定も簡単で、検査信号ベースの設定と比べて非常にシンプルです。


それでは、実際に リンクベースの障害検出 IPMP の Active-Standby と Active-Active の 設定を行ってみます。

[ IPMP Active-Active 構成設定方法]

今回は、e1000g の 0 と 1 のインターフェースを使用し、 サービスする IP アドレスは 192.168.0.1、 group 名を ipmp-g としました。
編集するファイルは、 /etc/hostname.e1000g0/etc/hostname.e1000g1 になります。

/etc/hostname.e1000g0 の設定内容
# cat hostname.e1000g0
192.168.0.1 netmask + broadcast + group ipmp-g up
/etc/hostname.e1000g1 の設定内容
# cat hostname.e1000g1
group ipmp-g up

上記ファイルを編集後、システムを再起動すれば終了です。
検査信号ベースの IPMP と比べて設定内容が非常にシンプルです!

(補足情報)
本設定をすると、システム起動時に in.mpathd が エラーを出しますが、検査信号 ベースを使用しない事を意味しており問題ございません。
Feb 21 20:58:52 server01 in.mpathd[149]: [ID 975029 daemon.error] No test
address configured on interface e1000g1; disabling probe-based failure 
detection on it
Feb 21 20:58:52 server01 in.mpathd[149]: [ID 975029 daemon.error] No test 
address configured on interface e1000g0; disabling probe-based failure 
detection on it

リンクベースの障害検出 IPMP を設定後の ifconfig コマンド出力結果は下記の通りです。

(設定後の ifconfig コマンド出力結果)
# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
        inet 192.168.0.1 netmask ffff0000 broadcast 192.168.255.255
        groupname ipmp-g
        ether 0:14:4f:f:a1:80
e1000g1: flags=1000843 mtu 1500 index 3
        inet 0.0.0.0 netmask ff000000 broadcast 0.0.255.255
        groupname ipmp-g
        ether 0:14:4f:f:a1:81


[Active-Active 構成障害検知テスト]

それでは、障害検知テストをしてみましょう。
サービスしている e1000g0 インターフェス側のケーブルを抜くと障害を検知し、サービス するインターフェースが切り替わります。

(障害検知後の状態)
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=19000802 mtu 0 index 2
        inet 0.0.0.0 netmask 0
        groupname ipmp-g
        ether 0:14:4f:f:a1:80
e1000g1: flags=1000843 mtu 1500 index 3
        inet 0.0.0.0 netmask ff000000 broadcast 0.0.255.255
        groupname ipmp-g
        ether 0:14:4f:f:a1:81
e1000g1:1: flags=1000843 mtu 1500 index 3
        inet 192.168.0.1 netmask ffff0000 broadcast 192.168.255.255

(障害検知時の syslog メッセージ)
Feb 21 21:04:40 server01 e1000g: [ID 801725 kern.info] NOTICE: pci8086,1011 - e
1000g[0] : Adapter copper link is down.
Feb 21 21:04:40 server01 in.mpathd[149]: [ID 215189 daemon.error] The link has
gone down on e1000g0
Feb 21 21:04:40 server01 in.mpathd[149]: [ID 594170 daemon.error] NIC failure d
etected on e1000g0 of group ipmp-g
Feb 21 21:04:40 server01 in.mpathd[149]: [ID 832587 daemon.error] Successfully
failed over from NIC e1000g0 to NIC e1000g1

ちなみに、抜いたケーブルを差して元の状態に戻すと、リンクアップを検知し、すぐに フェイルバックします。


[ IPMP Active-Standby 構成設定方法]

Active-Standby 構成も、/etc/hostname.e1000g0、/etc/hostname.e1000g1 ファイルを 編集するだけで終了です。
Active-Active 構成と比較して、hostname.e1000g1 ファイルに standby のキーワードが 入ります。

/etc/hostname.e1000g0 の設定内容
# cat hostname.e1000g0
192.168.0.1 netmask + broadcast + group ipmp-g up
/etc/hostname.e1000g1 の設定内容
# cat hostname.e1000g1
group ipmp-g standby up

(設定後の ifconfig 出力結果)
# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
        inet 192.168.0.1 netmask ffff0000 broadcast 192.168.255.255
        groupname ipmp-g
        ether 0:14:4f:f:a1:80
e1000g0:1: flags=1000843 mtu 1500 index 2
        inet 0.0.0.0 netmask ff000000 broadcast 0.0.255.255
e1000g1: flags=69000842 mtu 0 index 3
        inet 0.0.0.0 netmask 0
        groupname ipmp-g
        ether 0:14:4f:f:a1:81

[Active-Standby 構成障害検知テスト]

それでは、障害検知テストをしてみましょう。 サービスしている e1000g0 インターフェス側のケーブルを抜くと、Active-Active 構成 と同様に障害を検知し、サービスするインターフェースが切り替わります。 (障害検知後の状態)
# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=19000802 mtu 0 index 2
        inet 0.0.0.0 netmask 0
        groupname ipmp-g
        ether 0:14:4f:f:a1:80
e1000g1: flags=21000843 mtu 1500 index 3
        inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255
        groupname ipmp-g
        ether 0:14:4f:f:a1:81
e1000g1:1: flags=21000843 mtu 1500 index 3
        inet 192.168.0.1 netmask ffff0000 broadcast 192.168.255.255

(障害検知時の syslog メッセージ)
Feb 21 21:13:57 server01 e1000g: [ID 801725 kern.info] NOTICE: pci8086,1011 - e
1000g[0] : Adapter copper link is down.
Feb 21 21:13:57 server01 in.mpathd[149]: [ID 215189 daemon.error] The link has 
gone down on e1000g0
Feb 21 21:13:57 server01 in.mpathd[149]: [ID 594170 daemon.error] NIC failure d
etected on e1000g0 of group ipmp-g
Feb 21 21:13:57 server01 in.mpathd[149]: [ID 832587 daemon.error] Successfully 
failed over from NIC e1000g0 to NIC e1000g1
Feb 21 21:13:57 server01 in.routed[337]: [ID 970160 daemon.notice] unable to ge
t interface flags for e1000g0:1: そのようなデバイ スもアドレスもありません。
抜いたケーブルを差して元の状態に戻すと、Active-Standby 構成も同様、リンクアップ を検知し、すぐにフェイルバックします。

(最後に)
リンクベースの障害検出 IPMP は、ネットワークスイッチの口が2つあれば 簡単にネットワークの冗長構成を組む事ができますのでとても便利です。