Ubuntu 16.04 LTS 伺服器上的 802.3ad 綁定配置文件
如果我在命令行上使用手動設置(按照核心說明),我可以正確設置我的網路連接:
# 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 eno1
works 和 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
在啟動過程中看不到任何停頓。執行 a
systemctl restart networking
會產生幾秒鐘的短暫等待,但僅此而已。$ systemd-analyze Startup finished in 2.344s (kernel) + 1.658s (userspace) = 4.002s