一、 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_24a SPARC

网卡: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组的数据IP,test为对外服务的主机名)

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

# vi /etc/hostname.ixgbe0

test netmask + broadcast + group ipmp0 up \

addif test-ixgbe0 deprecated -failover netmask + broadcast + up

  • test:设置的对外服务器的主机名,已在/etc/hosts文件中进行了设置,此处可以用IP地址代替(192.169.0.100);

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

  • broadcast+:对应于/etc/netmask 计算出一个网络的广播地址,

对于网络的广播地址,一般就是此网段中最大地址;

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

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

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

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

  • -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 8232 index 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命令可看出

  • IPMP的组名为“ipmp”,

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

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

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

d) 测试

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

bash-3.2# if_mpadm -d ixgbe0

bash-3.2# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1

inet 127.0.0.1 netmask ff000000

ixgbe0: flags=89000842<BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE> mtu 0 index 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.100 netmask 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命令可看出

  • “if_mpadm”: if_mpadm –d 停止一个网卡,if_mpadm –r 恢复一个网卡。

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

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

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

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

恢复被停用的ixgbe0,结果如下:

# if_mpadm -r ixgbe0

# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 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

# 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 8232 index 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

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 NIC ixgbe0 to NIC ixgbe1 //提示IP已经成功的从ixgbe0切换到ixgbe1

bash-3.2# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1

inet 127.0.0.1 netmask ff000000

ixgbe0: flags=89000842<BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER,OFFLINE> mtu 0 index 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.100 netmask 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 1500 index 3

inet 192.168.0.101 netmask ffffff80 broadcast 192.168.0.254

groupname ipmp

ether 0:1b:21:6f:8d:de

待机接口只能具有iP地址,即测试地址设置standby up选择之前,必须先设置-failover。

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

转载于:https://blog.51cto.com/20101218/1586356

Solaris系统配置IPMP (基于IP寻址与链路)相关推荐

  1. linux对称哈希 路由,基于 IP 哈希的路由

    虚拟交换机可根据每个数据包的源和目标 IP 地址选择虚拟机的上行链路. 要计算虚拟机的上行链路,虚拟交换机会获取数据包中源和目标 IP 地址的最后一个八位字节并对其执行 XOR 运算,然后根据网卡组中 ...

  2. Spring Cloud Alibaba 高级特性 基于 Sleuth+Zipkin 实施链路跟踪体系

    介绍微服务链路追踪的原理: 讲解基于 Spring Cloud Sleuth 实现链路追踪: 构建 Zipkin Server 实现链路追踪的可视化管理. 下面咱们先来介绍什么是微服务链路追踪. 微服 ...

  3. apache基于ip如何配置虚拟主机

    这篇文章将为大家详细讲解有关apache基于ip如何配置虚拟主机,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获.  首先我们用记事本打开httpd.conf文件 ,该 ...

  4. 基于IP的H.264关键技术

    一. 引言 H.264是ITU-T最新的视频编码标准,被称作ISO/IEC14496-10或MPEG-4 AVC,是由运动图像专家组(MPEG)和ITU的视频编码专家组共同开发的新产品.H.264分两 ...

  5. solaris 10 ipmp

    Solaris 10 IPMP配置(案例一) 前提: 1).所有IP在一个网段(VLAN)内,同网段内有其他设备(router或者主机). 2).两块网卡能提供同样的工作模式 3).Solaris 8 ...

  6. 动物园IP网络广播-基于IP局域网络的动物园背景音乐广播系统-动物园智能广播系统设计指南

    动物园IP网络广播-基于IP局域网络的动物园背景音乐广播系统-动物园智能广播系统设计指南 北京海特伟业科技有限公司发布于2022年8月31日 文/任洪卓 一.动物园IP网络广播项目背景及需求 某动物园 ...

  7. 基于IP地址划分VLAN

    实验环境: 1.当检测IP在192.168.10.0./24时,PC接入交换机时,将其划分为VLAN 10,且可以和VLAN 10的服务器通信 2.当检测IP在192.168.20.0/24时,PC接 ...

  8. nginx基于IP的虚拟主机

    知识点: server的语法: upstream语法: upstream中192.168.100.1不是ip只是个标识,只要和下面的proxy_pass 对应即可. 基于IP的虚拟主机: listen ...

  9. Nginx基于IP,端口,域名配置虚拟主机

    Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实 ...

最新文章

  1. ICLR 2020 | ELECTRA:新型文本预训练模型
  2. JAVA服务器搭建之问题总结
  3. 7个你可能不认识的CSS单位
  4. 《当程序员的那些狗日日子》(六十一)美丽的天际
  5. 分享memcache和memcached安装过程(转)
  6. (45)FPGA同步复位与异步复位(同步复位)
  7. 如何评价一个RPC框架的性能
  8. JavaScript 简介 1
  9. 完成端口————留着看
  10. 静态页面编写规范02
  11. Android 开源项目及库汇总
  12. 什么是大数据与智能数据?什么是惯性测量单元与GNSS?
  13. Android安卓原生实现微信登陆
  14. July 16th 模拟赛C T2 奶牛晒衣服 Solution
  15. SQL--超键、候选键、主键、外键的认识和区分
  16. 淮北师范大学c语言试卷,2016年淮北师范大学物理与电子信息学院高级语言程序设计(加试)之C语言程序设计复试笔试仿真模拟题...
  17. 数据库引擎优化顾问优化数据库
  18. python基础教程django 获取字段最大值,最新的记录操作
  19. Hamiltonian Monte Carlo抽样算法的初步理解
  20. 在线编辑word文档,weboffice在线操作word文档

热门文章

  1. 幼儿园计算机应用研修日志,信息技术教师研修日志三篇
  2. 厉害了!麟哥新书登顶京东销量排行榜!
  3. 【LeetCode】163.Missing Ranges(Medium)(带锁题)解题报告
  4. 力扣 373. 查找和最小的K对数字
  5. 网站学习心得-登陆注册功能
  6. 【路径规划-TSP问题】基于蚁群算法求解实际地图旅行商问题含Matlab源码
  7. 计算机专业大几用到移动硬盘,2T有轻薄,4T大容量,双盘在面前,你会怎么选?—希捷2T移动硬盘评测...
  8. 将dblp中的文件导入到endnote中
  9. win10双系统linux视频教程,Win10+Linux(CentOS) 双系统安装--踩坑实录
  10. ORACLE压力测试工具orion