免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3987 | 回复: 8
打印 上一主题 下一主题

Solaris系统配置IPMP (基于ip寻址) [复制链接]

论坛徽章:
3
技术图书徽章
日期:2014-02-18 11:00:13操作系统版块每日发帖之星
日期:2016-05-24 06:20:00操作系统版块每日发帖之星
日期:2016-08-11 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-03 17:48 |只看该作者 |倒序浏览
本帖最后由 有机天使 于 2014-12-04 10:44 编辑

Solaris系统配置IPMP教程
(基于IP寻址与链路)
一、           IPMP介绍

IP 网络多路径 (IP network multipathing, IPMP) 为在同一 IP 链路上具有多个接口的系统提供物理接口故障检测和透明网络访问故障转移功能。IPMP还为具有多个接口的系统提供了包负荷分配。

   通过IPMP,可以将一个或多个物理接口配置到IP多路径组(IPMP)中,配置IPMP后,IPMP的故障转移功能可以保持连接并防止断开任何现有的连接。

二、   名词解释

IPMP组:由同一个系统中使用同一个IPMP组名称配置的一个或多个物理接口组成。IPMP组中的所有接口都必须连接到同一个IP链路,同一字符串的IPMP组名称用于标识组中的所有接口。

数据地址:引导指定的或通过ifconfig命令手动指定给NIC的接口的常规地址(可理解为对外服务的ip地址)

测试地址:由in.mpathd守护进程使用的特定于IPMP的地址,对于要使用基于探测器的故障和修复检测的接口,至少必须为其配置一个测试地址。(可理解为物理网卡自身的地址)

在接口出现故障后,测试地址将一直保留在故障接口上,以便in.mpathd可以继续发送探测器以检查后续修复。必须专门配置测试地址,以便应用程序不会意外使用它们,需将测试地址标记为deprecated.

三、   IPMP基本要求

1.  IPMP组中的所有接口都必须具有唯一的MAC地址;

2.  IPMP组中的所有接口都必须具有相同的介质类型

四、   IPMP的两种实现方式

IPMP有两种实现方式:

l  Link-based IPMP:基于链路类,不需测试IP

l  Probe-based IPMP :基于IP寻查,我们常用的是这种,需要测试IP,且必须能ping通网关

五、   实验环境

操作系统:Oracle Solaris 10 1/13 s10s_u11wos_24aSPARC
网卡:ixgbe0与ixgbe1
ixgbe0:192.168.0.101
ixgbe1:192.168.0.102
对外服务IP:192.168.0.100

本文只是针对Solaris 10进行的配置,如果是Solaris 11则会有很多不同

六、   实施步骤

1. 确定IPMP的组成部分

IPMP组可以配置成单接口的IPMP组,也可以配置成双接口的IPMP组,本例选择了ixgbe0与ixgbe1配置为IPMP组。

2. 检验MAC地址

IPMP组中的所有接口都必须具有唯一的MAC地址,故首先应该检验每个接口是否具有唯一的MAC地址。

  在SPARC平台上,每个基于SPARC的系统都具有系统范围的MAC的地址,默认情况下所有的接口都使用该地址,故默认情况下,每个接口的MAC地址是相同的,但要使用IPMP,则组中的每个接口必须具有唯一的MAC地址,这些地址必须使用出厂安装的MAC地址。可以使用“eeprom local-mac-address?”命令来检测当前系统的所有接口是否使用了系统范围的MAC地址:

# eeprom local-mac-address?
local-mac-address?=flase

若对eeprpm命令相应的值为false,则表示所有的接口使用的是系统范围的MAC地址,需将值改为true

# eeprom local-mac-address?=true
# eeprom local-mac-address?
local-mac-address?=true

3. 为IPMP组选择一个名称

任何非空的名称都可以作为组的名称,这里设定组的名称为“ipmp0”

4. 确保STREAMS模块

同一组中所有接口必须按相同顺序配置相同的STREAMS模块,通过ifconfig ixgbe0 modlist命令可以输出STREAMS模块的列表
# ifconfig ixgbe0 modlist
0 arp
1 ip
2 ixgbe
   接口通常作为网络驱动程序直接位于IP模块之下,则不需要做其他设置。

5. 配置IPMP组

1)Probe-based IPMP

a)   配置/etc/hosts文件

