サーバのボンディング(bonding)の切り替えが起きず、
トラフィックを処理できない事象が発生した。
問題への対応を検討する。
◆ 障害内容
サーバ側で、ボンディングのActive-Backup モード(mode=1)を利用し、
障害の検知方法としてMII監視を使っていた。
しかし、L2スイッチがリンクがアップしている状態で故障したため、
サーバ側では異常を検知できなかった。
その結果サーバ側での経路切り替えが起きず、トラフィックを処理できなくなった。
L2SW L2SW
| ⇒ × | 左経路から右経路にbonding切り替えが起きない
SERVER
◆ ボンディング切り替えの監視方法の変更絵検討
ボンディングのActive-Backup モード (mode=1) では障害の監視方法として
MII監視とARP監視の2通りの設定がある。
ボンディングを切り替えるためのトリガーとなる監視方式を
障害時に利用していた(1)から(2)の方式へ変更できるかを検討する。
(1) MII監視: MII(Media Independent Interface)規格によるNIC のリンク監視
(2) ARP監視:指定したIPアドレス(ARPターゲット)へのARPリクエストによる疎通確認
◆ ARP監視へ切り替える前の検討ポイント
現在はMII監視が主流である。
それはARP監視には以下のようなデメリットが存在するためだろう。
(a) ARPによる無駄なパケットがブロードキャストドメイン内に流れる。
(b) ARP監視によるによるオーバーヘッドがかかる。
(c) スイッチの機能でのフィルタリングの設定の見直しが必要になる時がある。
(d) ARPターゲットの停止を意識する必要があり、メンテナンス性が悪い。
今回のように、半端な状態での故障を防ぎたい要望が、
上記のデメリットを勝るのであれば変更した方がいいだろう。
◆ ARP監視を行う場合のターゲットの選定について
(a) ARPリクエスト(ブロードキャスト)が届き、ARP応答(ユニキャスト)を返せること。
(b) ターゲットの障害、メンテナンスを考慮し、複数ターゲットを用意できること。
◆ 設定ファイル
既存の設定(1)を(2)へと変更する。
(1) MII監視
# cat /etc/modprobe.conf
もしくは、ボンディング用に別ファイルに分けているなら、
# cat /etc/modprobe.d/bonding
alias bond0 bonding
options bonding mode=1 miimon=100 updelay=5000
・miimon : MII監視インターバルを1/1000秒単位で指定する。
・updelay : MII監視でリンクアップを検知後、該当NICに切り替えるまでの時間を
1/1000秒単位で指定する。
(2) ARP監視
# cat /etc/modprobe.conf
もしくは、ボンディング用に別ファイルに分けているなら、
# cat /etc/modprobe.d/bonding
alias bond0 bonding
options bonding mode=1 arp_interval=1000 arp_ip_target=172.25.142.254,172.25.142.253
・arp_interval : ARP監視のインターバルを1/1000秒単位で指定する。
・arp_ip_target : ARPリクエストを送る先を指定する。
最大16個まで指定することが可能である。
複数指定した場合は、指定したマシンのうち、
いずれかからのレスポンスがあればよい。
arp_interval=10(10msec)でも動作はするが、
誤検知の可能性およびarpリクエストによるトラフィックを考えると1000msec程度がいいだろう。
※
MII監視からARP監視への切り替えはサーバ再起動が必須となる。
※
上記は 現状設定されている/etc/modprobe.conf での指定となるが、
/etc/sysconfig/network-scripts/ifcfg-bond* ファイルにて個別に「BONDING_OPTS=~」
パラメータで指定することも可能である。
# cat /etc/sysconfig/network-scripts/ifcfg-bond***
BONDING_OPTS="mode=1 arp_interval=1000 arp_ip_target=172.25.142.254,172.25.142.253"
※
ARP監視を行う場合は誤検知軽減策としてarp_validateオプションを検討してもよい。
未対応のカーネルも多いため、ここでの説明は省略する。
※
設定変更後は"/etc/init.d/network restart"による再起動が必要である。