【譯】Linux Ethernet Bonding Driver HOWTO (2)


Linux Ethernet Bonding Driver HOWTO

更新時間:2006年4月24日

發佈者:Tomas Davis <tadavis at lbl.gov>
修正,增加高可靠性:2000/10/03-15:
  - Willy Tarreau <willy at meta-x.org>
  - Constantine Gavrilov <const-g at xpert.com>
  - Chad N. Tindel <ctindel at ieee dot org>
  - Janice Girouard <girouard at us dot ibm dot com>
  - Jay Vosburgh <fubar at us dot ibm dot com>

Jay Vosburgh於2005年2月重新組織並更新文檔
增加Sysfs相關內容:2006/04/24
  - Mitch Williams <mitch.a.williams at intel.com>

簡介
=============================

  Linux bonding驅動提供了一種方法,用以把多個網絡接口(network interface)組合成一個邏輯的"bonded"接口。Bonded接口的工作方式取決於驅動的模式:不同的模式提供了熱備份或負載均衡等不同的服務。此外,驅動還會監控鏈路的可用性。

  Bonding驅動最早來自Donald Becker針對Linux 2.0內核的beowulf補丁。現在已經有了很多的變化,最早的來自beowulf網站的工具已經不能和現在的驅動一起使用。

  如果你希望得到最新的版本,或者最新的用戶工具,或者尋求相關的幫助,請留意本文末尾的鏈接。

目錄
============================

1. Bonding驅動簡介

2. Bonding驅動選項

3. 配置Bonding驅動
3.1 通過Sysconfig配置Bonding
3.1.1  通過Sysconfig使用DHCP
3.1.2  通過Sysconfig配置多個Bond
3.2 通過Initscripts配置Bonding
3.2.1  通過Initscripts使用DHCP
3.2.2  通過Initscripts配置多個Bond
3.3 通過Ifenslave手工配置Bonding
3.3.1  手工配置多個Bond
3.4 通過Sysfs手工配置Bonding

4. 查詢Bonding配置
4.1 Bonding配置
4.2 網絡配置

5. Switch(交換機)配置

6. 802.1q VLAN

7.鏈路監控
7.1 ARP監控
7.2 配置多個ARP監控目標
7.3 MII監控

8. 可能的問題
8.1 Routing(路由)
8.2 Ethernet設備重命名
8.3 網速變慢或Mii監控無法發現出錯的鏈接

9. SNMP代理

10. Promiscuous(混雜)模式

11. 配置Bonding用於高可靠性
11.1 單一Switch下的高可靠性
11.2 多Switch下的高可靠性
11.2.1  多Switch下的Bonding模式選擇
11.2.1  多Switch下的鏈路監控

12. 配置Bonding用於大吞吐量
12.1 單一Switch下的大吞吐量網絡配置
12.1.1  單一Switch下的Bonding模式選擇
12.1.2  單一Switch下的鏈路監控
12.2 多Switch下的大吞吐量網絡配置
12.2.1  多Switch下的Bonding模式選擇
12.2.1  多Switch下的鏈路監控

13. Switch的問題
13.1 鏈路建立和Failover延時
13.2 Incoming包重複

14. 硬件相關
14.1 IBM刀片服務器

15. FAQ

16. 相關資源和鏈接


1. Bonding驅動簡介
=================================
  大多數目前發佈的Linux內核都以模塊(module)方式帶了bonding驅動,ifenslave工具也都已經安裝好。如果你的Linux沒有,或者你確實需要自己來編譯bonding(比如要配置或安裝自己的Linux內核),請參考如下步驟:

