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=100bondingに使用するNICが通信可能であるかどうかを監視する頻度を、ミリ秒単位で指定します。
    本例は100ミリ秒 (0.1秒) を指定しています。
    mode=1bondingの動作の種類を指定します。
    本例は、通常は1つのNICのみ有効とし、その他のNICがホットスタンバイとして動作し、有効なNICが通信不可となった場合に自動切替を行います。
    primary=eth0bondingに使用する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マスカレード」についてです。

関連キーワード
Linux,LINUX,ネットワーク設定,NIC冗長化,bondingモジュール,teaming,bond0,MII,active-backup, fault-tolerance,Kernel-2.4.18, Kernel-2.4.12,リピーターHUB

コメントをお待ちしています

お名前:

メールアドレス:

コメント:

このエントリーのトラックバックURL

http://it.jfe-tec.jp/mt/mt-tb.cgi/37