# vi /etc/hosts
::1    localhost      
127.0.0.1       localhost      
192.168.0.101     test-ixgbe0
192.168.0.102     test-ixgbe1        
192.168.0.100     test              loghost

此处是设置DNS的关系

192.168.0.101 对应test-ixgbe0  (网卡ixgbe0的测试IP
192.168.0.102 对应 test-ixgbe1  (网卡ixgbe1的测试IP
192.168.0.100 对应 test            IPMP组的数据IPtest为对外服务的主机名)

b)   配置/etc/hostname.interface文件

# vi /etc/hostname.ixgbe0     
test netmask + broadcast + group ipmp0 up \
addif test-ixgbe0 deprecated -failovernetmask + broadcast + up
l  test:设置的对外服务器的主机名,已在/etc/hosts文件中进行
了设置,此处可以用IP地址代替(192.169.0.100);

l  netmask+:设置子网掩码,根据/etc/netmask文件获得;

l  broadcast+:对应于/etc/netmask 计算出一个网络的广播地址,对于网络的广播地址,一般就是此网段中最大地址;

l  group ipmp0:设置IPMP组名为ipmp0;

l  up类似于网卡的启用功能;

l  addif test-ixgbe0IPMP组中增加一个子接口,此处可以是IP地址,由于已在hosts文件中进行了定义,故可直接使用名称;

l  deprecated标记此地址为测试地址;

l  -failover告知系统,这个地址代表的连接如果失效,不做切换(测试地址)

# vi /etc/hostname.ixgbe1
test-ixgbe1  netmask + broadcast + group ipmp0 deprecated-failover up

此处的设置和前面的含义一样,由于已经建立了ipmp0的组,所以这里就不用再次建立,直接添加组名 ipmp0即可

c)   查看结果

# ifconfig -a
lo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232index 1
       inet 127.0.0.1 netmask ff000000
ixgbe0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>mtu 1500 index 2
       inet 192.168.0.100 netmask ffffff80 broadcast 192.168.0.254
       groupname ipmp
       ether 0:1b:21:6f:8d:dc
ixgbe0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>mtu 1500 index 2
       inet 192.168.0.101 netmask ffffff80 broadcast 192.168.0.254
ixgbe1:flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>mtu 1500 index 3
       inet 192.168.0.102 netmask ffffff80 broadcast 192.168.0.254
       groupname ipmp
       ether 0:1b:21:6f:8d:de
sppp0:flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>mtu 1500 index 4
       inet 192.168.3.3 --> 192.168.3.1 netmask ffffff00
       ether 0:0:0:0:0:0
通过ifconfig –a命令可看出

l  IPMP的组名为“ipmp”,

l  “ixgbe0”分配了数据地址192.168.0.100(对外服务地址)

l  “ixgbe0:1”此网卡的测试地址(192.168.0.101)在其逻辑接口;

l  “ixgbe1”:分配了测试地址192.168.0.102.

d)   测试

选择停用“ixgbe0”,测试IPMP工作是否正常

bash-3.2# if_mpadm -dixgbe0
bash-3.2# ifconfig -a
lo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232index 1
       inet 127.0.0.1 netmask ff000000
ixgbe0:flags=89000842<BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE> mtu 0index 2
       inet 0.0.0.0 netmask 0
       groupname ipmp
       ether 0:1b:21:6f:8d:dc
ixgbe0:1:flags=89040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,OFFLINE>mtu 1500 index 2
       inet 192.168.0.101 netmask ffffff80 broadcast 192.168.0.254
ixgbe1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>mtu 1500 index 3
       inet 192.168.0.102 netmask ffffff80 broadcast 192.168.0.254
       groupname ipmp
       ether 0:1b:21:6f:8d:de
ixgbe1:1:flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
       inet 192.168.0.100netmask ffffff80 broadcast 192.168.0.254
sppp0:flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>mtu 1500 index 4
       inet 192.168.3.3 --> 192.168.3.1 netmask ffffff00
       ether 0:0:0:0:0:0
# ping 192.168.0.101
no answer from 192.168.0.101

# ping 192.168.0.100
192.168.0.100 is alive

通过ifconfig –a命令可看出
l  “if_mpadm”: if_mpadm –d  停止一个网卡,if_mpadm –r 恢复一个网卡。

