Ubuntu

Ubuntu 16.04 LTS 伺服器上的 802.3ad 綁定配置文件

  • January 19, 2017

如果我在命令行上使用手動設置(按照核心說明),我可以正確設置我的網路連接:

# modprobe bonding mode=4 miimon=100
# ifconfig bond0 up
# ip link set eno1 master bond0
# ip link set eno2 master bond0

作為記錄,使用的交換機是 Cisco Nexus 2248,我沒有指定 IP 地址,因為還有一個額外的 802.1q 層(配置文件中存在或不存在對問題沒有影響)。

問題是我無法創建正確的/etc/network/interfaces文件以在啟動時自動完成此操作。網上有很多關於 ifenslave 包的不同版本之間的混淆,尤其是它的文件,以及如何在使用 ifup 時避免競爭條件。任何適用於以前版本的 Ubuntu 的東西都不再適用了。如果 systemd 讓事情變得更加混亂,我也不會感到驚訝。基本上,無論我嘗試什麼,我的腳本都會在啟動時卡住,我必須等待一到五分鐘才能完成啟動過程。

這是我能做到的最好的:

auto lo
iface lo inet loopback

allow-bond0 eno1
iface eno1 inet manual
      bond-master bond0

allow-bond0 eno2
iface eno2 inet manual
      bond-master bond0

auto bond0
iface bond0 inet manual
      bond-mode 4
      bond-slaves eno1 eno2
      bond-miimon 100

在啟動時,bond0 會停頓一分鐘(因為 bond0 正在等待至少一個從屬設備被啟動,這永遠不會發生,所以它會超時),但是一旦系統啟動,使用ifup eno1works 和 bond0 啟動好好工作。

如果我指定auto eno1,那麼啟動過程會停止五分鐘,bond0 永遠不會正確啟動,嘗試使用ifdown eno1會卡住,因為它正在等待一些鎖定/run/network/wherever(不記得確切的文件,並且經常重啟這台機器已經),這似乎表明是的,我遇到了競爭條件,ifup 永遠卡在 eno1 上。

有沒有人在最新的 Ubuntu 上有一個可行的解決方案?

我有一個在 16.04 (linux 4.4.0-22) 上執行的工作設置,非常相似。

除了 LACP 速率和 1G (eno1+) vs 10G SFP+ (eno49+) 最大的區別似乎是使用auto bond0.

# /etc/modprobe.d/bonding.conf
alias bond0 bonding
   options bonding mode=4 miimon=100 lacp_rate=1

其中一些選項可能是多餘的。

# /etc/network/interfaces
auto eno49
iface eno49 inet manual
   bond-master bond0

auto eno50
iface eno50 inet manual
   bond-master bond0

auto bond0
iface bond0 inet static
   address 10.0.0.1
   netmask 255.255.255.0
   bond-slaves eno49 eno50
   bond-mode 4
   bond-miimon 100
   bond-lacp-rate 1

在啟動過程中看不到任何停頓。執行 asystemctl restart networking會產生幾秒鐘的短暫等待,但僅此而已。

$ systemd-analyze
Startup finished in 2.344s (kernel) + 1.658s (userspace) = 4.002s

引用自:https://serverfault.com/questions/776057