• nmcli 学习小结


      nmcli 是Redhat提供的网络配置编辑工具, 它可直接编辑/etc/sysconfig/network-scripts/ifcfg-xxx , 它是NetworkManager服务的客户端工具,

    nmcli提供为我们提供了一个统一管理网络配置的接口,它不同于ip,它在实现bind, team, bridge上个人测试,感觉很方便,测试有效,所有目前理解不

    深,此文仅做参考,希望能互相学习共同进步^..^

      另注:

      此工具使用上比较方便,但个人在测试过程中发现,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 连接名

        
        注: NAME: 连接名, 即配置文件的名称: ifcfg-连接名.
          TYPE: 接口类型,比较多见的: ethernet, team, bond, bridge等.
          DEVICE: 即网卡的实际名称.

        #查询每个连接所有的列信息
          nmcli -f all conn
          #查询指定列信息

          
          #仅仅获取指定配置属性值, 如仅获取网卡的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

  • 相关阅读:
    oracle客户端连接服务器基本教程
    java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
    面试相关
    java中byte是什么类型,和int有什么区别
    (华为机试大备战)java。多了解了解最常用的那个类库的方法对处理字符串的方法
    (华为)以下代码片段将创建一个仅保存大写字符的字段。
    (华为)以下代码片段将创建一个仅保存大写字符的字段。
    每个程序中只有一个public类,主类?
    我的第一个长程序,虽然是直接抄了书上,可是还是出现了两次拼写错误,最终还是找到异常的答案,改过来了。
    实践证明:当类想实现两个监听接口的时候,必须把两个都设置成内部类,不可能一个是外部类实现,一个是内部类实现。这样容易捕获错误,出现异常。
  • 原文地址:https://www.cnblogs.com/wn1m/p/10699860.html
Copyright © 2020-2023  润新知