l  “ixgbe0”:之前分配了数据地址,由于网卡被停用,故此处的ip已经迁移至其它网卡。

l  “ixgbe0:1”此网卡的测试地址(192.168.0.101)在其逻辑接口;

l  “ixgbe1”:分配了测试地址192.168.0.102.

l  “ixgbe1:1”:由于“ixgbe0”网卡被停用,故数据ip迁移至此网卡的逻辑接口之上,继续对外提供服务
恢复被停用的ixgbe0,结果如下:

# if_mpadm -r ixgbe0
# ifconfig -a
lo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232index 1
       inet 127.0.0.1 netmask ff000000
ixgbe0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>mtu 1500 index 2
        inet192.168.0.100 netmask ffffff80 broadcast 192.168.0.254
       groupname ipmp
       ether 0:1b:21:6f:8d:dc
ixgbe0:1:flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>mtu 1500 index 2
        inet192.168.0.101 netmask ffffff80 broadcast 192.168.0.254
ixgbe1:flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>mtu 1500 index 3
       inet 192.168.0.102 netmask ffffff80 broadcast 192.168.0.254
        groupname ipmp
       ether 0:1b:21:6f:8d:de
sppp0:flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>mtu 1500 index 4
       inet 192.168.3.3 --> 192.168.3.1 netmask ffffff00
       ether 0:0:0:0:0:0

# ping 192.168.0.101
192.168.0.101 is alive

# ping 192.168.0.102
192.168.0.102 is alive

# ping 192.168.0.100
192.168.0.100 is alive
结果IPMP可以正常工作

2)Link-based IPMP

配置方法和基于IP测试方法基本一样,只是所需要的IP地址少了,主要修改以下几个文件

a)   配置/etc/hosts文件

# vi /etc/hosts
::1    localhost               
192.168.0.100     test              loghost

b)   配置/etc/hostname.interface文件

# cat /etc/hostname.ixgbe0
192.168.0.100  netmask +broadcast + group ipmp up

# cat /etc/hostname.ixgbe1
group ipmp up

c)   查看结果

bash-3.2# ifconfig -a
lo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232index 1
       inet 127.0.0.1 netmask ff000000
ixgbe0:flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
       inet 192.168.0.100netmask ffffff80 broadcast 192.168.0.254
       groupname ipmp
       ether 0:1b:21:6f:8d:dc
ixgbe1:flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
       inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255
       groupname ipmp
       ether 0:1b:21:6f:8d:de
sppp0:flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>mtu 1500 index 4
       inet 192.168.3.3 --> 192.168.3.1 netmask ffffff00
       ether 0:0:0:0:0:0
通过ifconfig –a命令可以看出,IPMP组的名称为“ipmp”,对外服务器的ip为192.168.0.100,且两个网口不用再配置测试IP了,节省了IP资源。

d)   测试
停用一个ixgbe0网卡,检查IP是否正常

bash-3.2# if_mpadm -d ixgbe0
Dec 4 10:28:09 test-ixgbe0 in.mpathd[228]: Successfully failed over from NICixgbe0 to NIC ixgbe1  //提示IP已经成功的从ixgbe0切换到ixgbe1
bash-3.2# ifconfig -a
lo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232index 1
       inet 127.0.0.1 netmask ff000000
ixgbe0:flags=89000842<BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE> mtu 0index 2
       inet 0.0.0.0 netmask 0
       groupname ipmp
       ether 0:1b:21:6f:8d:dc
ixgbe1:flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
       inet 0.0.0.0 netmask ff000000 broadcast 0.255.255.255
       groupname ipmp
       ether 0:1b:21:6f:8d:de
ixgbe1:1:flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
       inet 192.168.0.100netmask ffffff80 broadcast 192.168.0.254
sppp0:flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>mtu 1500 index 4
       inet 192.168.3.3 --> 192.168.3.1 netmask ffffff00
       ether 0:0:0:0:0:0

bash-3.2# ping 192.168.0.100
192.168.0.100 is alive

七、   题外话

IPMP接口配置的类型

IPMP可以配置为以下两种模式:

活动-活动配置 :一个双接口 IPMP 组,其中的两个接口都为“活动”,即它们始终可能既传输探测器通信又传输数据通信(本文所采用的方式)

活动-待机配置:一个双接口的IPMP组,其中一个接口被配置为“standby”(待机)

