了解Linux 網路卡綁定,提升網路效能與冗餘性

2024.05.25


網路Linux
本文將深入探討什麼是網路卡綁定、它的工作原理、常見的綁定模式以及如何在Linux 系統中設定和管理網路卡綁定。

在現代化IT 基礎架構中,網路效能和可靠性至關重要。對於許多企業和個人用戶來說,確保網路的高可用性和冗餘性是首要任務之一。 Linux 提供了一個強大的解決方案-網路卡綁定(Network Interface Card Bonding,簡稱NIC Bonding)。本文將深入探討什麼是網路卡綁定、它的工作原理、常見的綁定模式以及如何在Linux 系統中設定和管理網路卡綁定。

什麼是網路卡綁定?

網路卡綁定是一種技術,透過將多個網路介面聚合在一起,創建一個邏輯上的網路接口,以提高網路頻寬和提供冗餘性。簡而言之,網路卡綁定可以讓多張網路卡同時運作,從而提高資料傳輸速率,並在某一張網路卡發生故障時提供故障轉移能力。

網路卡綁定的工作原理

網路卡綁定的核心思想是將多張實體網路卡虛擬化成一個單一的邏輯介面。這樣一來,多個網路卡就可以共同處理流量,提高整體的網路吞吐量。同時,當一張網卡失效時,系統可以自動將流量切換到其他可用的網路卡,從而實現冗餘和高可用性。

常見的綁定模式

網路卡綁定模式一共有七種(0到6),即bond0、bond1、bond2、bond3、bond4、bond5和bond6,其中常用的有三種:

  • mode=0:平衡負載模式,具備自動備援功能,但需要交換器的支援與配置。
  • mode=1:自動備援模式,當一條線路斷開時,其他線路會自動接管。
  • mode=6:平衡負載模式,具備自動備援功能,不需要交換器的支援與配置。

1.mode=0(平衡負載模式,Balance-rr)

這種模式透過輪詢(round-robin)的方式在所有綁定的網路介面之間分配網路流量。它確保每個網路介面都會輪流發送和接收資料包,以達到負載平衡的效果。

特點:

  • 負載平衡:透過輪詢方式分配流量,可以實現所有綁定介面的負載平衡。
  • 冗餘備援:如果其中一個接口發生故障,流量會自動切換到其他正常的接口,以確保網路連接的可靠性。
  • 性能提升:在支持的环境中,可以显著提升网络带宽和性能,因为流量同时在多个接口上传输。

要求:

  • 交換器支援:此模式需要連接的交換器支援EtherChannel(如Cisco的)或類似的技術,並且需要在交換器上進行相應的配置以實現鏈路聚合。
  • 配置複雜度:由於需要交換器的支援和配置,設定較為複雜。

適用場景:

  • 需要高頻寬和高可用性的環境,如伺服器叢集、資料中心等。
  • 環境中具備支援鏈路聚合技術的高階交換器設備。

2.mode=1(自動備援模式,Active-backup)

在這種模式下,只有一個網路介面處於活動狀態,其他介面處於備援狀態。如果活動介面發生故障,備援介面會自動接管,確保網路連線的連續性。

特點:

  • 高可用性:透過自動備援機制,實現網路連線的高可用性。如果活動介面發生故障,備援介面會立即接管,最小化網路中斷時間。
  • 單鏈路流量:只有一個介面在任何時間點處於活動狀態,因此總頻寬受限於單一介面的頻寬。
  • 無交換器需求:不需要交換器的特殊支援或配置,適用於大多數網路環境。

要求:

  • 簡易配置:無需複雜的交換器配置,只需在主機上進行綁定配置即可。

適用場景:

  • 對頻寬要求不高,但需要高可靠性的網路環境,如伺服器的管理介面或關鍵業務應用的網路連線。
  • 網路環境中沒有支援鏈路聚合的高階交換器設備。

3.mode=2(XOR模式,Balance-xor)

