8) NIC冗長化設定 (bonding設定)
第8回は、LANケーブルおよびネットワーク・インタフェース・カード(以下NICと略記)のトラブルに備え、予めNICを複数搭載し、アクティブ側NICトラブル発生の際、瞬時に予備側NICへの切替を実行するための「NIC冗長化設定 (bonding設定)」についてです。
インターネットリサーチ・コンサルティング・企画、ウェブ翻訳から、Web制作、システム開発までオープンソース・ネットワークビジネスを提供
NIC冗長化設定について
各種サーバーに対して、各々提供するサービスの重要性や用途に応じた耐障害性を保証する必要があります。サーバーの耐障害性を高める具体的な方法として、サーバー本体、ハードディスク、CPU等のハードウェア冗長化があり、ここではNICの冗長化について取り上げます。
NICの冗長化は、一般的に「teaming」と呼ばれますが、Linuxではbondingモジュール (Linuxの「モジュール」は、Windowsの「ドライバー」に相当) を使用して設定するため「bonding」とも表現されます。以下、NIC冗長化を「bonding」と表記します。
bonding設定準備
bondingを行うには、Linux Kernelのバージョンがbondingに対応し、且つ複数のNICを実装している必要があります。
bondingに対応するKernelのバージョン、NICの種類は以下です。
1. Linux Kernelのバージョンについて
bondingの利用には、Linux Kernelの対応が必要となります。Kernelのバージョンが2.4.18以上の場合、bondingは標準で使用可能ですが、Kernelのバージョンが2.4.18未満の場合、Kernelのバージョンアップ、もしくはパッチを適用し、予めbondingが使用できる環境を構築する必要があります。
Kernelがbondingに対応している場合、bondingモジュールを組み込むことによって、複数のNICをひとまとめにした仮想ネットワークデバイスであるbondデバイスを作成することができるようになります。
2. NICの種類、枚数、その他ネットワーク機器について
bondingに利用できるNICは、Linuxで使用可能なNICであれば、各々メーカー・型番が異なっていても利用可能です。また、bondingに必要なNICの上限数が無いため、取り付けた枚数分のNICをbondingに利用できます。
一方、bondingに利用するNICを同一のリピーターHUB (スイッチング機能を持たないHUB) に接続するとトラブルの発生要因 (*1) となりますので、bondingの利用にはスイッチング機能を持ったネットワーク機器に接続する必要があります。
(*1) リピーターHUBは、受信データを、受信中のポートを除く全てのポートから一斉に送信します。そのためリピーターHUBを経由してbonding使用端末にデータ送信を行うと、bonding使用端末に同一データが重複して送信され、問題が発生する事になります。
bonding設定について
bonding設定を行うには、モジュール読込とNICの設定を行う必要があります。ここでは、設定ファイル、設定反映方法、確認方法について以下に記します。
1. モジュール設定ファイルおよび設定反映方法について
bondingモジュールを読み込むための設定ファイルは /etc/modules.conf です。OSのベンダーやバージョンにより、 /etc/modprobe.conf ファイルや /etc/modprobe.d ディレクトリー配下のファイルに設定する場合がありますが、ここでは /etc/modules.conf ファイルに限定して解説します。
/etc/modules.conf設定例
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0
上記の設定項目については、以下の通りです。alias bond0 bonding ネットワークデバイス「bond0」に対し、bondingモジュールを指定します。
bond0は物理的に存在しないデバイスのため、仮想ネットワークデバイスと表現します。options bond0 .... ネットワークデバイス「bond0」に組み込まれたbondingモジュールについて、パラメーターを指定します。
bondingモジュールのパラメーターは以下の通りです。miimon=100 bondingに使用するNICが通信可能であるかどうかを監視する頻度を、ミリ秒単位で指定します。
本例は100ミリ秒 (0.1秒) を指定しています。mode=1 bondingの動作の種類を指定します。
本例は、通常は1つのNICのみ有効とし、その他のNICがホットスタンバイとして動作し、有効なNICが通信不可となった場合に自動切替を行います。primary=eth0 bondingに使用するNICが全て通信可能の場合に、有効とするNICを指定します。mode=1の場合のみ、本設定は有効となります。
本例はネットワークデバイス「eth0」を指定しています。
上記設定完了後、設定内容を反映するには、下記コマンドでLinux OSを再起動します。# reboot
2. NIC設定ファイルおよび設定反映方法について
本例ではモジュール設定ファイル (/etc/modules.conf) にてネットワークデバイス「bond0」を指定しているため、/etc/sysconfig/network-scripts/ifcfg-bond0を新規作成し、設定します。
ここで、bondingに使用するNIC設定ファイルにて、bond0の配下 (slave) になるように設定します。
以下に、bondingにそれぞれeth0, eth1を設定する例を示します。
/etc/sysconfig/network-scripts/ifcfg-bond0設定例 (ファイルが存在しない場合、新規作成してください)
DEVICE=bond0
IPADDR=192.168.0.20
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
※「DEVICE=bond0」とする以外は、通常のNIC設定を行います。/etc/sysconfig/network-scripts/ifcfg-eth0設定例
DEVICE=eth0
MASTER=bond0
SLAVE=yes
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
※「MASTER=bond0」および「SLAVE=yes」の設定で、bond0の配下に設定します。/etc/sysconfig/network-scripts/ifcfg-eth1設定例
※「DEVICE=eth1」とする以外、ifcfg-eth0と同一の設定のため、省略します。
設定ファイル変更後、設定反映のため、ネットワーク機能を再起動する必要があります。下記コマンドでネットワーク機能を再起動します。
# service network restart
3. 設定確認について
設定確認にはifconfigコマンドを使用します。また、/proc/net/bonding/bond0の内容を表示することで、状態確認を行うことができます。
設定確認方法
ifconfigコマンドでbond0およびbondingに使用するNICの情報が表示されることを確認します。
# ifconfig
bonding状態確認方法
bondingの状態を確認するには、/proc/net/bonding/bond0の内容を確認します。
# cat /proc/net/bonding/bond0/
/proc/net/bonding/bond0内容例/
Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 2
Permanent HW addr: 00:0e:0c:70:5d:55
Slave Interface: eth1
MII Status: up
Link Failure Count: 2
Permanent HW addr: 00:0e:0c:5d:e6:6e
上から順にbondingモジュールのバージョン、bond0の状態、eth0の状態、eth1の状態が、空行で区切られて表示されています。NIC毎の通信可否状態について
bondingを実行している場合、該当する全てのNICに障害が発生するまで、通信可能な状態が保持されます。
そこで、全てのNICに対し、bondingの稼働状態確認を定期的に行い、bondingに使用する各NICの通信可否状態を把握する必要があります。
これを実行するための確認箇所は、/proc/net/bonding/bond0の内容の各ネットワークデバイスの通信可否状態を示す「MII Status:」の行です。「MII Status: up」となっている場合、通信可能状態である事を示します。/proc/net/bonding/bond0の内容の「MII Status: up」以外にNICの稼働状態を検知する方法はいろいろありますが、grep系コマンドと組み合わせることで簡単に抽出することができます。
コマンド例は以下です。# cat /proc/net/bonding/bond0 | fgrep "MII Status:" | fgrep -v "MII Status: up"
※/proc/net/bonding/bond0の内容より「MII Status:」行を抽出し、「MII Status: up」以外の行を抽出します。
次回は、主にプライベートIPアドレスとグローバルIPアドレスの変換に使用され、セキュリティーを高める効果のある、IPアドレスやポート番号の変換技術「NAT・IPマスカレード」についてです。