官网定义:除非 IPMP 组中的某个其他接口出现故障,否则不会使用该组中的待机接口进行数据通信。在出现故障时,故障接口上的数据地址将迁移到待机接口。然后,会像对待其他活动接口一样对待待机接口,直到修复故障接口为止。一些故障转移可能不选择待机接口。相反,这些故障转移可能选择比待机接口具有更少配置为 UP 的数据地址的活动接口。

在待机接口上应仅配置测试地址。IPMP 不允许将数据地址添加到通过ifconfig 命令配置为 standby 的接口。创建此类型配置的任何尝试都将失败。同样,如果将已具有数据地址的接口配置为standby,则这些地址将自动地故障转移到 IPMP 组中的其他接口。由于存在这些限制,因此在将接口设置为standby 之前,必须使用 ifconfig 命令将所有测试地址标记为-deprecated 和 failover。有关如何配置待机接口。

以本文的例子就行配置:

# vi /etc/hostname.ixgbe1
test-ixgbe1  netmask+ broadcast + group ipmp0 deprecated -failover standby up
# ifconfig ixgbe1
ixgbe1:flags=69040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY,INACTIVE> mtu 1500index 3
        inet 192.168.0.101netmask ffffff80 broadcast 192.168.0.254
        groupnameipmp
        ether0:1b:21:6f:8d:de
待机接口只能具有iP地址,即测试地址设置standby up选择之前,必须先设置-failover。

INACTIVE:标志此接口不用于任何外发包,此待机接口发生故障转移时,会清除INACTIVE标志。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2014-12-03 20:02 |只看该作者
我是来点赞的

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11
3 [报告]
发表于 2014-12-03 20:18 |只看该作者
配置测试地址,真心麻烦,在工程规划里要多一堆ip,看着都头大。
还是link_based ipmp爽,不用搞啥子测试地址,solaris有些东西喜欢故弄悬殊,很多地方得向linux学习啊,linux配置双网卡多简单啊。

论坛徽章:
3
技术图书徽章
日期:2014-02-18 11:00:13操作系统版块每日发帖之星
日期:2016-05-24 06:20:00操作系统版块每日发帖之星
日期:2016-08-11 06:20:00
4 [报告]
发表于 2014-12-04 09:29 |只看该作者
确实麻烦,还浪费很多IP,我最近准备更换为链路的,不用测试IP了回复 3# 淡定与洒脱


   

论坛徽章:
3
技术图书徽章
日期:2014-02-18 11:00:13操作系统版块每日发帖之星
日期:2016-05-24 06:20:00操作系统版块每日发帖之星
日期:2016-08-11 06:20:00
5 [报告]
发表于 2014-12-04 10:45 |只看该作者
重新修改了下,增加了基于链路的方式

论坛徽章:
62
洛杉矶湖人
日期:2015-02-10 09:56:11黑曼巴
日期:2016-06-28 17:41:282015-2016NBA季后赛纪念章
日期:2016-06-28 17:41:282016猴年福章徽章
日期:2016-02-18 15:30:34圣安东尼奥马刺
日期:2015-05-04 22:46:00菠菜神灯
日期:2015-05-04 22:35:07新奥尔良黄蜂
日期:2015-03-17 13:54:52明尼苏达森林狼
日期:2015-03-16 21:51:15萨克拉门托国王
日期:2015-03-02 16:10:58华盛顿奇才
日期:2015-03-02 16:10:58迈阿密热火
日期:2015-03-02 16:10:582016科比退役纪念章
日期:2016-06-28 17:41:28
6 [报告]
发表于 2014-12-05 11:04 |只看该作者
赞一个         

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-29 06:20:00操作系统版块每日发帖之星
日期:2015-08-29 06:20:00
7 [报告]
发表于 2014-12-08 16:34 |只看该作者
好资料!谢谢分享!

论坛徽章:
0
8 [报告]
发表于 2014-12-08 21:46 |只看该作者
写的不错


   

论坛徽章:
0
9 [报告]
发表于 2014-12-26 11:20 |只看该作者
很详尽,清晰;;
下面这条不是必须的,可以配置路由指定测试IP与哪个IP通讯的,默认情况下是默认路由;
Probe-based IPMP :基于IP寻查,我们常用的是这种,需要测试IP,且必须能ping通网关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP