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
nmcli 学习小结的更多相关文章
- flex学习小结
接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- ExtJs学习笔记之学习小结LoginDemo
ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- 点滴的积累---J2SE学习小结
点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...
- (转) Parameter estimation for text analysis 暨LDA学习小结
Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
随机推荐
- CodeForces 570D 【dfs序】
题意: 给一颗树,根节点深度为1,每一个节点都代表一个子母. 数据输入: 节点数 询问数 从编号为2的节点开始依次输入其父节点的编号(共有节点数减1个数字输入) 字符串有节点数个小写字母 接下来询问 ...
- Java的方法
以下内容引用自http://wiki.jikexueyuan.com/project/java/methods.html: 一个Java方法是为了执行某个操作的一些语句的组合.举个例子来说,当调用Sy ...
- window环境下搭建SVN服务器
<span style="font-family: Arial; rgb(255, 255, 255);">第一步:准备工具:</span> 1.SVN服务 ...
- Android之怎样实现滑动页面切换【Fragment】
Fragment 页面切换不能滑动 所以对于listview 能够加入的左右滑动事件 .不会有冲突比如(QQ的好友列表的删除) Fragment 和viewpager 的差别 Viewpager ...
- Feign简介
Feign简介
- jni——如何转换有符号与无符号数
java数据结构默认均为有符号数,而通过jni转换到c/c++层,却不一定是有符号数. 如若在java中存储的即为无符号数,则在jni中可将jbyte直接进行类型转换. 若进行操作,则可在计算时,先将 ...
- 分享一个非常屌的eazyui二开demo
eazyui二开Demo非常吊,里面各种非常吊的样例,最喜欢的是 多文件进度条上传,一次可多选,还有流程,还有文本编辑器 非常简洁的 不像一些官网各种复杂的东西.主要为自己保留一份, 在线demo在 ...
- Socketclient与服务端
package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR ...
- STL源代码剖析——STL算法之set集合算法
前言 本节介绍set集合的相关算法,各自是并集set_union,差集set_difference,交集set_intersection 和对称差集set_symmetric_difference.这 ...
- 使用Blender批量导出/转换模型
2.4版本号的Blender API和2.5以上版本号的API有非常大的不同,这里仅仅是提供了思路和2.4版本号的导出方案. 先提供一个脚本,这个是由Blender调用的.用于转换Ogre的Mesh文 ...