? 英创工控主板双网络冗余方案--技术天地

英創工控主板雙網絡冗余方案

 2016/6/15    

  網絡冗余是工業網絡的一項保障策略,目的是減輕意外中斷的風險,當網絡中一條通路(物理鏈路)發生故障斷掉了,還可以通過其他通路(物理鏈路)傳遞信息。實現網絡冗余可以使用Bonding技術,也叫Truncking和Etherchannel技術,把多個網絡接口綁定在一起,形成一個邏輯上網絡接口,在用戶看來就是一個單獨的網絡接口。Bonding驅動有7種不同工作模式,根據不同的工作模式,可以提供不同的網絡負載均衡服務和網絡冗余服務。其7種工作模式如下,常用模式為0,1,6,其中1模式是這里用到的主備模式。


  表1 Bonding的7種工作模式:



模式代號模式名稱模式方式說明
0balance-rr

Round-robin policy

(循環策略)

按照設備順序依次傳輸數據包,第1個包走eth0,下一個包就走eth1….一直循環下去,直到最后一個傳輸完畢。這種模式提供負載均衡和容錯能力
1active-backup

Active-backup  policy

(主備策略)

只有一個設備處于活動狀態。一個宕掉另一個馬上由備份轉換為主設備。mac地址是外部可見的。此模式提供了容錯能力
2balance-xor

XOR policy

(異或策略)

根據MAC地址異或運算的結果來選擇傳輸設備,提供負載均衡和容錯能力
3broadcast

Broadcast policy

(廣播策略)

將所有數據包傳輸給所有接口,通過全部設備來傳輸所有數據,提供容錯能力
4802.3ad

IEEE 802.3ad  Dynamic link aggregation

(動態鏈路聚合)

創建共享相同速率和雙工設置的聚合組,利用所有接口傳輸。需要交換機支持802.3ad模式
5balance-tlb

Adaptive transmit  load balancing

(自適應傳輸負載均衡)

可以根據當前的負載把發出的數據分給每一個設備,由當前使用的設備處理收到的數據。本策略的通道聯合不需要專用的交換機支持,提供負載均衡和容錯能力
6balance-alb

Adaptive load balancing

(自適應負載均衡)

在5的基礎上增加接收負載均衡,由ARP協商實現。bonding驅動截獲本地發送的ARP應答,用其中一個從設備的MAC替換ARP應答中的源地址,讓不同的端具有不通的MAC地址


  英創Linux工控主板支持Bonding技術,能夠實現雙網絡冗余方案。我們將bonding驅動編譯成了.ko文件,以EM9287 + Linux-4.1.14為例,講述雙網絡冗余方案的配置過程:


  1)加載bonding.ko驅動,執行命令:insmod bonding.ko mode=1 miimon=100。

  mode為表1所述的工作模式,miimon指定MII鏈路監控頻率,單位是毫秒(ms),這將決定驅動檢查每個slave鏈路狀態頻率。miimon=0表示禁止MII鏈路監控,100可以作為一個很好的初始參考值。bonding.ko還有很多參數,如downdelay、arp_interval,用戶都可以通過這種形式傳遞給驅動程序,更詳細的參數、工作模式、配置方式介紹詳見linux源碼文檔Documentation/networking/bonding.txt。


  2)加載bonding驅動后,默認創建一個虛擬網卡bond0,需要對bond0進行配置:

  設置ip地址:ifconfig bond0 192.168.201.31 netmask 255.255.255.0 up

  添加從設備eth0、eth1:ifenslave bond0 eth0 eth1

  此時,bond0已經正常工作了,可以通過命令:cat /proc/net/bonding/bond0查看其工作狀態,如圖1所示。此時,bond0工作在模式1,主備策略,激活設備為eth0。此時拔掉eth0的網線,eth1將成為激活設備,繼續保持通信。


未標題-1.gif

圖1 bond0工作狀態


  3)關閉bond0

  執行命令ifconfig bond0 down即可關閉bond0,通信中斷。此時,eth0和eth1依然處在SLAVE狀態,并不能作為正常網絡接口通信。


  4)釋放bond0中的eth0和eth1

  釋放bond0中eth0和eth1后,關閉bond0時需要釋放bond0原來所占用的IP。

  ifenslave -d bond0 eth0 eth1    #從bond0中刪除eth0,eth1

  ifconfig bond0 0.0.0.0 down     #關閉bond0,釋放ip地址

  如需eth0、eth1重新作為單獨網卡工作,使用ifconfig eth0 ipaddress重新設定ip地址。


  用戶可以將2)、4)操作寫成兩個腳本文件:bonding-up.sh、bonding-release.sh。將它們放在和bonding.ko相同目錄下,使用bonding時執行./bonding-up.sh;關閉bonding時執行命令ifconfig bond0 down;釋放從設備時,調用./bonding-release.sh即可。


  bonding-up.sh內容如下:

  ifconfig bond0 192.168.201.31 up

  ifenslave bond0 eth0 eth1


  bonding-release.sh內容如下:

  ifenslave -d bond0 eth0 eth1#bond0 should be up state

  ifconfig bond0 0.0.0.0 down


  另外,如果用戶需要開機直接運行bonding驅動,可以在/mnt/nandflash/user.sh中以絕對路徑調用bonding-up.sh文件。


  user.sh示例:

  insmod /mnt/nandflash/bonding.ko mode=1 miimon=100

  /mnt/nandflash/bonding-up.sh