今天,我們來學習一下在 CentOS 7.x 中如何用 nmcli(Network Manager Command Line Interface:網絡管理命令行接口)進行網卡綁定。
網卡(接口)綁定是將多塊 網卡 邏輯地連接到一起從而允許故障轉移或者提高吞吐率的方法。提高服務器網絡可用性的一個方式是使用多個網卡。Linux 綁定驅動程序提供了一種將多個網卡聚合到一個邏輯的綁定接口的方法。這是個新的實現綁定的方法,並不影響 linux 內核中舊綁定驅動。
網卡綁定為我們提供了兩個主要的好處:
現在讓我們在 CentOS 7 上配置網卡綁定吧。我們需要決定選取哪些接口配置成一個組接口(Team interface)。
運行 ip link 命令查看系統中可用的接口。
$ ip link
這裡我們使用 eno16777736 和 eno33554960 網卡在 “主動備份” 模式下創建一個組接口。(譯者注:關於不同模式可以參考:多網卡的7種bond模式原理)
按照下面的語法,用 nmcli 命令為網絡組接口創建一個連接。
復制代碼代碼如下:# nmcli con add type team con-name CNAME ifname INAME [config JSON]
CNAME 指代連接的名稱,INAME 是接口名稱,JSON (JavaScript Object Notation) 指定所使用的處理器(runner)。JSON 語法格式如下:
復制代碼代碼如下:'{"runner":{"name":"METHOD"}}'
METHOD 是以下的其中一個:broadcast、activebackup、roundrobin、loadbalance 或者 lacp。
1. 創建組接口
現在讓我們來創建組接口。這是我們創建組接口所使用的命令。
復制代碼代碼如下:# nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
運行 # nmcli con show 命令驗證組接口配置。
復制代碼代碼如下:# nmcli con show
2. 添加從設備
現在讓我們添加從設備到主設備 team0。這是添加從設備的語法:
復制代碼代碼如下: # nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
在這裡我們添加 eno16777736 和 eno33554960 作為 team0 接口的從設備。
復制代碼代碼如下:# nmcli con add type team-slave con-name team0-port1 ifname eno16777736 master team0
復制代碼代碼如下:# nmcli con add type team-slave con-name team0-port2 ifname eno33554960 master team0
再次用命令 #nmcli con show 驗證連接配置。現在我們可以看到從設備配置信息。
復制代碼代碼如下:#nmcli con show
3. 分配 IP 地址
上面的命令會在 /etc/sysconfig/network-scripts/ 目錄下創建需要的配置文件。
現在讓我們為 team0 接口分配一個 IP 地址並啟用這個連接。這是進行 IP 分配的命令。
復制代碼代碼如下:# nmcli con mod team0 ipv4.addresses "192.168.1.24/24 192.168.1.1"
# nmcli con mod team0 ipv4.method manual
# nmcli con up team0
4. 驗證綁定
用 #ip add show team0 命令驗證 IP 地址信息。
復制代碼代碼如下:#ip add show team0
現在用 teamdctl 命令檢查 主動備份 配置功能。
復制代碼代碼如下:# teamdctl team0 state
現在讓我們把激活的端口斷開連接並再次檢查狀態來確認主動備份配置是否像希望的那樣工作。
復制代碼代碼如下:# nmcli dev dis eno33554960
斷開激活端口後再次用命令 #teamdctl team0 state 檢查狀態。
復制代碼代碼如下:# teamdctl team0 state
是的,它運行良好!!我們會使用下面的命令連接回到 team0 的斷開的連接。
復制代碼代碼如下:#nmcli dev con eno33554960
我們還有一個 teamnl 命令可以顯示 teamnl 命令的一些選項。
用下面的命令檢查在 team0 運行的端口。
復制代碼代碼如下: # teamnl team0 ports
顯示 team0 當前活動的端口。
復制代碼代碼如下: # teamnl team0 getoption activeport