IP Mutipathing 作为Solaris的系统特性之一,IPMP技术说到底是提供了避免单点网络连接故障的一个检测-失败-切换的机制。
我们所需要了解的大概归为3个方面。(老生常谈吧,呵呵,忍着吧,谁让咱是做技术的)
1. 什么是IPMP(What's IPMP)
2. 如何根据应用配置IPMP(How to implement IPMP)
3. 排错(Trouble Shooting)
1.什么是IPMP
说概念太麻烦,咱们从其一个应用说起。
比如一台Sun Server,上面跑着甲方要命(要他的命更要你的命,呵呵)的应用,这个应用使用ce0上绑定的192.168.0.1/25作为其对外提供服务的地址。
某一天,总会发生的事情非常不幸的发生了,连接ce0的switch端口挂了。呵呵,接下来就是做运维和支持的兄弟体现价值的时候了。
但是,无论兄弟技术如何高超,动作多么麻利迅速,少则数分钟,多则个把小时的业务是耽误了。(有兄弟说,老土,偶们都是用Sun cluster。呵呵,那个后面咱有工夫再另篇单写)。
到此,问题就提出来了:Server那么多网卡,能不能在一个NIC代表的连接挂掉时,系统可以将应用绑定的IP自动平滑的转移到另外一块上继续提供业务?
呵呵,可以啊,答案就是咱们今天要说的IPMP。
IPMP是一个机制,一套规则,其主要内容是 系统通过网卡上额外配置的一个测试地址(测试网卡的连接是否可用)监视网卡所代表的连接的工作情况;一旦失效,将业务所使用的IP浮动到同组的备份网卡上,保持业务的一致性。
顺便说一句,如果失效的连接恢复了,业务IP还是要返回Primary网卡的。个人认为,这个是不是好事情要看情况,比如Primary的网卡的连接一直在欢快的跳动(我失效了,我又可用了,我又失效了,我又可用了,你打我啊.....)....,呵呵,不说了。
小结一下: 网络连接的监测-失败-切换的一个机制。
强调一点:IPMP提供的是一个网卡所代表的一个网络连接的冗余,网卡仅仅是其上一个节点。
下面说点前提要求和工作原理的废话,不想看的跳过去。
前提要求:
1).所有IP在一个网段(VLAN)内,同网段内有其他设备(router或者主机)。
2).两块网卡能提供同样的工作模式(兄弟,都什么年代了,千兆卡那么贵么)。
3).Solaris 8 10/00以上的版本(找个9用吧,免费的,命令也好用些,不过如果需要应用重编译.....您也太背了吧)。
4).网卡的测试IP地址不能做别的用(呵呵,什么叫professional?就是-我的就是我的,嘿嘿)
5).每块网卡有一个独立唯一的MAC地址。
工作原理:
1).如何监测网络连接状态
系统通过测试地址发ICMP的echo request包给同网络的router(默认网关或者起路由器发现进程得来的,呵呵,感觉到什么没有?),期待得到ICMP的echo reply。并同时监测网卡的RUNNING标签(就是ifconfig -a,<>中间那一堆中的一个)。2个条件如果有一个失败,则认为连接失败;2个条件都成功,则认为连接成功(并的关系)。
2).为什么每个网卡都要有一个独立唯一的MAC地址
呵呵,这个嘛,基本上,说来话长。
2.IPMP的实现
主要步骤:
1) 设置每块网卡使用自己的MAC地址(呵呵,挺新鲜的哈,呵呵,默认SUN使用统一的和Hostid有点关系的6组数做所有网卡的MAC地址)
2)给primary、backup网卡各配2个IP。
改改 /etc/hosts、/etc/hostname.$PRMARY_NIC、
/etc/hostname.$BACKUP_NIC、/etc/notrouter、/etc/defaultrouter等文件
3) 重启(主要是让MAC地址的设置生效)
呵呵,看看挺简单的吧,呵呵,记得有个什么人说过,魔鬼是躲在细节中的。
还是和开头一样,咱们具体一个应用,来说说作为这个系统可靠性保证措施中的一个技术-IPMP。
网络拓扑: -- ce0 ---- Switch A (Primary)
Server -
-- ce1 ---- Switch B (Backup)
有人问了,我接在一个switch上行不行? 行,只要您不怕switch没打报告就歇班。
当然,2个switch还有另外一个好处,就是如果是带3层模块作为默认网关的设备,可以配HSRP来提供更高的冗余。
配置参数:
ce0: 192.168.0.1/25 (业务IP)
192.168.0.2/25 (测试IP)
ce1: 192.168.0.3/25 (网卡总要给个IP吧,呵呵,也可以是另外一个业务IP)
192.168.0.4/25 (测试IP)
GW: 192.168.0.124/25
开始配置:
1)验证操作系统版本
#uname -a
SunOS HostnameA 5.9 Generic_118558-06 sun4u sparc SUNW,Sun-Fire-V490
如果想要更详细的
#cat /etc/release
Solaris 9 9/04 s9s_u7wos_09 SPARC
Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 29 June 2004
2) 修改EPROM中local-mac-address?= 的参数值,设置网卡使用自己的MAC地址,重启后生效。
#eeprom local-mac-address?=true
3) 建立/etc/notrouter文件,关闭Server的路由功能。
#> /etc/notrouter
4) 设置默认网关
#cat > /etc/defaultrouter
192.168.0.124
Ctrl+D组合键
如果没有网关,可以考虑起一下in.rdisc,启动脚本见后。
5)设置掩码
# vi /etc/netmasks
192.168.0.0 255.255.255.128
如果是标准的A/B/C类地址和掩码,那就不必设置了。
6)编辑 /etc/hostname.ce0、/etc/hostname.ce1、/etc/hosts(optional)
#vi /etc/hostname.ce0
192.168.0.1 netmask + broadcast + group mpgrp up addif 192.168.0.2 deprecated -failover netmask + broadcast + up
说明:
netmask + 设置系统根据 /etc/netmasks /etc/hostname.ce0两个文件自动计算掩码。
broadcast + 设置系统自动计算广播地址。
group mpgrp 设置一个IPMP组,组名是mpgrp;要不然,怎么让系统知道做备份的网卡是谁。
up 就是 ifconfig ce0 up的那个up。
addif 192.168.0.2 增加一个子接口,接口地址192.168.0.2
deprecated 简单的说,就是告知系统,这个地址是测试用的。复杂的,请 #man ifconfig
-failover 告知系统,这个地址代表的连接如果失效,不做切换(指192.168.0.2)。
#vi /etc/hostname.ce1
192.168.0.3 deprecated netmask + broadcast + group mpgrp -failover standby up
standby 表明该网卡是一个备份网卡,只有同组的其他网卡失效,业务切换到该网卡后该网卡才激活工作(平时都是inactive)。
当然,也可以采用典型的教科书式配置
#vi /etc/hosts
192.168.0.1 PrimaryData hostnameA
192.168.0.2 PrimaryTest
192.168.0.3 BackupData
192.168.0.4 BackupTest
#vi /etc/hostname.ce0
PrimaryData netmask + broadcast + group mpgrp up addif PrimaryTest deprecated -failover netmask + broadcast + up
#vi /etc/hostname.ce1
BackupData netmask + broadcast + group mpgrp up addif BackupTest deprecated -failover netmask + broadcast + up
7)重启
#init 6
这样,就基本完成配置了。
简单的查看一下:
root@hostnameA # ifconfig -a
lo0: flags=1000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
ce0: flags=1000843 mtu 1450 index 2
inet 192.168.0.1 netmask ffffff80 broadcast 192.168.0.127
groupname mpgrp
ether 0:3:ba:cd:1b:e4
ce0:1: flags=9040843 mtu 1500 index 2
inet 192.168.0.2 netmask ffffff80 broadcast 192.168.12.127
ce1: flags=69040843 mtu 1450 index 3
inet 192.168.0.3 netmask ffffff80 broadcast 192.168.12.127
groupname mpgrp
ether 0:3:ba:cd:1b:e3