在這種模式下,基於傳輸的流量資訊(例如來源和目標的MAC位址、IP位址等)進行流量分配。透過對這些資訊進行異或(XOR)運算,確定每個資料包應該使用的實體介面。

特點:

  • 負載平衡:能在不同的介面之間有效分配流量,以實現負載平衡。
  • 冗餘備援:如果某個介面發生故障,其他介面可以接管其流量,以確保網路連線的穩定性和可靠性。
  • 效能最佳化:透過基於流的分配方式,可以實現更有效率的網路流量管理,特別是在多個連線同時進行時。

要求:

  • 交換器配置:需要連接的交換器支援鏈路聚合技術(如EtherChannel或LACP),並且需要在交換器上進行相應的配置以支援XOR模式。
  • 配置複雜度:由於需要在交換器上進行配置,相較於不需要交換器支援的模式,配置相對複雜。

適用場景:

  • 多個客戶端和伺服器之間有大量並發連線的場景,例如Web伺服器叢集。
  • 需要在不同連線之間進行負載平衡的高頻寬環境。

工作原理:

  • XOR模式透過對封包的來源和目標位址資訊進行異或運算,將計算結果用於選擇出一個實體介面來傳送該封包。
  • 這種方式確保了同一對來源和目標位址的流量始終透過同一個介面傳輸,從而避免了封包的亂序問題。

4.mode=3(廣播模式,Broadcast)

在這種模式下,所有傳出的封包都會透過所有的網路介面進行廣播(即所有介面都會傳送相同的封包)。這種方式確保資料包會透過所有可能的路徑傳輸到目的地,從而提高了資料傳輸的可靠性。

特點:

  • 資料冗餘:每個資料包都會透過所有綁定的介面進行傳送,因此在任何一個介面發生故障時,其他介面仍能繼續發送資料包,保證了資料傳輸的可靠性。
  • 無負載平衡:這種模式下沒有負載平衡功能,因為所有的介面都會同時發送相同的封包,不能提高頻寬。
  • 高可靠性:適合需要確保資料包到達目的地的場景,因為即使一個介面失敗,資料包仍能透過其他介面傳輸。

要求:

  • 支援多播/廣播:連接的網路設備和網路結構需要支援多播或廣播傳輸。
  • 配置相對簡單:不需要像mode=0那樣複雜的交換器配置。

適用場景:

  • 需要極高可靠性的環境,如需要確保資料包到達目的地的即時通訊系統、金融交易系統等。
  • 對頻寬要求不高,但對資料傳輸成功率要求很高的場景。

5.mode=4(IEEE 802.3ad 動態連結聚合)

mode=4 採用IEEE 802.3ad標準,透過動態連結聚合協定(LACP, Link Aggregation Control Protocol)實現多個網路介面的捆綁。這種模式允許多個網路卡協同工作,以提高頻寬和提供冗餘。

特點:

  • 負載平衡:基於LACP協議,可實現多個網路介面的負載平衡,提升總的網路吞吐量。
  • 冗餘備援:當某個連結失效時,流量會自動切換到其他正常的連結上,確保網路的高可用性。
  • 動態配置:LACP協定允許動態配置和管理鏈路聚合,可以根據實際情況調整鏈路數量。
  • 頻寬聚合:多個網路介面的頻寬可以聚合在一起,形成一個更大的虛擬頻寬。

要求:

  • 交換器支援:需要連接的交換器支援IEEE 802.3ad標準的LACP協議,並需要在交換器上進行相應配置。
  • 配置複雜度:由於需要設定交換器的LACP功能,設定相對複雜。

適用場景:

  • 資料中心、高效能運算環境等需要高頻寬和高可靠性的場景。
  • 企業級網路環境,尤其是需要動態調整網路頻寬和負載的環境。

6.mode=5(適配器傳輸負載平衡,Balance-tlb)

這種模式透過根據每個介面的當前負載來動態調整出站流量,從而在多個網路介面之間實現負載平衡。傳入流量由目前的主介面處理。