1.1 配置並編譯支持bonding的內核
---------------------------------

  當前版本的bonding驅動位於Linux內核源碼(從http://kernel.org下載)的drivers/net/bonding子目錄中。你可以在kerenl.org下載到最新版本的內核源碼。

  通過"make menuconfig"(或"make xconfig" "make config")配置內核,在“Network device support”下選擇“Bonding driver support”。建議你將bonding驅動配置爲模塊(module)方式,因爲如果你要給驅動傳遞參數或者希望配置多個bonding驅動,只有通過模塊方式。

  編譯並安裝新的內核和編譯出的模塊,然後參照下面的步驟安裝ifenslave。

1.2 安裝ifenslave控制工具
--------------------------------

  ifenslave控制工具也在內核源碼中:Documentation/networking/ifenslave.c。一般建議最好使用和內核匹配的ifenslave(同一份源碼中或同一個發佈中),然而較老的內核中的ifenslave也應該能夠正常工作(較新的一些功能將不能使用),不過更新的內核中的ifenslave將可能不能工作。

  參照如下步驟以安裝ifenslave:

# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
# cp ifenslave /sbin/ifenslave

  如果你的內核源碼不在“/usr/src/linux”下,請將上面的“/usr/src/linux/include”替換成相應的正確目錄。

  如果希望備份現有的/sbin/ifenslave,或者只是試用一下,你可以把ifenslave文件名加上內核版本信息(比如,/sbin/ifenslave-2.6.10)

重要提示:

  如果你忽略了"-I"參數或者指定了一個不正確的目錄,你可能會得到一個和內核不兼容的ifenslave。有些發佈(比如Red Hat 7.1之前的版本)沒有/usr/include/linux符號鏈接指向當前內核的include目錄。

另一個重要提示:
  如果你打算使用sysfs來配置bonding,你不需要使用ifenslave。

2. Bonding驅動選項
==============================

  Bonding驅動的選項是通過在加載時指定參數來設定的。可以通過insmod或modprobe命令的命令行參數來指定,但通常在/etc/modules.conf或/etc/modprobe.conf配置文件中指定,或其他的配置文件中(下一節將會提及幾個具體的細節)

  下面列出可用的bonding驅動參數。如果參數沒有指定,驅動會使用缺省參數。剛開始配置bond的時候,建議在一個終端窗口中運行"tail -f /var/log/messages"來觀察bonding驅動的錯誤信息【譯註:/var/log/messages一般會打印內核中的調試信息】。

  有些參數必須要正確的設定,比如miimon、arp_interval和arp_ip_target,否則在鏈接故障時會導致嚴重的網絡性能退化。很少的設備不支持miimon,因此沒有任何理由不使用它們。

  有些選項不僅支持文本值的設定,出於兼容性的考慮,也支持數值的設定,比如,"mode=802.3ad"和"mode=4"效果是一樣的。

  具體的參數列表:

arp_interval

  指定ARP鏈路監控頻率,單位是毫秒(ms)。如果APR監控工作於以太兼容模式(模式0和模式2)下,需要把switch(交換機)配置爲在所有鏈路上均勻的分發網絡包。如果switch(交換機)被配置爲以XOR方式分發網絡包,所有來自ARP目標的應答將會被同一個鏈路上的其他設備收到,這將會導致其他設備的失敗。ARP監控不應該和miimon同時使用。設定爲0將禁止ARP監控。缺省值爲0。

arp_ip_target

  指定一組IP地址用於ARP監控的目標,它只在arp_interval > 0時有效。這些IP地址是ARP請求發送的目標,用於判定到目標地址的鏈路是否工作正常。該設定值爲ddd.ddd.ddd.ddd格式。多個IP地址通過逗號分隔。至少指定一個IP地址。最多可以指定16個IP地址。缺省值是沒有IP地址。

downdelay

  指定一個時間,用於在發現鏈路故障後,等待一段時間然後禁止一個slave,單位是毫秒(ms)。該選項只對miimon監控有效。downdelay值應該是miimon值的整數倍,否則它將會被取整到最接近的整數倍。缺省值爲0。

lacp_rate

  指定在802.3ad模式下,我們希望的鏈接對端傳輸LACPDU包的速率。可能的選項:

  slow 或者 0
    請求對端每30s傳輸LACPDU

  fast 或者 1
    請求對端每1s傳輸LACPDU

  缺省值是slow

max_bonds

  爲bonding驅動指定創建bonding設備的數量。比如,如果max_bonds爲3,而且bonding驅動還沒有加載,那麼bond0,bond1,bond2將會被創建。缺省值爲1。

miimon

  指定MII鏈路監控頻率,單位是毫秒(ms)。這將決定驅動檢查每個slave鏈路狀態頻率。0表示禁止MII鏈路監控。100可以作爲一個很好的初始參考值。下面的use_carrier選項將會影響如果檢測鏈路狀態。更多的信息可以參考“高可靠性”章節。缺省值爲0。

mode

  指定bonding的策略。缺省是balance-rr (round robin,循環賽)。可選的mode包括:

  balance-rr 或者 0

    Round-robin(循環賽)策略:按順序傳輸數據包,從第一個可用的slave到最後一個可用的slave。該模式提供了負載均衡和容錯機制。

  active-backup 或者 1

    Active-backup(激活-備份)策略:只有一個slave是激活的(active)。其他的slave只有在當前激活的slave故障後纔會變爲激活的(active)。從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。

    在bonding 2.6.2和以後的版本中,如果在active-backup模式下出現failover【譯註:指一個slave發生故障,另一個slave變爲激活的設備】,bonding將會在新的slave上發出一個或多個ARP請求,其中一個ARP請求針對bonding master接口及它上面配置的每個VLAN接口,從而保證該接口至少配置了一個IP地址。針對VLAN接口的ARP請求將會被打上相應的VLAN id。

----------------------------------------------------------------------------------------
  In bonding version 2.6.2 or later, when a failover
  occurs in active-backup mode, bonding will issue one
  or more gratuitous ARPs on the newly active slave.
  One gratuitous ARP is issued for the bonding master
  interface and each VLAN interfaces configured above
  it, provided that the interface has at least one IP
  address configured.  Gratuitous ARPs issued for VLAN
  interfaces are tagged with the appropriate VLAN id.
----------------------------------------------------------------------------------------

    該模式提供了容錯機制。下面的primary選項將會影響該工作模式的行爲。

  balance-xor 或者 2

    XOR策略:基於指定的傳輸HASH策略傳輸數據包。缺省的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,下文將會對之介紹。

    該模式提供了負載均衡和容錯機制。

  broadcast 或者 3

    Broadcase(廣播)策略:在每個slave接口上傳輸每個數據包。該模式提供了容錯機制。

  802.3ad 或者 4

    IEEE 802.3ad Dynamic link aggregation(動態鏈接聚合)。創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規範將多個slave工作在同一個激活的聚合體下。

    外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。需要注意的是,並不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標準43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應性。

    必要條件:

    1. ethtool支持獲取每個slave的速率和雙工設定;

    2. switch(交換機)支持IEEE 802.3ad Dynamic link aggregation。

    大多數switch(交換機)需要經過特定配置才能支持802.3ad模式。

  balance-tlb 或者 5

    自適應的傳輸負載均衡:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。

    必要條件:

    ethtool支持獲取每個slave的速率。

  balance-alb 或者 6

    自適應均衡負載:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫爲bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。

    來自服務器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中複製並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬件地址提取出來,併發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址後,接收流量將會全部劉翔當前的slave。這個問題通過給所有的對端發送更新(ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分佈。當新的slave加入到bond中時,或者某個未激活的slave重新激活時,接收流量也要重新分佈。接收的負載被順序地分佈(round robin)在bond中最高速的slave上。

    當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個client發起ARP應答。下面介紹的updelay參數必須被設置爲某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答不會被switch(交換機)阻截。

    必要條件:

    1. ethtool支持獲取每個slave的速率;

    2. 底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個bond中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的curr_active_slave接管。
 

(未完待續)

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章