Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-7-网络管理之添加网卡

联系:QQ(5163721)

标题:Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-7-网络管理之添加网卡

作者:Lunar©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]

在Linux5和以前的版本,缺省的网络接口名为eth0 eth1 eth[012..]等网络接口名称(NIC)。
这种方法的问题是不能一目了然的知道网卡的物理特性(如 网卡的物理位置),比如这个网卡是那个PCI插槽等等。
.
从Linux6开始,引入了一致和可预测的网络设备命名网络接口的方法(Consistent Network Device Naming)。
这种一致性网络设备命名法根据网卡的物理位置,是否是集成的还是在PCI插槽中来命名,通过这名称,能够很清楚的知道网卡的物理位置
这种方法是依靠biosdevname程序来实现的,它按照一定的规则改变原来的eth[012..]网卡名。
.
这些特性可以唯一地确定网络接口的名称以使定位和区分设备更容易,并且在这样一种方式下,无论是否重启机器、过了多少时间、或者改变硬件,其名字都是持久不变的。
但是,这种命名规则并不是默认在Liunx6上开启,因此,在Linux6中,依然可以看到网络接口名称(NIC)缺省还是eth0 eth1 eth[012..]。
但是,在Linux6中,开始使用udev来绑定网卡设备:/etc/udev/rules.d/70-persistent-net.rules。
.
从Linux7开始,一致和可预测的网络设备命名网络接口的方法(Consistent Network Device Naming)已经是缺省配置。
它的优点是:
1,根据这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。
2,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。
.
在Linux7中/etc/udev/rules.d/70-persistent-net.rules 文件没有了,新添加的网卡NetworkManager自动识别设备名称。

[root@lunar1 ~]# cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core) 
[root@lunar1 ~]# 
[root@lunar1 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@lunar1 ~]# ll /etc/udev/rules.d/70-persistent-net.rules
ls: cannot access /etc/udev/rules.d/70-persistent-net.rules: No such file or directory
[root@lunar1 ~]# 

它采用命名的规则类似如下:
基于接口类型的两个字母前缀:

*   en -- 以太网
*   em -- 集成网卡
*   sl -- 串行线路IP (slip)
*   wl -- wlan
*   ww -- wwan

名字类型:

*   b<number>                             	-- BCMA总线和新书
*   ccw<name>                             	-- CCW总线组名
*   o<index>                              	-- 车载设备的索引号
*   s<slot>[f<function>][d<dev_port>]     	-- 热插拔插槽索引号
*   x<MAC>                                	-- MAC 地址
*   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]    -----PCI 位置
*   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..]1[i<interface>]    -- USB端口号链

例如,在Linux7中,缺省的第一块网卡名称是enp0s3,第二块是enp0s8,第3块是9……以此类推
并且这些网络接口名称缺省是不能改变的(可以使用修改内核来禁用这个新特性的方法,后续文章会陆续介绍)。

