About me

Thursday, 28 July 2016

[Linux][Red Hat] Network Teaming


在Linux裡面,可以透過將多個實體網路介面分配到單一個邏輯網路,這樣可以增加網路的流通量和穩定性。舉例來說,可以將兩個網路介面「eth0」和「eth1」組成一個群組「group1」,然後分配一個IP給這個群組,這樣的話,妳就有兩倍的流量了,又或者是你也可以設置成備用的用途,像是如果eth0壞掉了,這個群組會自動的改走「eth1」。

將兩個網路介面設定群組「Link aggregation」,可以藉由「teaming」或是「network bonding」來達成,但是在Red Hat的官方網站上,有比較兩邊的差異,請參考→ here for a full list of the differences.

我參考的這邊文章,主要講解如何用「team」將兩個不同的網路介面給設定成一個群組。






安裝Teaming Daemon

[root@ ~]yum install teamd -y


使用nmcli設定teaming的組態

「nmcli」是一套Network Manager的cmd工具,首先我們可以藉由底下的指令來顯示我們有的網路介面
[root@ ~]nmcli con show
如上圖所示,我要將「enp0s8」和「enp0s9」組成「team0」,指令如下
[root@ ~]nmcli con add type team con-name team0

在一次看一下網路介面,你會發現多一個叫「team 0」的nm-team 裝置檔:

下個步驟,將「enp0s8」和「enp0s9」加到「team0」裡面:
[root@ ~]nmcli con add type team-slave inname enp0s8 master team0
[root@ ~]nmcli con add type team-slave inname enp0s9 master team0


在顯示網路介面,會多兩個team-slave:
底下也可以看到系統已經自動幫我們建立了相關的組態:
這些自動產生的組態一開始是使用「dhcp」,但是如果你想要將它改成static ip的話,有兩種方式,你可以自行修改組態檔,只是改完後記得執行「nmcli con reload」更新一下,又或者使用底下的nmcli的方式來修改:
[root@ ~]nmcli con mod team0 ipv4.method manual
[root@ ~]nmcli con mod team0 ipv4.addresses 192.168.1.2/24
[root@ ~]nmcli con mod team0 ipv4.gateway 192.168.1.254


啟用team

到這一步我們的設定檔都已經處理好了,接下來就是啟用team,首先必須將裡面的兩個team-slave啟動:
[root@ ~]nmcli connection up team-slave-enp0s8
[root@ ~]nmcli connection up team-slave-enp0s8

然後你的「nm-team」就會自動啟動了,根據這篇文章,如果你只是單純的啟動「nm-team」,這樣是不會有用的,一定要啟動底下所有的slave才行。




修改team

像這樣把複數個網路介面綁在一起,那網路流量是怎麼送的呢?像是下圖所顯示,預設team會使用robin runner:


而這個runner是可以改變的,底下是四個演算法:
  • roundrobin : 這個演算法會輪流依序的將網路封包送給各個網路介面。
  • broadcase : 將所有的封包同時送到每個介面。
  • activebackup : 啟用一個介面,然後將其中另一個介面設定為backup,使用中的介面將會被監視,如果它出問題的話就會自動的切換到另一個備用的介面。
  • loadbalance : 這個選項會根據你所有可取得的網路介面Tx流量去平均分配。


在建立team時,你就可以指定以上四種的runner : 
[root@ ~] nmcli con add type team con-name team0 config '{ "runner": {"name": "broadcast"}}' 

如果你已經建立起你的team了,也可以藉由修改組態檔來達成這個目的:
[root@ ~] vim /etc/sysconfig/network-scripts/ifcfg-team0
TEAM_CONFIG='{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'

[root@ ~] systemctl restart network

[root@ ~] teamdctl nm-team state


進階文件

如果想要知道進階的資訊的話,可以看一下:
man 5 nmcli-examples #尋找關鍵字 "team"

也可以藉由底下指令來看一下debugging的資訊
teamnl nm-team options


其他設定teaming的方式

對於許多人來說,要設定teaming,要那麼多指令,還有很多細節,這是很麻煩的,所以現在有兩套GUI的工具可以來設定,有興趣的人請自行參閱:


Ref:

No comments:

Post a Comment