nmcli 學習小結

  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

相關文章
相關標籤/搜索