[root@lunar1 ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.11  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:feee:cd8d  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ee:cd:8d  txqueuelen 1000  (Ethernet)
        RX packets 291  bytes 23591 (23.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 212  bytes 77588 (75.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.60.11  netmask 255.255.255.0  broadcast 192.168.60.255
        inet6 fe80::a00:27ff:fe42:fb8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:42:0f:b8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27  bytes 3989 (3.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 460  bytes 37308 (36.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 460  bytes 37308 (36.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:79:84:80  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lunar1 ~]# 

这里面就是我们安装vm时,使用的两个网卡,可以看到系统自动的缺省网络设备接口名分别是enp0s3和enp0s8。
这里还有一个virbr0,也是Linux7的新特性,后面的文章会陆续介绍,这里暂不赘述。
.
从上面的解释来看,enp0s3的含义就很清晰了:

	en -- 以太网
	p0-- PCI 位置
	s3-- 热插拔插槽索引号

在Linux7中,还有很多关于网络管理命令的改变,例如,在Linux7中,使用ip和ss等命令代替了以前的ifconfig route arp netstat等等。
注意,在linux6中,已经使用ip和ss来管理了。
.
下面我们尝试添加一块新的网卡:
首先保证NetworkManager是开启的状态(不启用NetworkManager服务也可以添加,但是我感觉麻烦):

[root@lunar1 ~]# systemctl status NetworkManager
NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled)
   Active: active (running) since Sun 2015-10-04 10:19:02 CST; 17min ago
 Main PID: 566 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           └─566 /usr/sbin/NetworkManager --no-daemon

Oct 04 10:19:03 lunar1 NetworkManager[566]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-lo ...
Oct 04 10:19:03 lunar1 NetworkManager[566]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-lo ...
Oct 04 10:19:03 lunar1 NetworkManager[566]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-lo ...
Oct 04 10:19:06 lunar1 NetworkManager[566]: <info>  startup complete
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s3): Activation: Stage 4 of 5 (IPv6 Configure Timeout) scheduled...
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s8): Activation: Stage 4 of 5 (IPv6 Configure Timeout) scheduled...
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s3): Activation: Stage 4 of 5 (IPv6 Configure Timeout) started...
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s3): Activation: Stage 4 of 5 (IPv6 Configure Timeout) complete.
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s8): Activation: Stage 4 of 5 (IPv6 Configure Timeout) started...
Oct 04 10:19:33 lunar1 NetworkManager[566]: <info>  (enp0s8): Activation: Stage 4 of 5 (IPv6 Configure Timeout) complete.
[root@lunar1 ~]# 

然后,我们关闭OS,然后在vbox中新增加一块网卡,开机时间教平时慢了很多:

[root@lunar1 ~]# systemd-analyze
Startup finished in 653ms (kernel) + 3.425s (initrd) + 56.070s (userspace) = 1min 150ms
[root@lunar1 ~]# 

平时大概Linux7的启动速度在30秒所有,这里使用了1分钟左右,因此,我们检查一下是否有哪些单元启动失败造成的:

[root@lunar1 ~]# systemctl --failed
  UNIT                               LOAD   ACTIVE SUB    DESCRIPTION
● kdump.service                      loaded failed failed Crash recovery kernel arming
● NetworkManager-wait-online.service loaded failed failed Network Manager Wait Online
● rngd.service                       loaded failed failed Hardware RNG Entropy Gatherer Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

3 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
[root@lunar1 ~]# 

这里我新增加了一个网卡,我们看到新增网卡的失败信息。
NetworkManager服务是用户态服务,因此起服务启动配置文件保存在/usr/lib/systemd/system/中:

[root@lunar1 ~]# ll /usr/lib/systemd/system/|grep Network
-rw-r--r--. 1 root root     353 11月 21 00:55 NetworkManager-dispatcher.service
-rw-r--r--. 1 root root     419 11月 21 00:55 NetworkManager.service
-rw-r--r--. 1 root root     284 11月 21 00:55 NetworkManager-wait-online.service
[root@lunar1 ~]# 

我们查看一下NetworkManager的依赖关系:

[root@lunar1 ~]# systemctl list-dependencies NetworkManager
NetworkManager.service
● ├─system.slice
● ├─basic.target
● │ ├─alsa-restore.service
● │ ├─alsa-state.service
● │ ├─firewalld.service
● │ ├─microcode.service
● │ ├─rhel-autorelabel-mark.service
● │ ├─rhel-autorelabel.service
● │ ├─rhel-configure.service
● │ ├─rhel-dmesg.service
● │ ├─rhel-loadmodules.service
● │ ├─paths.target
● │ ├─slices.target
● │ │ ├─-.slice
● │ │ └─system.slice
● │ ├─sockets.target
● │ │ ├─avahi-daemon.socket
● │ │ ├─cups.socket
● │ │ ├─dbus.socket
● │ │ ├─dm-event.socket
● │ │ ├─iscsid.socket
● │ │ ├─iscsiuio.socket
● │ │ ├─rpcbind.socket
● │ │ ├─systemd-initctl.socket
● │ │ ├─systemd-journald.socket
● │ │ ├─systemd-shutdownd.socket
● │ │ ├─systemd-udevd-control.socket
● │ │ └─systemd-udevd-kernel.socket
● │ ├─sysinit.target
● │ │ ├─dev-hugepages.mount
● │ │ ├─dev-mqueue.mount
● │ │ ├─dmraid-activation.service
● │ │ ├─iscsi.service
● │ │ ├─kmod-static-nodes.service
● │ │ ├─ldconfig.service
● │ │ ├─lvm2-lvmetad.socket
● │ │ ├─lvm2-lvmpolld.socket
● │ │ ├─lvm2-monitor.service
● │ │ ├─multipathd.service
● │ │ ├─plymouth-read-write.service
● │ │ ├─plymouth-start.service
● │ │ ├─proc-sys-fs-binfmt_misc.automount
● │ │ ├─sys-fs-fuse-connections.mount
● │ │ ├─sys-kernel-config.mount
● │ │ ├─sys-kernel-debug.mount
● │ │ ├─systemd-ask-password-console.path
● │ │ ├─systemd-binfmt.service
● │ │ ├─systemd-firstboot.service
● │ │ ├─systemd-hwdb-update.service
● │ │ ├─systemd-journal-catalog-update.service
● │ │ ├─systemd-journal-flush.service
● │ │ ├─systemd-journald.service
● │ │ ├─systemd-machine-id-commit.service
● │ │ ├─systemd-modules-load.service
● │ │ ├─systemd-random-seed.service
● │ │ ├─systemd-sysctl.service
● │ │ ├─systemd-tmpfiles-setup-dev.service
● │ │ ├─systemd-tmpfiles-setup.service
● │ │ ├─systemd-udev-trigger.service
● │ │ ├─systemd-udevd.service
● │ │ ├─systemd-update-done.service
● │ │ ├─systemd-update-utmp.service
● │ │ ├─systemd-vconsole-setup.service
● │ │ ├─cryptsetup.target
● │ │ ├─local-fs.target
● │ │ │ ├─-.mount
● │ │ │ ├─boot.mount
● │ │ │ ├─home.mount
● │ │ │ ├─rhel-import-state.service
● │ │ │ ├─rhel-readonly.service
● │ │ │ └─systemd-remount-fs.service
● │ │ └─swap.target
● │ │   └─dev-mapper-centos\x2dswap.swap
● │ └─timers.target
● │   └─systemd-tmpfiles-clean.timer
● └─network.target

[root@lunar1 ~]# 
1
这里我们看到Linux7开始使用enp0s3作为第一个缺省的网络接口名,类似于以前的eth0,当然,你后面可以修改这个缺省的网络接口名(修改grub的方法)。
enp0s8是第二个网络接口名,而enp0s9就是我们新添加的第三个网络接口名。
enp0s3和enp0s8我们在安装时已经配置了网络连接和IP地址,设置了启动自动连接,因此没有问题。
enp0s9需要我们手工配置。这里面还有一个virbr0,这个接口在OEL Linux7中缺省是没有的,但是在CentOS中有这个
接下来,使用nmtui给新增的网卡配置IP:
确保NetworkManager是启动的状态:

