网络是信息系统的核心关键。目前主流的信息系统结构体系中,数据库存储往往都是在系统的后端,不直接与前端用户相对。同时,在诸如SAN和NAS等基于网络体系的存储环境中,可靠的网络环境是我们必须考虑的因素。
从常见系统运维事故中,意外断电、断网和空调漏水是三个主要故障因素。意外的网络中断,对Oracle而言可能就意味着丢失数据写入、数据归档失败、DG同步失败。面对这些因素,我们能做的其实也就是用软硬件冗余策略,提高系统关键网络点可用性。
在网络层面,目前服务器大都可以配置多余一个网卡设备(一般四个)。通常,我们的配置是一个网卡对应一个IP地址,访问不同的网卡对应不同的IP地址。那么,可否设置一种方法,建立一个虚拟的网卡,对应一个虚拟的IP地址。后台是由多个物理网卡与之对应。这种策略下:一旦一个网卡或者线路出现问题,其他的网络旁路也可以以相同的IP地址对外提供支持。
本篇主要介绍在Linux环境下,如何配置这种高可用公共网络配置。
1、环境说明
笔者使用红帽6.5进行实验。
[root@SimpleLinux ~]# cat /etc/RedHat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
[root@SimpleLinux ~]# uname -a
Linux SimpleLinux.localdomain 2.6.32-431.el6.i686 #1 SMP Sun Nov 10 22:20:22 EST 2013 i686 i686 i386 GNU/Linux
当前在服务器上,安装了两个物理网卡,对应名称分别是eth0和eth1。
[root@SimpleLinux network-scripts]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:91:3F:F7
inet addr:192.168.137.88 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe91:3ff7/64 Scope:Link
eth1 Link encap:Ethernet HWaddr 08:00:27:36:30:45
inet addr:192.168.137.89 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe36:3045/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:93 errors:0 dropped:0 overruns:0 frame:0
当前,两个网卡均可有效,可以从外部使用网络ping通。
C:\Users\admin>ping 192.168.137.88
正在 Ping 192.168.137.88 具有 32 字节的数据:
来自 192.168.137.88 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.137.88 的回复: 字节=32 时间<1ms TTL=64
192.168.137.88 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
^C
C:\Users\admin>ping 192.168.137.89
正在 Ping 192.168.137.89 具有 32 字节的数据:
来自 192.168.137.89 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.137.89 的回复: 字节=32 时间<1ms TTL=64
192.168.137.89 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
^C
2、配置虚拟bond0
配置高可用虚拟网卡,首先需要在操作系统层面关闭Network Manager服务。
[root@SimpleLinux ~]# chkconfig NetworkManager off
[root@SimpleLinux ~]# chkconfig --list | grep Network
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@SimpleLinux ~]# service NetworkManager stop
进入网络配置目录文件夹,将原有的两个网卡配置文件备份好。
[root@SimpleLinux ~]# cd /etc/sysconfig/network-scripts/
[root@SimpleLinux network-scripts]# ls -l | grep ifcfg-eth
-rw-r--r--. 1 root root 281 Sep 5 2014 ifcfg-eth0
-rw-r--r--. 1 root root 108 Oct 20 09:45 ifcfg-eth1
[root@SimpleLinux network-scripts]# mv ifcfg-eth0 /tmp
[root@SimpleLinux network-scripts]# mv ifcfg-eth1 /tmp
生成bond0文件。
[root@SimpleLinux network-scripts]# echo "alias bond0 bonding" > /etc/modprobe.d/bonding.conf
[root@SimpleLinux network-scripts]# cd /etc/modprobe.d/
[root@SimpleLinux modprobe.d]# cat bonding.conf
alias bond0 bonding
在/etc/sysconfig/network-scripts目录下,创建单独的ifcfg-bond0文件。
[root@SimpleLinux modprobe.d]# cd /etc/sysconfig/network-scripts/
[root@SimpleLinux network-scripts]# cat ifcfg-bond0
DEVICE="bond0"
BONDING_OPTS="mode=1 miimon=100 primary=em1"
NM_CONTROLLED="no"
IPADDR="192.168.137.90" --新的IP地址,虚拟IP
NETMASK="255.255.255.0"
GATEWAY="192.168.137.1"
ONBOOT="yes"
修改原有的eth0和eth1文件。
[root@SimpleLinux network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
NAME="System eth0"
SLAVE=yes
MASTER=bond0
[root@SimpleLinux network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
NAME="System eth1"
SLAVE=yes
MASTER=bond0
重新启动网络服务service network,让应用生效。
此时ifconfig状态如下:
[root@SimpleLinux network-scripts]# ifconfig
bond0 Link encap:Ethernet HWaddr 08:00:27:91:3F:F7
inet addr:192.168.137.90 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe91:3ff7/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:3000 errors:0 dropped:0 overruns:0 frame:0
TX packets:2164 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:274055 (267.6 KiB) TX bytes:275545 (269.0 KiB)
eth0 Link encap:Ethernet HWaddr 08:00:27:91:3F:F7
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2433 errors:0 dropped:0 overruns:0 frame:0
TX packets:1727 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:220864 (215.6 KiB) TX bytes:225329 (220.0 KiB)
eth1 Link encap:Ethernet HWaddr 08:00:27:91:3F:F7
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:568 errors:0 dropped:0 overruns:0 frame:0
TX packets:438 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:53251 (52.0 KiB) TX bytes:50450 (49.2 KiB)
此时,新的IP地址90已经可以使用了。
C:\Users\admin>ping 192.168.137.90
正在 Ping 192.168.137.90 具有 32 字节的数据:
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
192.168.137.90 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
^C
3、高可用测试
下面进行高可用性测试,两个网卡如果被关闭一个,看是否虚拟IP还可以连接。
[root@SimpleLinux ~]# ifconfig eth0 down –关闭了eth0,查看状态。
C:\Users\admin>ping 192.168.137.90
正在 Ping 192.168.137.90 具有 32 字节的数据:
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
192.168.137.90 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
启动eth0,关闭eth1。
[root@SimpleLinux network-scripts]# ifconfig eth1 down
C:\Users\admin>ping 192.168.137.90
正在 Ping 192.168.137.90 具有 32 字节的数据:
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.137.90 的回复: 字节=32 时间<1ms TTL=64
192.168.137.90 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
^C
测试成功。
4、结论