如何為伺服器設定雙網卡故障切換

當單張網路介面卡(NIC)發生故障時,網路連線就會中斷。這種停機會影響關鍵服務的正常運作。為了確保高可用性,可以將伺服器雙網卡設定為 active-backup 綁定模式。此綁定會建立一個邏輯介面,其中一張網卡作為主要介面,另一張保持閒置,直到主要介面發生故障後才接手。切換過程會自動完成。這樣無需複雜的負載平衡設定,也能提供鏈路備援。你只需辨識網卡、建立 bond 並設定工作模式,然後為 bond 指派一個統一的 IP 位址即可。實體網卡本身不需要個別設定 IP。這種方法同時適用於 Linux 與 Windows。即便一張網卡或一條網路線失效,伺服器也能保持在線。
重點整理
- Active-backup 綁定一次只使用一張網卡。這種方式提供的是故障切換備援。
- 為 bond 介面設定一個統一的 IP 位址。實體網卡本身不需要個別設定 IP。
- 在 Linux 上,將 bonding 模式設為 active-backup,並使用 miimon 或 ARP 監控進行鏈路偵測。
- 在 Windows 上,使用 NIC Teaming,並透過手動設定介面計量值來控制主要介面卡。
- 透過停用目前活動中的網卡來測試故障切換,並驗證是否能自動切換到備用網卡。
理解網路綁定與 active-backup 模式
網路綁定可以將兩張或多張網卡合併成一個邏輯連線。這種技術無需複雜的硬體改造,就能提供容錯能力。bonding 驅動程式會將多個實體連接埠統一管理為一個整體。你只需設定一次 bond,驅動程式就會自動處理故障切換。
什麼是 active-backup 模式,它如何運作
Active-backup 模式是最簡單的一種 bonding 策略。只有一個從屬介面負責承載全部流量,另一個則處於待命狀態。Linux bonding 驅動程式文件對其行為有明確說明:
Active-backup 策略:在 bond 中,任一時間只有一個從屬介面處於活動狀態。只有當目前活動介面發生故障時,另一個從屬介面才會被啟用。為避免交換器混淆,bond 的 MAC 位址在外部只會出現在一個連接埠上。
當故障切換發生時,驅動程式會在新的活動從屬介面上傳送 gratuitous ARP(免費 ARP)封包,以通知網路中的設備該 MAC 位址已經遷移。交換器會更新其轉送表,流量便可在無需人工介入的情況下恢復。
鏈路故障偵測主要依賴以下三種機制:
- miimon(預設):bond 僅監控實體載波狀態。此方法無法偵測「鏈路雖然維持 Up,但交換器已停止轉送資料封包」的情況。
- ARP monitor(arp_interval):bond 會向設定的目標送出 ARP 請求。如果停止收到回應,就會判定介面故障並觸發切換。為避免誤判,建議設定多個目標。
- arp_validate:此選項用於驗證 ARP 流量是否來自已設定目標。
arp_validate=active僅驗證活動介面,arp_validate=all則同時監控備用介面。
使用 bonding 實現故障切換的優勢
Active-backup 模式提供的是純備援能力,不涉及負載平衡的複雜性。其他模式如 balance-rr 會將流量分散到所有從屬介面上,這更適合追求吞吐量的情境,但也會讓故障切換邏輯更加複雜。Active-backup 則始終保持單一路徑運作,因此切換過程更加直接。
這種網路策略可以幫助伺服器抵禦硬體故障。如果主要網卡損壞或網路線被拔除,備用網卡會自動接手。你無需專用交換器,也不需要額外的路由協定,就能獲得備援能力。設定簡單,行為可預期。
對大多數伺服器部署而言,active-backup 已足以提供所需的可靠性。你只需在 bond 介面上保留一個 IP 位址,實體網卡無需個別設定,從而減少管理負擔。這種方式尤其適合那些對連線穩定性要求高於頻寬聚合的關鍵業務服務。
如何在 Linux 上設定伺服器雙網卡
安裝 bonding 工具並識別網路介面
首先載入 bonding 核心模組:
- 使用以下命令載入 bonding 模組:
sudo modprobe bonding - 為了確保系統重新開機後仍會自動載入,可使用以下命令將
bonding追加到/etc/modules:echo "bonding" | sudo tee -a /etc/modules
如果需要載入多個 bonding 實例,可在 /etc/modprobe.d/*.conf 中為其指定唯一名稱:
alias bond0 bonding
options bond0 -o bond0 mode=balance-rr miimon=100
alias bond1 bonding
options bond1 -o bond1 mode=balance-alb miimon=50這會將 bonding 模組載入兩次,並分別建立 bond0 與 bond1 裝置,同時為它們設定不同的模式與 miimon 值。
為了確保驅動程式載入順序正確,可在 /etc/modprobe.d/ 中加入:
softdep bonding pre: tg3 e1000這表示在載入 bonding 模組之前,先載入 tg3 與 e1000 驅動程式模組。
接下來識別你的網路介面。使用 ip link show 命令列出所有介面:
命令: ip link show
輸出(節錄):
1: lo: <LOOPBACK,UP,LOWER_UP> ... state UNKNOWN ...
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UP ...
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... state DOWN ...這段輸出顯示,該命令會列出每個介面名稱及其目前運作狀態。
你也可以使用 ip --brief link show 取得更精簡的檢視。記下你的兩張實體網卡名稱,例如 enp3s0 與 enp4s0。它們將作為 bond 的從屬介面。
建立 bond 介面並設定 active-backup 模式
你有兩種設定方式。若採用 bonding 模組的手動設定方式,可先以 active-backup 模式與 miimon 參數載入模組:
sudo modprobe bonding mode=active-backup miimon=100然後為 bond 介面設定 IP 位址:
sudo ifconfig bond0 192.168.1.100 netmask 255.255.255.0 up將實體介面加入 bond:
sudo ip link set enp3s0 master bond0
sudo ip link set enp4s0 master bond0實體介面本身不設定 IP 位址。統一的 IP 配置在 bond 介面上。只有 bond 承載 IP,而實體網卡保持未設定狀態。這是此方案的核心原則。
對於 Ubuntu 18.04 及以上版本使用 netplan 的情況,可在 /etc/netplan/ 下建立一個 YAML 檔案。該設定會定義一個名為 bond0 的 bond 介面,其中包含兩張實體介面。bond 模式設定為 active-backup,也就是同一時間只有一張介面處於活動狀態,另一張作為待命。YAML 結構中,bond 定義位於 bonds: 鍵下,成員介面寫在 interfaces: 下,模式則寫在 parameters: 中。這展示了 Ubuntu 20.04 上 active-backup 模式的標準 netplan 語法。使用 primary 參數將主要介面設定為 enp3s0。將 mii-monitor-interval 設定為 100,以每 100 毫秒檢查一次鏈路狀態,從而實現快速故障偵測。
編輯完成後,使用 sudo netplan apply 套用設定。
設定完成後,驗證 bonding 狀態。執行 cat /proc/net/bonding/bond0 並檢查輸出。該命令會顯示 bond 模式、從屬介面以及鏈路狀態。
對於 active-backup 模式,可以使用 cat /sys/class/net/bond0/bonding/active_slave 來確認目前活動中的從屬介面。這能幫助你確認目前由哪張網卡負責承載流量。Link Failure Count 欄位會顯示每張介面自 bond 建立以來發生故障的次數。若計數為 0,則表示尚未發生故障。當你為伺服器設定雙網卡故障切換時,這一步能清楚顯示目前活動中的介面。
在 Windows Server 中設定備用網卡
Windows Server 針對相同的備援目標提供了另一種實作方式。不同於 Linux 所使用的 bonding 驅動程式,Windows 採用 NIC Teaming。這個內建功能可以將多張實體介面卡組合成一個邏輯介面。該團隊介面對外呈現為一個統一的 IP 位址,而故障切換邏輯則在背景自動管理。
使用 NIC Teaming 和介面計量值
開啟 Server Manager,進入 Local Server。點擊 NIC Teaming 區塊以啟動設定精靈。選擇你希望組合的兩張實體介面卡,然後在「Teaming Mode」中設定為「Static Teaming」或「Switch Independent」。在負載平衡模式中,選擇「Address Hash」或保留預設值。關鍵設定在「Standby adapter」區塊——指定其中一張 NIC 為備用介面。這樣就建立了你所需要的 active-backup 故障切換關係。
建立團隊後,你還需要控制由哪張介面卡承載實際流量。Windows Server 預設啟用 Automatic Metric(自動計量值)。此功能會根據鏈路速度自動分配路由計量值,速度較快的介面會獲得較低的計量值。這個演算法在大多數情境下表現良好,但當介面卡速率不同時,可能會產生不符合預期的結果。你通常會希望主要網卡始終優先,而不受鏈路速度影響。
關閉自動計量值分配,以便手動控制。開啟 Network Connections,右鍵點擊你的團隊介面並選擇 Properties。點擊 Internet Protocol (TCP/IP),再點擊 Properties,然後進入 Advanced。在 IP Settings 索引標籤中,取消勾選「Automatic metric」,並在「Interface Metric」欄位中輸入你想要的值。
使用 PowerShell 可以更快速地完成相同操作。你可以使用 Set-NetIPInterface cmdlet 來指定具體計量值:
命令: Set-NetIPInterface -InterfaceIndex 21 -InterfaceMetric 10
說明: 計量值越低,優先順序越高;計量值越高,優先順序越低。
將主要團隊介面的計量值設為 10,將輔助介面卡設為 15。作業系統在存在多條可選路由時,總是優先選擇計量值最低的路徑。這種手動設定能確保行為更可預測。正常情況下由主要網卡承載全部流量,只有在主要網卡故障時,備用介面才會接手。
使用靜態路由隔離備份流量
介面計量值控制的是預設流量優先走哪張網卡,而靜態路由則能讓你針對特定目標進行更細緻的控制。例如,你可能希望備份複寫工作專門走一條獨立的管理網路,從而避免大量資料傳輸占滿主要鏈路頻寬。
假設你的主要團隊介面連接的是企業正式環境網路,而輔助網卡連接的是獨立的儲存網路。你希望備份複寫工作始終只走儲存網路。此時可以新增一條靜態路由,將通往儲存網路的流量導向輔助網卡所在網路的閘道。
開啟提升權限的 PowerShell,並執行:
Set-NetIPInterface -InterfaceIndex "5" -InterfaceMetric "1"
這條命令會為儲存介面卡設定較低的計量值。搭配靜態路由,它可以強制備份流量走專用路徑,而一般使用者流量仍然繼續透過主要團隊介面。兩類資料流互不爭用頻寬。
在執行備份複寫工作時,測試你的設定並監控兩張介面。使用 Performance Monitor 或 Resource Monitor 來確認是哪張介面卡在傳輸流量。你應該會看到儲存網卡有活動,而主要團隊介面基本保持閒置。這樣的流量隔離可以避免備份工作對正式環境網路造成壅塞。
請記住,靜態路由需要謹慎規劃。記錄下你新增的每一條路由,並在其不再需要時及時移除。被遺忘的靜態路由可能會在未來網路調整後,將流量導向意料之外的路徑。定期使用 route print 檢查路由表,確認目前實際生效的流量路徑。
這種雙網卡策略不僅提供故障切換保護,也能實現業務流量隔離。即使發生硬體故障,伺服器仍可保持在線;而備份複寫作業也能高效運行,不會影響關鍵服務。NIC Teaming、手動計量值與靜態路由的組合,能為各種 Windows 環境建立穩健的網路架構。
測試故障切換與最佳實務
模擬網卡故障並驗證備用鏈路接手
在真正需要之前,先驗證故障切換設定是否確實可用,是非常必要的。首先檢查目前由哪張介面承載流量。執行 cat /sys/class/net/bond0/bonding/active_slave,即可查看目前活動中的網卡。該命令會顯示此時負責所有流量的介面名稱。
接著,使用以下任一方式模擬故障:
- 使用
ip link set eth0 down停用目前活動介面 - 拔除活動網卡上的網路線
- 透過伺服器管理工具停用該介面卡
觸發故障後,再次檢查活動從屬介面。重新執行 cat /sys/class/net/bond0/bonding/active_slave。此時輸出應顯示為另一張備用介面。這表示自動切換已成功發生,伺服器無需人工介入即可維持網路連線。
在切換過程中測試網路連通性。你可以從另一台機器對伺服器進行 ping,或檢查一個正在執行的服務。理想情況下,切換只會帶來極短暫的中斷。你可能會觀察到輕微停頓,這是 bond 偵測故障並啟用備用網卡所需的時間。
要恢復正常狀態,可重新啟用原始介面。如果已設定 primary 參數,bond 可能會自動切回首選介面,例如 eth0。完成後請再次確認活動從屬介面是否恢復為你預期的主要網卡。
確保恢復能力並避免常見陷阱
MAC 位址抖動(MAC flapping)是 active-backup bonding 中最常見的問題。發生故障切換時,bond 會改變由哪個實體連接埠對外通告該 MAC 位址。交換器會觀察到同一個 MAC 位址在不同連接埠之間來回出現,這在某些交換器上可能觸發 MAC flap 偵測,進而導致暫時性網路中斷。
有幾種策略可以避免這個問題。你可以在 bond 設定中加入 fail_over_mac=active。此選項會保留每個從屬介面原有的 MAC 位址,而不是將它們全部統一變更。另一種方法是在外部交換器上關閉 MAC flap 偵測。若使用 LLDP 廣播,則應將守護程式設定為使用各個實體從屬介面的真實 MAC 位址,而不是 bond 的 MAC 位址。
將每張 NIC 放在不同的子網路或 VLAN 中,也是一種值得推薦的做法。這樣可以隔離故障域,並簡化故障排除。如果某個網路區段發生問題,另一個網路區段仍可保持不受影響。這種隔離也可防止廣播風暴同時影響兩條路徑。
在 Windows 系統上,請關閉自動計量值計算。手動設定計量值能帶來更可預測的故障切換行為。定期檢查系統日誌中的 bond 事件也很重要。Linux 日誌通常位於 /var/log/syslog,或可透過 dmesg 查看。Windows 日誌則位於 Event Viewer 的網路相關項目下。這些日誌會記錄鏈路故障、切換事件與恢復動作。持續監控有助於你在問題擴大之前發現異常模式。
這種備援策略能協助伺服器抵禦突發硬體故障。建議你每季測試一次設定,以確保在系統更新或網路變更之後,它仍能正常運作。
為雙網卡設定故障切換,能顯著提升系統可靠性。本文技術教學分別介紹了 Linux 與 Windows 的實作方法。Linux 使用 active-backup 模式的 bonding;Windows 則使用 NIC Teaming 搭配手動介面計量值。兩種方式都可為你的關鍵基礎架構提供完整的網路備援。
請務必充分測試你的設定。模擬主要網卡故障,並確認備用網卡能夠無縫接手。你可以透過拔除網路線或停用介面的方式,驗證自動切換是否真正有效。
對於備份流量較重的應用情境,可考慮專門劃分一張獨立網卡,並透過靜態路由避免網路壅塞。現在就將這些步驟應用到你的伺服器部署中。如此一來,你就能確保網路連線持續不中斷,並獲得更高的維運安心感。
常見問題(FAQ)
Active-backup 綁定會降低網路速度嗎?
不會。Active-backup 模式一次只使用一張網卡,因此最大吞吐量仍然等於單張介面的速率。你不會獲得頻寬聚合,但會獲得更高的可靠性。如果你既希望具備故障切換能力,又希望提高頻寬,可考慮使用 balance-alb 或 802.3ad 模式。
故障切換發生時會出現什麼情況?
bonding 驅動程式會在設定的監控間隔內偵測到鏈路遺失,例如 100 毫秒。接著它會自動啟用備用網卡。伺服器會傳送 gratuitous ARP 封包,以更新網路交換器的轉送表。現有連線可能會短暫停頓,但大多數服務都能在不中斷的情況下恢復。你不需要重新啟動網路服務。
使用 bonding 是否需要特殊交換器?
不需要。Active-backup 模式可在任何標準交換器上運作。不同於鏈路聚合(802.3ad),它不需要在交換器端進行特殊設定。每張實體網卡只需連接到一般交換器連接埠即可。這種簡單性使 active-backup 非常適合那些無法修改網路基礎架構設定的環境。
我要如何知道目前是哪張 NIC 處於活動狀態?
在 Linux 上執行 cat /sys/class/net/bond0/bonding/active_slave,該命令會回傳目前活動中的介面名稱。在 Windows 上,可開啟 Server Manager 中的 NIC Teaming。團隊狀態會顯示目前由哪張介面卡承載流量。每次網路變更後,都應檢查這些狀態值,以確認設定正常。
我可以使用兩張以上的 NIC 來實現故障切換嗎?
可以。Active-backup 模式支援多個從屬介面。你可以指定一個主要介面,以及多張備用 NIC。當主要介面故障時,bonding 驅動程式會啟用下一個可用的從屬介面。對於關鍵任務伺服器而言,這種設定能提供更高層級的備援,即使第二張網卡也發生故障,系統仍不至於立即中斷。
