Solaris
操作系统的网卡绑定是需要购买
sun
的
Trunking
软件的
.
本次文档记录的是
Solaris
自带的一个叫
IPMP(IP
网络多路径
(IP Network Multipathing))
Ipmp
是
SOLARIS8
操作环境的一种新特性,旨在在主机侧提供网络故障切换和
IP
连接集合。关键特性如下:
一. 功能
故障检测及故障切换
(failover):
当网络适配器(包括主机一侧或与之相连的网络设备一侧
)
发生故障时,
IP Network Multipathing
的故障检测特性提供了检测功能,自动把网络访问切换到备用网络适配器,真正消除了主机网络适配器的单点故障。
恢复检测
(failback):
当发生故障的网络适配器被修复后时,
IP
网络多路径的修理检测特性有能力执行检测,并自动把网络访问切换到原来提供服务的主要网络适配器。
出网负荷分布
(outbound load spreading):
高层应用可以向许多网络适配器分配网络数据包,以提高网络吞吐量。需要注意的是仅当网络通信量要通过许多连接发送到许多目的地时,才执行出网负荷分布。
二. 原理
在
SOLARIS8
操作系统中,由
in.mpathd(/sbin/in.mpathd)
后台进程
(daemon)
负责故障检测,并根据不同的策略实现了
failover
和
failback
。
检测物理接口的失败:
in.mpathd
所管理的主机系统的全部和部分网络接口组织成一个
multipathing interface group,
其中的每一个网络接口分别赋予了测试地址
(test address)
。在正常情况下,后台进程
in.mpathd
不断地通过组中每个网络接口测试地址向目标主机
(target)
发送
ICMP ECHO
包来检测相关网络接口的连通性。其中,目标主机一般选为本网络路由器
(router),
如果路由器存在,那么,将选择网络中的主机作为仲裁主机
(arbitrary hosts)
。在选择仲裁主机时,
in.mpathd
向网络上的所有主机发送
multicast
数据包,第一台返回响应数据包的主机将被认为是仲裁主机,此仲裁主机就是用来测试
interface group
中网络连通性的目标主机。在
in.mpathd
测试主机网络连通性的过程中,如果目标主机连续
5
次没有响应,
in.mpathd
认定相关连接已经失败,每次错误检测的缺省时间是
10
秒,也即大约每两秒检测一次。如果才
multipathing interface group
中配置了备用网口
(standby)
,那么所有的网络访问将自动切向
standby
网络接口。
检测物理接口的恢复:为了检测失败的网络接口是否已经被修复,
in.mpathd
不断尝试通过该网口的测试地址向目标主机发送检测包,如果能够连续
10
次收到响应数据包,那么
in.mpathd daemon
认定该网口已经被修复,随后,所有被转移到备用网口
(standby)
的服务将自动恢复回原网口。
Solaris 10 IPMP 配置过程
使用
IPMP
实现网卡负载
(
网卡负载就是需要两张网卡共用一个
IP
地址实现网卡灾备功能
)
。修
/etc/hosts
、
/etc/hostname.bge0
、
/etc/hostname.bge1
、
/etc/defaultrouter
、
/etc/netmasks
五个文件,具体配置如下:
使用
Solaris 10
的
IPMP
实现网卡负载均衡功能,网卡负载均衡即使用两个或两个以上的网卡共用一个
IP
地址,实现网卡灾备的功能。
在本例中实现此项功能需要配置
/etc/hosts
、
/etc/hostname.vmxnet0
、
/etc/hostname.vmxnet1
、
/etc/defaultrouter
、
/etc/netmasks
等五个文件。
以下过程为配置过程:
1.验证系统的版本
# uname -a
SunOS Solaris10 5.10 Generic_118855-33 i86pc i386 i86pc
或
# cat /etc/release
Solaris 10 11/06 s10x_u3wos_10 X86
Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 14 November 2006
2.修改EPROM中的 local -mac -address
修改
EPROM
中的
local -mac -address?=
的参数值,设置网卡使用自身的
MAC
地址,重启后生效。
#eeprom local-mac-address?=true
注意:此命令在解除
ipmp
时是否需要更改
3.设置子网掩码
# vi /etc/netmasks
192.1.1.0 255.255.255.0
4.编辑 /etc/hosts 文件
# vi /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost
192.1.1.200 Solaris10 #
此地址为将要虚拟出来用于服务的
IP
地址
########configure for ipmp################
192.1.1.201 Solaris10-test1 #test ip 1 #
此地址为
vmxnet0
的实际地址
192.1.1.202 Solaris10-test2 #test ip 2 #
此地址为
vmxnet1
的实际地址
##########################################
5.编辑 /etc/hostname.vmxnet0
# vi /etc/hostname.vmxnet0
Solaris10 netmask + broadcast + group fzu1 up addif Solaris10-test1 netmask + broadcast + deprecated - failover up
注意:
Solaris10
为系统主机名
Solaris10-test1
用于本次测试的
ip
地址
fzu1
为本次测试的
IPMP
的组名
以上命令解释:
Solaris10
用于本案例的主机名称
netmask +
子网掩码由文件
/etc/netmasks
和
/etc/hostname.vmxnet0
计算的出
broadcast +
广播地址由文件
/etc/netmasks
和
/etc/hostname.vmxnet0
计算的出
group fzu1
设置本案例中的
IPMP
组名为
fzu1
addif Solaris10-test1
增加一个以
Solaris10-test1
的子接口
deprecated
标志此为一个测试用端口并不用于服务
- failover
标志此逻辑接口不用于故障切换
up
标志此逻辑接口启动
6.编辑 /etc/hostname.vmxnet1
# vi /etc/hostname.vmxnet1
Solaris10-test2 netmask + broadcast + group fzu1 deprecated - failover up
注意:
Solaris10
为系统主机名
Solaris10-test1
用于本次测试的
ip
地址
fzu1
为本次测试的
IPMP
的组名
以上命令解释:
Solaris10-test2
设置一个用于本案例的
Solaris10-test2
的子接口
netmask +
子网掩码由文件
/etc/netmasks
和
/etc/hostname.vmxnet1
计算的出
broadcast +
广播地址由文件
/etc/netmasks
和
/etc/hostname.vmxnet1
计算的出
group fzu1
设置本案例中的
IPMP
组名为
fzu1
deprecated
标志此为一个测试用端口并不用于服务
- failover
标志此逻辑接口不用于故障切换?是否不应该使用
-failover
而使用
failover
呢??
up
标志此逻辑接口启动
7.设置 /etc/defaultrouter
# vi /etc/defaultrouter
192.1.1.253
#
默认网关,
IPMP
会通过
ping
网关来检测主网卡是否正常,
ping
不通网关会进行切换网卡
8.测试
使用如下命令强行使网卡切换
#if_mpadm -d pcn2
下重新启用网卡
#if_mpadm -r pcn2
可以观察到网卡地址的切换,现象如下:
root:/#ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
vmxnet0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.1.1.200 netmask ffffff00 broadcast 192.1.1.255
groupname fzu1
ether 0:c:29:b3:21:d3
vmxnet0:1: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 2
inet 192.1.1.201 netmask ffffff00 broadcast 192.1.1.255
vmxnet1: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 3
inet 192.1.1.202 netmask ffffff00 broadcast 192.1.1.255
groupname fzu1
ether 0:c:29:b3:21:dd
root:/#if_mpadm -d vmxnet0
root:/#ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
vmxnet0: flags=89000842<BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE> mtu 0 index 2
inet 0.0.0 .0 netmask 0
groupname fzu1
ether 0:c:29:b3:21:d3
vmxnet1: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 3
inet 192.1.1.202 netmask ffffff00 broadcast 192.1.1.255
groupname fzu1
ether 0:c:29:b3:21:dd
vmxnet1:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 192.1.1.200 netmask ffffff00 broadcast 192.1.1.255
vmxnet1:2: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 3
inet 192.1.1.201 netmask ffffff00 broadcast 192.1.1.255
root:/#if_mpadm -r vmxnet0
root:/#ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
vmxnet0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.1.1.200 netmask ffffff00 broadcast 192.1.1.255
groupname fzu1
ether 0:c:29:b3:21:d3
vmxnet0:1: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 2
inet 192.1.1.201 netmask ffffff00 broadcast 192.1.1.255
vmxnet1: flags=1040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4> mtu 1500 index 3
inet 192.1.1.202 netmask ffffff00 broadcast 192.1.1.255
groupname fzu1
ether 0:c:29:b3:21:dd
solaris 双网卡绑定
1.查看物理网卡
首先查看系统中有多少块物理网卡,执行以下命令:
dladm show-link
bge0 type: non-vlan mtu: 1500 device: bge0
bge1 type: non-vlan mtu: 1500 device: bge1
bge2 type: non-vlan mtu: 1500 device: bge2
bge3 type: non-vlan mtu: 1500 device: bge3
2.查看正在使用网卡
然后查看有哪些网卡正在使用:
ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 59.37.54.108 netmask ffffffe0 broadcast 59.37.54.127
ether 0:14: 4f : 2c :b3:90
bge1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 0.0.0 .0 netmask 0
ether 0:14: 4f : 2c :b3:91
bge2: flags=1000802<BROADCAST,MULTICAST,IPv4> mtu 1500 index 4
inet 0.0.0.0 netmask 0
ether 0:14: 4f : 2c :b3:92
3.停止需要绑定的网卡
看看是哪两个网卡要做绑定,先把他们停止
ifconfig bge1 unplumb
ifconfig bge2 unplumb
4.创建聚合链路
使用
dladm
创建聚合链路的虚拟网卡:
dladm create-aggr -d bge1 -d bge2 1
dladm
的命令语法如下:
dladm create-aggr -d interface -d interface [...] key
interface
表示要成为聚合一部分的接口的设备名称。
key
是标识聚合的编号。最小的密钥编号是
1
。不允许将零用作密钥。
5.配置IP信息
为刚配置好的虚拟网卡配置
IP
,如:
ifconfig aggr1 plumb 192.168.84.14 up
6.检查刚创建的聚合的状态
# dladm show-aggr
如果希望虚拟网卡的配置在系统重启之后仍然可以使用,则需要创建一个
/etc/hostname.aggr1
文件,文件内容为
IP
地址,总之,这个
aggr1
的网卡可以像普通网卡一样配置
IP
地址。