#author("2016-12-05T23:35:48+09:00","default:nowsky","nowsky")
#author("2016-12-05T23:37:13+09:00","default:nowsky","nowsky")
*bonding [#bef1a23d]
複数のNICを束ねる事で、耐障害性向上・トラフィック負荷分散を図る技術。
目的に応じて最適な負荷分散アルゴリズムを選択する必要がある。
 
様々な別名があり、Bonding(ボンディング)以外には、チーミング(Teaming)、
CiscoだとPortChannel(ポートチャネル)、LAG(リンクアグリゲーション)と呼ぶ事もある。

~
*参考サイト [#m73805f7]

-[[【RHEL6】 チャンネルボンディングの使用:+https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html]]
-[[【waruko2 Note 】 CentOS/NICの冗長化(bonding設定):+http://www.maruko2.com/mw/CentOS/NIC%E3%81%AE%E5%86%97%E9%95%B7%E5%8C%96%EF%BC%88bonding%E8%A8%AD%E5%AE%9A%EF%BC%89]]
-[[【weblog of key_amb】 誤って作成したbonding deviceをきれいに削除する:+http://keyamb.hatenablog.com/entry/2013/06/20/195851]]

~
*冗長化アルゴリズム [#z3e53e31]
&font(b){モードを何も指定しない場合は、&color(#ff0000){balance-rr};};が自動的に選択される。
bondingインターフェースの&font(b){対向L2SWでLACPを設定出来る場合、&color(#ff0000){802.3ad};};にするのがオススメ。
 
&font(b){blance-rr};はラウンドロビン方式となる為、対向L2SWがスタック構成の場合は、
パケット送信元のMACアドレスが都度変化する事となり、&font(b){稀に&color(#ff0000){接続断が発生};};する。
これは、Linux・UNIX系OSを使っているアプライアンス(SANディスク装置、負荷分散装置、FW-UTM)全般に当てはまる事が多い。
その為、blance-rrは基本的に使用しない事を推奨する。
どうしてもblance-rrを使用する場合は、対向L2SWが1台である事を前提に、
MACアドレス分散が発生しない事を踏まえた上で、設計する必要がある。
 
#region(&color(#ff0000){アルゴリズム一覧};)
| mode | 別名          | 説明                                                                                                                                                                                                                                                                                                                                 |
| 0    | balance-rr    | 耐障害性とロードバランシングのためラウンドロビンポリシーを設定します。&br;利用可能な第1のインターフェースからそれぞれのボンディングされた、&br;スレーブインターフェースで送受信が順次行われます。                                                                                                                                    |
| 1    | active-backup | 耐障害性のためアクティブなバックアップポリシーを設定します。&br;利用可能な第1のボンディングされたスレーブインターフェースにより送受信が行われます。&br;別のボンディングされたスレーブインターフェースは、&br;アクティブなボンディングされたスレーブインターフェースが失敗した場合にのみ使用されます。                                |
| 2    | balance-xor   | 耐障害性とロードバランシングのためXOR(排他的論理和)ポリシーを設定します。&br;この方法を使用すると、インターフェースによって受信要求のMACアドレスと、&br;スレーブNICの1つのMACアドレスが一致します。&br;このリンクが確立すると、利用可能な第1のインターフェースから送信が順次行われます。                                             |
| 3    | broadcast     | 耐障害性のためブロードキャストポリシーを設定します。&br;すべての送信は、すべてのスレーブインターフェースで行われます。                                                                                                                                                                                                               |
| 4    | 802.3ad       | IEEE802.3ad動的リンクアグリゲーションのポリシーを設定します。&br;同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。&br;アクティブなアグリゲーターのすべてのスレーブで送受信を行います。&br;802.3adに対応するスイッチが必要です。                                                                         |
| 5    | balance-tlb   | 耐障害性とロードバランシングのため送信ロードバランシング(TLB)ポリシーを設定します。&br;発信トラフィックは、各スレーブインターフェースの現在の負荷に従って分散されます。&br;受信トラフィックは、現在のスレーブにより受信されます。&br;受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。 |
| 6    | balance-alb   | 耐障害性とロードバランシングのためアクティブロードバランシング(ALB)ポリシーを設定します。&br;IPV4トラフィック用の送受信ロードバランシングが含まれます。&br;ARPネゴシエーションにより、受信ロードバランシングが可能です。                                                                                                             |
#endregion

~
*送信ポリシー [#w3b321a6]
bondingには負荷分散アルゴリズムとは別に、&font(b){パケット送信ポリシー};が存在する。
L2~L4で分散方式に重み付けをする事で、通信が1インターフェースに偏るのを解消する事が出来る。
 
何も設定しない場合は、&font(b){&color(#ff0000){L2};(MACアドレス)};ベースでの負荷分散になる。
送信元のLinuxサーバが仮想化している場合、パケット送信元が全て同じMACアドレスとなる為、L2制御では偏りが発生する。
このような場合は&font(b){&color(#ff0000){L2+L3};(MACアドレスとIPアドレスのハッシュ)};で分散を行う方が良い。
 
#region(&color(#ff0000){ポリシ一覧};)
| policy | 別名          | 802.3ad      | 説明                                                                                                                                                                                       |
| 0      | Layer2        | 対応している | ハードウェアMACアドレスのXORを使用してハッシュを生成します。&br;すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振ります。                                                 |
| 1      | Layer3+Layer4 | 対応してない | 上位レイヤープロトコルの情報を使用して、ハッシュを生成します。&br;断片化されたTCPまたはUDPパケットと他の全IPプロトコルトラフィックについては、&br;送信元及び宛先ポート情報が省略されます。 |
| 2      | Layer2+Layer3 | 対応している | Layer2及びLayer3プロトコル情報の組み合わせを使用して、ハッシュを生成します。&br;すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振ります。                                 |
#endregion

~
*設定方法(Linux) [#uda6492c]
CentOS4、CentOS5~7でパラメータの指定方法が変化する。
今回は下記の条件でbondingする事を想定して設定を行う

| 使用I/F      | eth0/eth1      |
| 生成I/F      | bond0          |
| アルゴリズム | 802.3ad (LACP) |
| ポリシー     | L2+L3          |
 
#region(&color(#ff0000){設定内容};)
 # vi /etc/modprobe.d/if-bondig.conf
 ---
 alias bond0 bonding
 
 ## CentOS4の場合は下記も追加
 options bond0 mode=4 xmit_hash_policy=2 miimon=100

 # vi /etc/sysconfig/network-scripts/ifcfg-eth0
 ---
 DEVICE="eth0"
 USERCTL="none"
 BOOTPROTO="none"
 HWADDR="NICの実MACアドレスを設定"
 ONBOOT="yes"
 MASTER="bond0"
 SLAVE="yes"
 UUID="適当にUUIDを生成して設定"

 # vi /etc/sysconfig/network-scripts/ifcfg-eth1
 ---
 DEVICE="eth1"
 USERCTL="none"
 BOOTPROTO="none"
 HWADDR="NICの実MACアドレスを設定"
 ONBOOT="yes"
 MASTER="bond0"
 SLAVE="yes"
 UUID="適当にUUIDを生成して設定"

 # vi /etc/sysconfig/network-scripts/ifcfg-bond0
 ---
 DEVICE="bond0"
 BOOTPROTO="static"
 BROADCAST="ブロードキャストアドレス"
 IPADDR="bondigI/FのIPアドレス"
 IPV6INIT="no"
 IPV6_AUTOCONF="no"
 NETMASK="サブネットマスク"
 PEERDNS="no"
 NM_CONTROLLED="no"
 ONBOOT="yes"
 TYPE="Ethernet"
 BONDING_OPTS="bond0 mode=4 xmit_hash_policy=2 miimon=100"
 UUID="適当にUUIDを生成して設定"
#endregion

~
*設定方法(L2SW) [#m2946a88]
L2SWではPort-ChannelインターフェースをLACPモードで作成する
事前にPort-Channelを形成した上でLANケーブル結線を行わないとループになるので注意
 
#region(&color(#ff0000){L2SW設定例};)
-Cisco Catalyst
 interface Port-Channel1
  switchport access vlan ***
  switchport mode access
 !
 interface GigabitEthernet 1/0/1
  switchport access vlan ***
  switchport mode access
  channel-group 1 mode active
 !
 interface GigabitEthernet 1/0/2
  switchport access vlan ***
  switchport mode access
  channel-group 1 mode active

 
-AlliedTelesis CentreCOM
 interface port1.0.1-1.0.2
  switchport
  switchport mode access
  switchport access vlan ***
  channel-group 1 mode active
 !
 interface po1
  switchport
  switchport mode access
  switchport access vlan ***
#endregion

~
*ステータス確認 [#l45c9551]
設定した後は、下記コマンドを使って設定が反映されているか確認を行う。
bondingはL2SWとのモード不一致、LACPDU送信タイミング不一致などでループになりやすい。
 
#region(&color(#ff0000){確認コマンド};)
- Linux
 # cat /proc/net/bonding/bond0

- Catalyst
 # show lacp 1 neighbor
 # show etherchannel detail
 # show etherchannel protocol
#endregion

~
*bondingデバイス(インターフェース)の削除 [#sd5666d3]
bondingのインターフェース番号を間違えた場合、間違えた番号でデバイスが生成されてしまい、
bondingデバイスを削除出来なくなる。
 
使わないデバイスが残っているのは後々障害になりかねないので、
いらないbondingデバイスは下記のコマンド2つを実行して削除する。
例として、bond0デバイスを手動削除する方法をメモしておく
 
#region(&color(#ff0000){削除コマンド};)
- /proc/net/bonding/bond0の削除
 # echo "-bond0" > /sys/class/net/bonding_masters

- /proc/net/bondingの削除
 # rmmod bonding
#endregion