nmcli 是Redhat提供的網絡配置編輯工具, 它可直接編輯/etc/sysconfig/network-scripts/ifcfg-xxx , 它是NetworkManager服務的客戶端工具,html
nmcli提供爲咱們提供了一個統一管理網絡配置的接口,它不一樣於ip,它在實現bind, team, bridge上我的測試,感受很方便,測試有效,全部目前理解不linux
深,此文僅作參考,但願能互相學習共同進步^..^算法
另注:vim
此工具使用上比較方便,但我的在測試過程當中發現,RHEL7.0,RHEL7.4,CentOS7.6上的使用方式變化仍是有的,因此建議在使用時,先關注一個網絡
man手冊. 負載均衡
這是系統默認對sysconfig 目錄下系統文件的配置說明:
/usr/share/doc/initscripts-9.49.39/sysconfig.txt
nmcli:
#幫助
nmcli genernal help
nmcli conn [ add | modify | clone ...] help #格式都相似.
#設置新主機名
nmcli genernal hostname NewHostname
#查看NetworkManager的容許狀態,nmcli版本信息等.
nmcli -f all general status
#最重要的兩個子命令: device 和 connection
device: 是nmcli管理物理網卡的查看, 啓用, 禁用, 刪除, 設置等.
connection: 是nmcli管理網卡的配置文件的, 可直接操做/etc/sysconfig/network-scriptes/ifcfg-*
device:
#查看當前接口狀態信息.
nmcli [-f all] device [status | show 網卡名 ] #status:默認,查看接口摘要, show:查詢詳情.
#啓用 和 禁用網卡
nmcli device [ connect | disconnect ] <網卡名1> <網卡2> ...
#設置網卡自動鏈接
nmcli device set <網卡名> autoconnect [yes|no]
connection:
#查看接口配置信息
nmcli connection show 鏈接名dom
注: NAME: 鏈接名, 即配置文件的名稱: ifcfg-鏈接名.
TYPE: 接口類型,比較多見的: ethernet, team, bond, bridge等.
DEVICE: 即網卡的實際名稱.
#查詢每一個鏈接全部的列信息
nmcli -f all conn
#查詢指定列信息ide
#僅僅獲取指定配置屬性值, 如僅獲取網卡的IP地址.
$ nmcli -g ip4.address connection show my-con-eth0
192.168.1.12/24
$ nmcli -g ip4.address,ip4.dns connection show my-con-eth0
192.168.1.12/24
192.168.1.1
$ nmcli -g ip4 connection show my-con-eth0
IP4:192.168.1.12/24:192.168.1.1::192.168.1.1::
#給網卡建立一個接口配置信息
nmcli conn add con-name myhome ifname ens33 type ethernet autoconnect no ipv4.method auto
注:
這就建立了一個叫myhome的接口配置文件.
該文件存儲: /etc/sysconfig/network-script/ifcfg-myhome
指定網卡的接口類型是 ethernet(以太網), 不容許自動激活.並指定它使用DHCP自動獲取IP.
#克隆一個接口配置
nmcli conn clone help #查看幫助
nmcli conn clone 源鏈接名 目標鏈接名
#刪除一個接口配置
nmcli conn del 鏈接名
建立Linux的端口聚合方式:
1. team (網絡組)【推薦此種方式: 由於teamdctl , teamnl 工具可管理.】
#建立前注意事項【以下示例使用ens36和ens37做爲team的端口】:
1. ifconfig #查看ens36, 37是否配置了IP地址,若配置必須刪除.
ip addr flush dev ens36 #可清空ens36的接口配置.
2. nmcli -f name,device,active conn show #查看是否有ens36/37的配置,而且是活動的.如有必須刪除.
3. 建議在作如下實驗前,參考系統提供的默認team示例配置文件:
/usr/share/doc/teamd-*/example_configs/
4. 建議參考:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/networking_guide/sec-Configure_a_Network_Team_Using-the_Command_Line#sec-Configure_Network_Teaming_Using_nmcli
team這種端口聚合的算法有:
多種方式runner
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol):這是一種須要交換機支持LACP協議的鏈路聚合協議
注:
man teamd.conf #這裏可查看,每種runner的詳細參數說明.來了解其原理細節.
建立一個team,鏈接名 myteam0, 接口名: team0, 類型team, team的工做方式: activebackup(熱備方式)
即: 同一時刻只有一個接口活動, 只有活動接口down, 備用接口才頂替它,開始工做.
ip4 和 gw4都是設置ipv4的地址和網關. 它們實際上是 ipv4.addresses 和 ipv4.gateway的別名.
nmcli conn add con-name myteam0 ifname team0 \
type team config '{"runner":{"name":"{activebackup}"}}' \ #這種寫法是錯的!!
ip4 10.0.0.1/24 gw4 10.0.0.254
注:
RHEL7 上關於team config的配置可能會略有不一樣,測試發現有些沒法肯定.
config '{"runner":{"name":"{activebackup}"}}' 工具
注: 這種寫法第一次測試OK,【多是在CentOS7.6上測試.】
後來在RHEL7.0上測試: 此寫法總報錯.
建議不要用上面的配置.學習
#正確寫法爲:. activebackup不能加花括號!!注意:這是Json格式!
config '{"runner":{"name":"activebackup"}}'
#修改鏈接名爲myteam0的配置信息: 添加一個新的DNS: 114..
nmcli conn modify myteam0 ipv4.dns 114.114.114.114
#向team0中添加端口ens36 和 ens37;
nmcli connection add type team-slave master team0 \
con-name myteam0-ens36 ifname ens36
nmcli connection add type team-slave master team0 \
con-name myteam0-ens37 ifname ens37
#查看team0的工做狀態信息, 其中會顯示誰是活動端口, 已經使用了那種負載均衡算法.
活動端口,僅以activebackup這種模式而說, loadbalance沒有活動端口的概念.
teamdctl team0 state
#查看team0的端口摘要信息
teamnl team0 ports
#查看 team0 負載均衡的選項信息
teamnl team0 options
#兩端配置好後,作測試
ping 通後, 保持長ping.
#將ens36接口手動禁用, 前提是ens36是當前活動接口
ip link set dev ens36 down
注:
我在RHEL7.4上測試,一旦手動關閉接口,team0接口將不能工做.
ping會斷掉. 必須手動 systemctl restart network 才能恢復.
測試loadbalance時,不會有這種狀況.
team網絡組接口啓動故障小結:
當使用nmcli conn up myteam0 啓動失敗,建議從如下幾個點檢查:
1. 接口配置文件.
vim /etc/sysconfig/network-scripts/ifcfg-myteam0
#檢查config配置是否有錯, 特別要注意: JSON格式!!!
# 字符串必須用雙引號, config的值必須使用單引號.
TEAM_CONFIG='{"runner" :{"name":"activebackup"}}'
2. 查看接口是否配置了IP
ip addr ls
#若添加到team的接口,配置了IP,將致使該接口沒法成爲team的接口.
ip addr flush dev ethX
3. 查看nmcli device 中顯示的接口狀態
team的接口在(啓動前!!),其內部全部接口的狀態必須爲 disconnected !! 不然啓動team後, 其內部接口將沒法正常被team識別!! 補充: 關於系統默認示例文件使用說明: 1. 將當前已經配置好的team的負載均衡的模式改成random #導出當前正在運行的team的配置詳情 teamdctl team_Name config dump > team.conf #修改導出的配置信息,僅保留runner部分, 其餘都去掉, 而後修改name的值 # 爲「random" vim team.conf { "runner": { "name": "random" } } 1.1. 將準備好的配置文件應用到team上. # 修改前, 須要先將team接口關閉,不然沒法修改. nmcli conn down team_Name nmcli conn modify team_Name team.config team.conf #重啓網絡服務 systemctl restart network teamdctl team_Name state #就能夠看到修改爲功了. 2. 修改配置文件,重啓網絡服務,來修改team的工做模式 vim /etc/sysconfig/network-scripts/ifcfg-team_Name DEVICE=team0 DEVICETYPE=Team ONBOOT=yes BOOTPROTO=none IPADDR=192.168.11.1 PREFIX=24 NAME=myteam0 #注意: 官網配置中沒有提供con-name,須要本身添加. TEAM_CONFIG='{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}' #注: 這是官網上的一個team配置的完整示例, 包含了主要參數. [root@system1 network-scripts]# cat ifcfg-myteam0-eth1 DEVICE=eth1 HWADDR=00:0c:29:cc:b1:46 #修改成eth1的MAC DEVICETYPE=TeamPort ONBOOT=yes TEAM_MASTER=team0 TEAM_PORT_CONFIG='{"prio": 100}' NAME=myteam0-eth1 #注意: 修改成本身的 [root@system1 network-scripts]# cat ifcfg-myteam0-eth2 DEVICE=eth2 HWADDR=00:0c:29:cc:b1:50 #修改MAC DEVICETYPE=TeamPort ONBOOT=yes TEAM_MASTER=team0 TEAM_PORT_CONFIG='{"prio": 10, "sticky": true}' NAME=myteam0-eth2 #修改con-name 注: prio: 指接口的優先級, activebackup時,有效, 優先級範圍:-32768~32768; 越大越優先成爲活動接口. sticky: 活動接口粘性設置, true: 只要該接口up,就使用該接口爲活動接口. 以上team的配置文件都提供好後, 重啓網絡服務,team就配置好了. systemctl restart network 3. 使用示例文件來啓動team 測試前先刪除已有team配置. 避免重名. nmcli conn del myteam0 myteam0-eth2 myteam0-eth1 使用示例文件來建立team, 這種team可作測試,但沒法讓NetworkManager來接手管理. 3.1 複製一份示例文件,並修改其中的網卡名 爲本身實際網卡名 cp /usr/share/doc/teamd-1.9/example_configs/activebackup_arp_ping_1.conf . vim activebackup_arp_ping_1.conf #將其中的接口改成本身實際接口名. 3.2 關閉要 添加到team中的接口, 不然啓動teamd進程會失敗. ip link set dev eth1 down ip link set dev eth2 down 3.3 啓動teamd進程 teamd -g -f activebackup_arp_ping_1.conf -d #-g: 顯示debug信息, -f: 指定使用的配置文件, -d: 以deamon方式運行. 3.4 查看狀態,並刪除 teamdctl team0 state teamd -t team0 -k #刪除teamd進程. bond(端口綁定) 【CentOS6以前比較經常使用, 管理工具較少,具體我沒用】 bond支持的工做方式: 802.3ad #須要交換機支持. active-backup balance-xor :同Hash計算,選擇一個網卡,與目標通訊. balance-alb:它是xor的升級版,它會判斷那個網卡距離目標最近,而後,就將該網卡與目標綁定. balance-rr :將一個數據包,拆分紅多份,每份從一個網卡發出. balance-tlb :基於網卡的最大帶寬來分配出口流量,實現負載均衡. broadcast $ nmcli con add type bond ifname mybond0 mode active-backup \ ip4 10.0.0.1/24 gw4 10.0.0.254 $ nmcli con add type ethernet ifname eth1 master mybond0 $ nmcli con add type ethernet ifname eth2 master mybond0 查看狀態: cat /proc/net/bonding/bond0 #查看當前bond的模式,及活動接口是誰. ls /sys/class/net/binding_master #可查看binding當前活動的接口 Bridge 的建立方式: $ nmcli con add type bridge con-name mybr0 ifname br0 $ nmcli con add type ethernet con-name br0-ens3 ifname ens3 master br0 $ nmcli con add type ethernet con-name br0-ens4 ifname ens4 master br0 $ nmcli con modify mybr0 bridge.stp no #查看建立的橋: brctl show