[root@lunar1 ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2016-01-16 06:38:43 CST; 36min ago
 Main PID: 758 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           └─758 /usr/sbin/NetworkManager --no-daemon

1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: failed -> disconnected (reason 'none') [120 30 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  Auto-activating connection 'enp0s9'.
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): Activation: starting connection 'enp0s9' (5e43be5e-5a8c-4f33-bdd1-dfdce55cec0d)
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: disconnected -> prepare (reason 'none') [30 40 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: prepare -> config (reason 'none') [40 50 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: config -> ip-config (reason 'none') [50 70 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: ip-config -> ip-check (reason 'none') [70 80 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: ip-check -> secondaries (reason 'none') [80 90 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): device state change: secondaries -> activated (reason 'none') [90 100 0]
1月 16 07:13:45 lunar1 NetworkManager[758]: <info>  (enp0s9): Activation: successful, device activated.
[root@lunar1 ~]#

nmtui 属于curses-based text user interface(文本用户界面), 类似Linux7以前的setup工具。
从该工具的输出不难看出,nmtui可以用来编辑连接、启用/禁用连接、更改主机名:

┌┤ NetworkManag ├┐
│                │
│ 请选择一个选项 │
│                │
│ 编辑连接       │
│ 激活连接       │
│ 设定系统主机名 │
│                │
│ 退出           │
│                │
│         <确定> │
│                │
└────────────────

按照提示依次设置后,网卡连接就有了,非常简单:

[root@lunar1 ~]# ifconfig                                                                                                                                                                      
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.11  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:feee:cd8d  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ee:cd:8d  txqueuelen 1000  (Ethernet)
        RX packets 812  bytes 66438 (64.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 509  bytes 155445 (151.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.60.11  netmask 255.255.255.0  broadcast 192.168.60.255
        inet6 fe80::a00:27ff:fe42:fb8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:42:0f:b8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27  bytes 3989 (3.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.209.11  netmask 255.255.255.0  broadcast 192.168.209.255
        inet6 fe80::a00:27ff:fea8:83cf  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:a8:83:cf  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 289  bytes 51303 (50.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 660  bytes 53540 (52.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 660  bytes 53540 (52.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lunar1 ~]# 

nmtui的配置和修改会自动更新/etc/sysconfig/network-scripts/下面相关的配置文件:
下面的/etc/sysconfig/network-scripts/ifcfg-enp0s9就是使用nmtui操作后自动生成的配置文件:

[root@lunar1 ~]# ll /etc/sysconfig/network-scripts/ifcfg*
-rw-r--r--. 1 root root 319 1月  16 03:08 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r--. 1 root root 319 1月  16 03:08 /etc/sysconfig/network-scripts/ifcfg-enp0s8
-rw-r--r--. 1 root root 315 1月  16 07:18 /etc/sysconfig/network-scripts/ifcfg-enp0s9
-rw-r--r--. 1 root root 254 9月  16 19:51 /etc/sysconfig/network-scripts/ifcfg-lo
[root@lunar1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
HWADDR=08:00:27:A8:83:CF
TYPE=Ethernet
BOOTPROTO=none		------#启用静态IP地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes		------#缺省会启用IPv6,通常装Oracle,我们都禁用IPv6
IPV6_AUTOCONF=yes	------#IPv6的自动配置,建议禁用
IPV6_DEFROUTE=no	------#IPv6的的缺省路,建议禁用
IPV6_FAILURE_FATAL=no	------#IPv6的配置,建议禁用
NAME=enp0s9
UUID=5e43be5e-5a8c-4f33-bdd1-dfdce55cec0d	#这里绑定了UUID,建议不绑定UUID,让系统需要时自动识别
ONBOOT=yes		------#开启自动启用网络连接
IPADDR=192.168.209.11	------#设置IP地址
PREFIX=24		------#设置子网掩码
GATEWAY=192.168.209.1	------#设置网关
IPV6_PEERDNS=yes	------#IPv6的DNS相关配置,建议禁用
IPV6_PEERROUTES=yes	------#IPv6的路由,建议禁用
[root@lunar1 ~]#

为了安装Oracle,一般我们会禁用IPv6(尤其是ASM是不支持IPv6的),修改后的样子:

[root@lunar1 network-scripts]# cat ifcfg-enp0s9
TYPE=Ethernet
BOOTPROTO=static  
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
NAME=enp0s3
#UUID=3e33deb2-5f53-4850-a424-76042c27b419
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.209.11
PREFIX=24
GATEWAY=192.168.209.1
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
IPV6_PRIVACY=no
[root@lunar1 network-scripts]# 

总结:
新增网卡时,如果NetworkManager是启动的,那么只需要使用nmtui配置新增网卡的设备名称,IP地址等信息,不需要其他任何操作。
NetworkManager会自动把以前的重新启动网络(service network restart等)工作全部自动后台完成,非常方便。


Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–1-简介
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-2-修改主机名和hostnamectl工具的使用
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–3-systemd(d.bin和ohasd守护进程)
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–4-target(图形界面和字符界面)
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–5-防火墙
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–6-开机自动启动或者禁用服务
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-7-网络管理之添加网
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-7-网络管理之修改IP地址
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-7-网络管理之修改网络接口名

此条目发表在 Linux, 数据库 分类目录。将固定链接加入收藏夹。

评论功能已关闭。