Linux bondingの設定

RedHat系Linuxサーバー構築中。
bondingの設定もしたので、自分向けにメモ。

◎概要
NICの負荷分散、冗長化機能。
複数のNICを束ねて1つのチャンネルにする。
あるNICや通信経路に障害が発生しても、他のNICで通信を継続できる。
また、複数のNICを使った大容量通信も実現可能。

◎事前確認

  • Linuxカーネルバージョン
    • 2.4.18以上 → 標準で利用可
    • 2.4.18未満 → バージョンアップまたはパッチ適用が必要
  • NICについて
    • Linuxで利用可能なNIC→メーカー・型番が異なってもOK(NICベンダーに依存しない)
    • bondデバイスのslaveの数には上限なし
    • 対向のネットワーク機器はスイッチ機能を有していること → リピーターHUBだと問題発生要因になる
  • bondingモード
    • 導入環境にあわせて、モードを以下の7つから選択
    • モード0 (balance-rr):ラウンドロビン
      • ラウンドロビンによる負荷分散
      • 高速転送向け
      • デフォルト
      • trunkに対応した対向スイッチが必要
      • パケット到着順を気にするAPの場合は注意
    • モード1(active-backup)
      • 1つのNICがアクティブ。他はスタンバイ。
      • 耐障害性を重視
      • 切替時のARP学習状態に注意
    • モード2(balance-xor)
      • 送信元/宛先MACアドレスのXOR演算による負荷分散
      • MACアドレスをキーにしてポート(NIC)を決定
      • 直結ネットワーク上のホストとの通信に向く
      • trunkに対応した対向スイッチが必要
    • モード3(broadcast)
      • 束ねた全NICから同一パケット送信
      • 特殊環境(複数のSWに接続し、各SW間でL2レベルでの通信ができない環境)利用で、ほとんど使われない
    • モード4(802.3ad)
      • IEEE 802.3ad Dynamic link aggregation規格で接続
      • IEEE802.3ad対応SW必要
    • モード5(balance-tlb)
      • NICの速度・負荷に応じた負荷分散
      • I宛先IPアドレスで振分け
      • 10秒ごとにポート負荷状態(byte単位の通信速度)確認。→宛先IPアドレス/ポート対応表作成
      • 送信と受信では別のI対応表を使う→行き・帰りの経路が異なる→フラッディングすることも?
    • モード6(balance-alb)
      • NICの速度・負荷に応じた負荷分散
      • TLBの機能に加え、受信ポートの状態も見て、受信ポートを切替える。
      • ARP要求時に受信ポートを決定
      • 障害検出時、ARPメッセージを送信して受信ポート切替え

◎設定
bondingを利用する設定手順の概要は以下。(設定後にシステム再起動する場合)

  1. bondingドライバの有効化
  2. bondingインタフェース(bond0)を定義
  3. sulaveインタフェースを定義
  4. システム再起動して、確認

1. bondingドライバの有効化
bondingインタフェース(ここではbond0)にbondingモジュールを組み込む

# vi /etc/modprobe.d/dist.conf (RHEL6の場合)
※他に/etc/modprobe.conや/etc/modules.confだったりする

以下の2行を追記。ここではbondingモードは「0」を使う。MII監視インターバルは100msec。
alias bond0 bonding
options bonding mode=0 miimon=100
(またはoptions bond0 mode=0 miimon=100)

miimonはMIIモニタリングのことだろう・・・。

2. bondingインタフェース(bond0)を定義

bondingインタフェースは仮想インタフェース。最初は設定ファイルが存在しないので、作成する。

# vi /etc/sysconfig/network-scripts/ifcfg-bond0
普通のインターフェースを設定をするのと同じ。たとえば、以下のように記述。

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
IPADDR=192.168.22.229
NETMASK=255.255.255.0
NETWORK=192.168.22.0

3. slaveインタフェースの定義
bondingで束ねられる(チーム化される)物理インタフェースのことをslaveインタフェースと呼ぶ。
ここではeth1、eth2。
eth1、eth2がbond0のslaveインタフェースになるように設定。

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
HWADDR=00:0c:29:**:**:**
ONBOOT=yes
BOOTPROTO=none
USERCTL=none
MASTER=bond0 <– これを書く!
SLAVE=yes <–これを書く!

※ifcfg-eth2も同じ

【注意】
RHEL6で、MASTER=”bond0”などと、bondingに関する項目の設定値を[“](ダブルクォーテーション)で囲んだら、システム再起動の際に、slaveインタフェースは自動で立ち上がってこなかった。手動ならリンクアップ可能。
[“]を使わなければOK。

4. システム再起動して、確認

# reboot

システム起動時に /etc/rc.d/rc.sysinit内のmodprobeコマンドでbondingモジュールもロードされる。
# lsmod | grep bond
bonding                98281  0
ipv6                  270561  23 bonding

bondingの状態を確認

# cat /proc/net/bonding/bond0

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:**:**:**
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:**:**:**

# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0C:29:**:**:**
         inet addr:192.168.22.229  Bcast:192.168.22.255  Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:fe65:4b12/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
    ~~(omitted)~~

eth1      Link encap:Ethernet  HWaddr 00:0C:29:**:**
:**
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
    ~~(omitted)~~

eth2      Link encap:Ethernet  HWaddr 00:0C:29:65:4B:12
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
    ~~(omitted)~~

あとはping通信中にLANケーブルを抜いたりして、耐障害性機能を確認したりする。

【参考】

タイトルとURLをコピーしました