網路流量似乎沒有離開主幹
我正在準備一些新的虛擬化伺服器,其中一部分是讓一些更高頻寬的管道進入它們。最終目標是將 4 個 GigE 埠綁定到一個承載 802.1q 標記流量的單一中繼中。我可以做到這一點,但是我遇到了一個奇怪的問題。但首先,一張圖表。
---------- ---------- 1GbE trunks | | 10GbE | | ------------- -------- | SW1 |-------| SW2 | ------------- | VM1 | | | | | ------------- -------- ---------- ---------- | | 1GbE ----------- | 1GbE |--------| client2 | | ----------- ---------- | | 1GbE ----------- | SW3 |------| client1 | | | ----------- ----------
所有交換機均為 HP ProCurve 2910al 交換機,未堆疊。上圖中的 Client2 與 VM1 在同一個 VLAN 中。Client1 位於不同的 VLAN 中。對於 VM 機器(CentOS 6),iptables 和 SELinux 都已禁用。
我的問題是,當涉及到中繼時,在與任一客戶端機器交談時,雙向網路流量是不可能的。TCPDUMP 顯示它們收到了 ping 並發送了 ECHO REPLY 數據包,但 VM 主機從未看到它們。同時,如果我嘗試從客戶端機器 ping 虛擬機,它也不起作用。我無法 ping 同一子網中的 client2 的事實表明某處的網路層有些問題。
奇怪的是,我可以從 VM 主機 ping 任何交換機上的網關 IP。如果我使用單個介面,無論有無 VLAN 標記,一切都可以正常工作。如果我只綁定一個介面並在該介面上打開 VLAN 標記,我可以去任何地方。建立一個主幹,我僅限於交換結構。
樹幹的類型似乎並不重要。現在它們配置了模式 0 中繼 (balance-rr),儘管使用 LACP/802.1qa 的行為方式相同。
vlan 70 name "Virtualization Subnet" untagged 35,36,38,40 tagged Trk1-Trk2,Trk5,Trk8 no ip address jumbo exit
那是上面 SW2 上的 VLAN 配置。SW1 的 VLAN 70 定義上定義了“IP 地址”。上面的程式碼片段處於完全非集群模式。當我被中繼時:
trunk 35-36,38,40 Trk16 trunk vlan 70 name "Virtualization Subnet" tagged Trk1-Trk2,Trk5,Trk8,Trk16 no ip address jumbo exit
802.1qa/LACP 版本放棄了中繼定義,
trunk 35-36,38,40 Trk16 lacp
但正如我所說,並沒有改變問題的呈現方式。Client2 實際上連接到 SW1,但是將它放在圖表中會使格式化變得更加棘手。在任何情況下,Interface 節中唯一的東西就是一個
name
指令;它在 SW1 的 vlan 70 節中被列為untagged
埠。我錯過了什麼?
在涉及MikeyB、Pauska和ChrisS的聊天中進行了長時間的辯論之後,問題最終分為兩個方面:
- CentOS 6 中的一個可能錯誤是沒有將模組的模組選項更改為 的
bonding
一部分service network restart
,因此它沒有跟踪我在 LACP 模式 (4) 和循環 (0) 之間的更改。- 循環模式不喜歡使用 ProCurve 開關。
一旦我通過以下命令將綁定介面強制為 LACP/802.1qa 模式:
ifconfig bond0 down echo "4" > /sys/class/net/bond0/bonding/mode ifconfig bond0 up
伺服器和交換機都在說話。此時,從交換機上僅啟用一個介面開始,流量開始正常工作。啟用第二個,第三個,最後,第四個介面都保持流量正常。
最終,LACP 模式讓一切順利進行。線索是當主幹中只有一個啟用的交換機埠時,循環模式起作用。伺服器在重新啟動後仍然存在並以正確的模式啟動。但是,a
service network restart
不會導致文件中的MODE="4"
部分生效。如果該模式發生變化,它將保持啟動時設置的內容(或者更有可能是模組的模組載入時間)。ifcfg-bond0``/etc/sysconfig/network-scripts/``bonding