阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Solaris系统配置IPMP教程(基于IP寻址)

115次阅读
没有评论

共计 6696 个字符,预计需要花费 17 分钟才能阅读完成。

一、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 组中的所有接口都必须具有相同的介质类型

3. 四、实验环境

 操作系统: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”

1.4. 确保 STREAMS 模块

同一组中所有接口必须按相同顺序配置相同的 STREAMS 模块,通过 ifconfig ixgbe0 modlist 命令可以输出 STREAMS 模块的列表

# ifconfig ixgbe0 modlist

0 arp

1 ip

2 ixgbe

接口通常作为网络驱动程序直接位于 IP 模块之下,则不需要做其他设置。

5. 配置 IPMP 组

1) 配置 /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 为对外服务的主机名)

2) 配置 /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-ixgbe0:IPMP 组中增加一个子接口,此处可以是 IP 地址,由于已在 hosts 文件中进行了定义,故可直接使用名称;

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

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

# vi /etc/hostname.ixgbe1

test-ixgbe1  netmask + broadcast + group ipmp0 deprecated -failover up

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

6. 查看结果

# 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”,

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

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

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

•测试

选择停用“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

通过 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 可以正常工作

六、题外话

1.IPMP 的两种实现方式

IPMP 有两种实现方式:

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

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

本文所述的采用的是 Probe-based IPMP 的方式,在 solaris8 和 solaris9 中只有 Probe-based 模式,从 solaris10 开始好像才可以使用 Link-based IPMP,solaris11 是肯定两种都支持。

2.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 标志。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6696字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中