Linux(09):網路卡繫結

Ryan_Bai發表於2019-03-04

網路卡bond是透過把多張網路卡繫結為一個邏輯網路卡,實現本地網路卡的冗餘,頻寬擴容和負載均衡。在應用部署中是一種常用的技術,我們公司基本所有的專案相關伺服器都做了bond,這裡總結整理,以便待查。

一、bond模式

  • Mode=0(balance-rr) 表示負載分擔round-robin,和交換機的聚合強制不協商的方式配合。

  • Mode=1(active-backup) 表示主備模式,只有一塊網路卡是active,另外一塊是備的standby,這時如果交換機配的是捆綁,將不能正常工作,因為交換機往兩塊網路卡發包,有一半包是丟棄的。

  • Mode=2(balance-xor) 表示XOR Hash負載分擔,和交換機的聚合強制不協商方式配合。(需要xmit_hash_policy)

  • Mode=3(broadcast) 表示所有包從所有interface發出,這個不均衡,只有冗餘機制...和交換機的聚合強制不協商方式配合。

  • Mode=4(802.3ad) 表示支援802.3ad協議,和交換機的聚合LACP方式配合(需要xmit_hash_policy)

  • Mode=5(balance-tlb) 是根據每個slave的負載情況選擇slave進行傳送,接收時使用當前輪到的slave

  • Mode=6(balance-alb) 在5的tlb基礎上增加了rlb。

5和6不需要交換機端的設定,網路卡能自動聚合。4需要支援802.3ad。0,2和3理論上需要靜態聚合方式,但實測中0可以透過mac地址欺騙的方式在交換機不設定的情況下不太均衡地進行接收。

常用的有三種

  • mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。

  • mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。

  • mode=6:平衡負載模式,有自動備援,不必”Switch”支援及設定。

在mode=6 下有丟包現象。 推薦選擇mode=0

二、Linux網口繫結

透過網口繫結(bond)技術,可以很容易實現網口冗餘,負載均衡,從而達到高可用高可靠的目的。前提約定:

  • 2個物理網口分別是:eth0,eth1

  • 繫結後的虛擬口是:bond0

  • 伺服器IP是:192.168.0.100

  1. 第一步,配置設定檔案:

  • /etc/sysconfig/network-scripts/ifcfg-bond0

    TYPE=Ethernet
    DEVICE=bond0
    BOOTPROTO=none
    ONBOOT=yes
    USERCTL=no
    IPADDR=192.168.0.100
    NETMASK=255.255.255.0
    NETWORK=192.168.0.0
    BROADCAST=192.168.0.255
    NM_CONTROLLED=no
    
  • /etc/sysconfig/network-scripts/ifcfg-eth0

    TYPE=Ethernet
    DEVICE=eth0
    BOOTPROTO=none
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
    
  • /etc/sysconfig/network-scripts/ifcfg-eth1

    TYPE=Ethernet
    DEVICE=eth1
    BOOTPROTO=none
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    USERCTL=no
    
  • 第二步,修改modprobe相關設定檔案,並載入bonding模組:

    • 在這裡,我們直接建立一個載入bonding的專屬設定檔案/etc/modprobe.d/bonding.conf

      [root@test ~]# vi /etc/modprobe.d/bonding.conf

      #追加

      alias bond0 bonding

      options bonding mode=0 miimon=100

    • 載入模組(重啟系統後就不用手動再載入了)

      [root@test ~]# modprobe bonding

    • 確認模組是否載入成功:

      [root@test ~]# lsmod | grep bonding

      bonding 100065 0

  • 第三步,重啟一下網路,然後確認一下狀況:任意拔掉一根網線,然後再訪問你的伺服器,看網路是否還是通的。

    [root@test ~]# /etc/init.d/network restart
    [root@test ~]# cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
    Bonding Mode: fault-tolerance (active-backup)
    Primary Slave: None
    Currently Active Slave: eth0
    ……
    [root@test ~]# ifconfig | grep HWaddr
    bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74
    eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74
    eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74
    
  • 從上面的確認資訊中,我們可以看到3個重要資訊:

    • 現在的bonding模式是active-backup

    • 現在Active狀態的網口是eth0

    • bond0,eth1的實體地址和處於active狀態下的eth0的實體地址相同,這樣是為了避免上位交換機發生混亂。

  • 第四步,系統啟動自動繫結、增加預設閘道器:

    [root@test ~]# vi /etc/rc.d/rc.local
    #追加
    ifenslave bond0 eth0 eth1
    route add default gw 192.168.0.1
    
  • 三、/etc/modprobe.d/bonding.conf

    四網路卡繫結兩對網路卡需注意,不能使用追加的方式

    • 第一種:你可以看到,這種方式的話,多個bond口的模式就只能設成相同的了:

      alias bond0 bonding
      alias bond1 bonding
      options bonding max_bonds=2 miimon=200 mode=1
      
    • 第二種,這種方式,不同的bond口的mode可以設成不一樣:

      alias bond0 bonding
      options bond0 miimon=100 mode=1
      install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0
      

    bonding.conf 含義:

    • miimon 監視網路連結的頻度,單位是毫秒,我們設定的是200毫秒。

    • max_bonds 配置的bond口個數

    • mode bond模式,在一般的實際應用中,0和1用的比較多。

    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2637475/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章