特點:

  • 傳輸負載平衡:透過監控每個介面的負載情況,動態調整流量的分配,使出站流量在介面之間平衡。
  • 自動備援:如果一個接口失效,流量會自動切換到其他接口,確保網路連線的可靠性。
  • 無需交換器支援:此模式不需要交換器支援鏈路聚合技術,因此配置簡單。

要求:

  • 單向負載平衡:僅對出站流量進行負載平衡,入站流量仍由主介面處理。
  • 動態負載調整:需要係統支援動態監控和調整介面負載。

適用場景:

  • 適用於不具備高階交換器支援的環境。
  • 需要在多重介面之間分配出站流量的場景,如網路伺服器和資料傳輸應用。

7.mode=6(平衡負載模式,Balance-alb)

mode=6是一種平衡負載模式,也稱為Adaptive Load Balancing(ALB),它在mode=0的基礎上進行了改進,主要針對了mode=0中的一個問題,即MAC位址風暴。 MAC位址風暴是指當mode=0中的一個網路卡失效後,其MAC位址會切換到另一個網路卡,導致網路中的所有裝置都要重新學習新的MAC位址,造成網路的短暫阻斷。 mode=6透過動態修改網路卡的MAC位址,解決了這個問題。

特點:

  • 負載平衡:類似mode=0,透過輪詢方式在所有綁定的網路介面之間分配網路流量,實現負載平衡。
  • 冗餘備援:當一個介面失效時,其它正常的介面會接管其MAC位址和IP位址,無需交換器的支援。
  • MAC位址動態修改:為避免MAC位址風暴,mode=6會動態修改網路卡的MAC位址,減少網路中斷。

要求:

  • 不需要交換器支援:相較於mode=0,mode=6不需要交換器的支援與配置,減少了部署的複雜度。
  • 相容性:需要確保網路設備對動態MAC位址變更的相容性。

適用場景:

  • 需要高可用性和負載平衡,且不想依賴交換器配置的環境。
  • 對網路中斷​​時間有嚴格要求的場景,如線上交易系統、雲端服務等。

8.小結

為方便大家的理解把上述總結如下表:

配置範例

在ubuntu系統中,可以透過以編輯/etc/netplan/01-network-manager-all.yaml下的檔案設定不同網卡的bond模式,以下以mode=4為例來闡述:

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      optional: true
    eth1:
      dhcp4: no
      optional: true
  bonds:
    bond4:  
      dhcp4: no
      addresses:
        - 192.168.1.103/24
      nameservers:
        addresses:
          - 192.168.1.1
          - 114.114.114.114
      routes:
          - to: default
            via: 192.168.1.1
      interfaces:
        - eth0
        - eth1
      parameters:
        mode: 802.3ad  #这里是指定bond的模式
        mii-monitor-interval: 100
        lacp-rate: fast
        transmit-hash-policy: layer2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

修改上述的設定文件,重啟網路服務,透過執行以下命令查看是否生效:

詳細資訊查看/proc/net/bonding/bond4這個文件,如下圖:

在交換器上,需要啟用LACP並將對應連接埠加入LACP群組。例如,在Cisco交換器上,可以透過以下命令進行設定:

Switch(config)# interface range GigabitEthernet0/1 - 2
Switch(config-if-range)# channel-group 1 mode active
Switch(config-if-range)# exit
Switch(config)# interface Port-channel 1
Switch(config-if)# switchport mode trunk
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

這種配置將eth0和eth1介面綁定為bond0,並將其設定為mode=4模式。交換器上的設定範例展示如何啟用LACP並將連接埠加入聚合群組。需要注意的是,具體配置可能因係統和設備而異。

總結網路卡綁定是提升Linux 系統網路效能和可靠性的重要技術。透過將多張網卡綁定在一起,用戶可以實現更高的頻寬、更好的負載平衡和更強的冗餘性。不同的綁定模式適用於不同的應用場景,使用者可以根據實際需求選擇合適的模式進行配置。掌握網路卡綁定技術,不僅能提升系統的網路效能,還能為關鍵業務應用提供更高的穩定性與可靠性。