手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

in.mpathd(1M)

名称

in.mpathd - IP 多路径守护进程

用法概要

/usr/lib/inet/in.mpathd 

描述

in.mpathd 守护进程为 IPMP 组中的 IP 接口(也可以是系统上的所有 IP 接口)执行故障和修复检测。它还按照管理员配置的策略控制 IPMP 组中的哪些 IP 接口处于“活动”状态(由系统使用以发送或接收 IP 数据通信)。

in.mpathd 守护进程可以通过三种方法检测 IP 接口故障和修复:通过监视每个 IP 接口的 IFF_PHYSRUNNING 标志(基于链路状态的故障检测)、通过在每个 IP 接口上发送和接收 ICMP 探测器(基于 ICMP 探测器的故障检测)或通过传递式探测。

如果启用了传递式探测,则 IP 接口会分成两类:有资格接收和没有资格接收传入 IP 数据通信的 IP 接口(请参见 ipmpstat(1M) 中的 INBOUND)。有资格接收传入 IP 数据通信的接口可通过发送和接收 ICMP 探测器来检测故障。没有资格接收传入 IP 数据通信的接口可通过与有资格接收此通信的接口交换链路层(“传递式”)探测器来检测故障。

缺省情况下,仅启用基于链路状态的故障检测。这要求驱动程序支持链路状态通知。基于 ICMP 探测器的故障检测必须通过配置一个或多个测试地址来启用,这将在下文中说明。传递式探测可以通过将如下所示的 SMF 属性值修改为 true 来启用:

svc:/network/ipmp/config/transitive-probing

有关如何修改 transitive-probing 属性值的更多信息,请参见“示例”部分。

基于 ICMP 和传递式探测器的故障检测方法测试完整的 IP 接口发送和接收路径。ipmpstat(1M) 实用程序可用于检查启用了哪些故障检测方法。

如果将 transitive-probing 设置为 true,并且没有为给定 IPMP 组配置测试地址,那么将使用传递式探测。如果将其设置为 false(缺省值),那么在任何情况下都不会使用传递式探测。

如果仅启用了基于链路状态的故障检测,那么接口的运行状况只能根据 IFF_PHYSRUNNING 标志的状态来确定。如果启用了探测器,那么不管是链路状态还是探测器指示存在故障时,系统都认为接口发生故障;一旦故障检测方法指示故障已排除,系统则认为已修复。虽然组中的所有接口不一定都配置使用相同的故障检测方法,但是组中至少具有一个 IP 测试地址的接口会禁用传递式探测。

如上所述,要执行基于 ICMP 探测器的故障检测,in.mpathd 要求在每个 IP 接口上配置测试地址,以便发送和接收探测器。使用 ipadm(1M) 在底层接口上创建的所有地址都将自动用作测试地址。系统将自动对此类地址设置 NOFAILOVER 标志。每个地址可以静态配置,也可以通过 DHCP 获取。为了查找目标,in.mpathd 首先查询路由表以查找相同子网上的路由,然后使用指定的下一中继站。如果没有符合条件的路由,则向所有主机发送 ICMP 探测器,然后选择一部分发出响应的系统。因此,为了使基于探测器的故障检测能够正常运行,每个子网上必须至少有一个相邻节点来响应 ICMP 回显请求探测器。ipmpstat(1M) 实用程序可用于显示当前探测器目标信息和已发送探测器的状态。

IPv4 和 IPv6 都受支持。如果某个 IP 接口已针对 IPv4 激活,并配置了 IPv4 测试地址,那么 in.mpathd 将在该 IP 接口上开始发送 ICMPv4 探测器。同样地,如果某个 IP 接口已针对 IPv6 激活,并配置了 IPv6 测试地址,那么 in.mpathd 将在该 IP 接口上开始发送 ICMPv6 探测器。然而,请注意,in.mpathd 将忽略不是链路本地地址的 IPv6 测试地址。如果同时激活 IPv4 和 IPv6,那么只需配置两者之一即可,即要么配置 IPv4 测试地址,要么配置 IPv6 测试地址。如果同时配置了 IPv4 和 IPv6 测试地址,那么 in.mpathd 同时使用 ICMPv4 和 ICMPv6 进行探测。

如上所述,in.mpathd 还控制 IPMP 组中哪些 IP 接口处于“活动”状态(供系统用于发送和接收 IP 数据通信)。具体而言,in.mpathd 跟踪每个 IPMP 组的管理配置,并尝试根据该配置在每个组内保留一定数量的活动 IP 接口。因此,如果某个活动 IP 接口发生故障,in.mpathd 将激活该组中的一个 INACTIVE 接口,当然前提是存在这样的接口(它将优先选择还标记为 STANDBYINACTIVE 接口)。同样,如果某个 IP 接口修复,从而导致 IPMP 组的活动接口超过管理配置指定的数目,那么 in.mpathd 将取消激活其中一个接口(优先选择标记为 STANDBY 的接口),除非使用了 FAILBACK 变量,如下文所述。使 IP 接口脱机时(例如,响应 if_mpadm(1M) 时),in.mpathd 也将作出类似的调整。

in.mpathd 守护进程访问 /etc/default/mpathd 中的三个变量值:FAILURE_DETECTION_TIMEFAILBACKTRACK_INTERFACES_ONLY_WITH_GROUPS

FAILURE_DETECTION_TIME 变量指定基于探测器的故障检测时间。故障检测时间越短,探测器通信量越大。FAILURE_DETECTION_TIME 的缺省值为 10 秒。这意味着 in.mpathd 将在 10 秒内检测到 IP 接口故障。IP 接口修复检测时间始终是 FAILURE_DETECTION_TIME 值的两倍。请注意,虽然一般情况下会立即处理通过基于链路的故障检测所检测到的故障和修复,但是当 in.mpathd 怀疑链路状态因硬件存在缺陷而变得不稳定时,它可能会忽略链路状态更改;请参见“诊断”部分。

缺省情况下,in.mpathd 仅对配置为指定 IPMP 组的一部分的 IP 接口进行故障和修复检测。将 TRACK_INTERFACES_ONLY_WITH_GROUPS 设置为 no 将对所有 IP 接口启用故障和修复检测,即使它们不是指定 IPMP 组的一部分。被跟踪但不是指定 IPMP 组的一部分的 IP 接口将被视为“匿名”IPMP 组的一部分。除了没有名称外,该 IPMP 组还有一个比较特殊的地方,即它的 IP 接口不是等效的,因此在某个 IP 接口发生故障时,不能由其他接口替补。也就是说,匿名 IPMP 组仅能用于故障和修复检测,不提供高可用性或负荷分配功能。

如上所述,当 in.mpathd 检测到 IP 接口已修复时,它随即激活该接口,以便将该接口重新用于发送和接收 IP 数据通信。但是,如果将 FAILBACK 设置为 no,那么只有在该组中没有其他活动的 IP 接口时才激活该 IP 接口。然而,随后,如果该组中其他 IP 接口发生故障,那么可能会激活该接口。

SMF 管理

in.mpathd 守护进程服务由服务管理工具 smf(5) 管理,其服务标识符为:

svc:/network/ipmp:default

可以使用 svcadm(1M) 来对此服务执行管理操作(如启用、禁用或请求重新启动)。

示例

示例 1 启用传递式探测故障检测

以下示例显示了用于启用传递式探测故障检测的 SMF 命令序列。

# svccfg -s svc:/network/ipmp setprop config/transitive-probing=true
# svcadm refresh svc:/network/ipmp:default

文件

/etc/default/mpathd

包含 in.mpathd 守护进程使用的缺省值。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os

另请参见

if_mpadm(1M)ifconfig(1M)ipmpstat(1M)svcadm(1M)attributes(5)smf(5)icmp(7P)icmp6(7P),

Oracle Solaris 11.2 网络服务介绍

诊断

IP 接口 interface_name 的硬件地址在组 group_name 中不唯一;脱机

描述: 为了使基于探测器的故障检测、负荷分配和其他代码 IPMP 功能能够工作正常,IPMP 组中的每个 IP 接口必须具有唯一的硬件地址。如果不能满足此要求,对于具有重复硬件地址的所有 IP 接口,in.mpathd 只保持其中一个处于联机状态,自动使其他所有接口都脱机。

现在 IP 接口 interface_name 在组 group_name 中具有唯一的硬件地址;联机

描述: 之前检测到的重复硬件地址现在是唯一的,因此 in.mpathd 使 interface_name 恢复联机状态。

测试地址 address 在组中不唯一;在 interface_name 上禁用基于探测器的故障检测

描述: 为了使 in.mpathd 能够执行基于探测器的故障检测,组中的每个测试地址必须唯一。

接口 interface_name 上未配置测试地址,对该接口禁用基于探测器的故障检测

描述: 为了使 in.mpathd 能够对 IP 接口执行基于探测器的故障检测,必须为接口配置测试地址:IPv4、IPv6 或者两者。

group_name 中的 IP interface_name 未针对 IPv[4|6] 激活,影响 IPv[4|6] 连接

描述: 多路径组中的所有 IP 接口必须进行同类激活。例如,如果一个 IP 接口针对 IPv4 激活,那么该组中所有的 IP 接口都必须针对 IPv4 激活,否则将无法可靠地发送和接收 IPv4 数据包。所有 IP 接口上推送的 STREAMS 模块也必须相同。

过去的一分钟之内,在 interface_name 上链路连通次数超过 2 次;在其稳定之前禁用修复。

描述: 为了限制具有间歇性硬件(例如不良线缆)的接口的影响,在链路状态稳定之前,in.mpathd 不会将频繁更改链路状态的 IP 接口视为已修复。

故障检测时间 time 无效(假定缺省值为 10000 ms)

描述: /etc/default/mpathd 文件中的 FAILURE_DETECTION_TIME 值无效。

故障检测时间 time 太短(假定最小值为 100 ms)

描述: 目前,可以为 FAILURE_DETECTION_TIME 指定的最小值为 100 毫秒。

FAILBACK 的值 value 无效

描述: 布尔变量 FAILBACK 的有效值为 yesno

TRACK_INTERFACES_ONLY_WITH_GROUPS 的值 value 无效

描述: 布尔变量 TRACK_INTERFACES_ONLY_WITH_GROUPS 的有效值为 yesno

无法满足 (inet[6] interface_name) 请求的故障检测时间 time ms,组 group_name 新的故障检测时间为 time ms

描述: ICMP 探测器的往返时间大于维持当前故障检测时间所需的时间。网络可能会变得拥塞或者探测器目标负荷过重。in.mpathd 自动将故障检测时间增加到在这些条件下完成故障检测所需的时间。

为组 group_name 增加了 (inet[6] interface_name) 的故障检测时间 time ms

描述: ICMP 探测器的往返时间现已缩短,in.mpathd 相应地减少了故障检测时间。

interface_name 上检测到 IP 接口故障

描述: in.mpathdinterface_name 上检测到故障,并在 interface_name 上设置了 IFF_FAILED 标志,确保不会将其用于 IP 数据通信。

interface_name 上检测到 IP 接口修复

描述: in.mpathdinterface_name 上检测到修复,并清除了 IFF_FAILED 标志。根据管理配置,interface_name 可以重新用于 IP 数据通信。

group 中的所有 IP 接口现在都不可用

描述: in.mpathd 已确定 group 中的所有 IP 接口都不可用于 IP 数据通信,因此断开了该组的网络连接。

group 中现在至少有 1 个 IP 接口 (interface_name) 可用

描述: in.mpathd 已确定 group 中至少有一个 IP 接口可以重新用于 IP 数据通信,因此恢复了该组的网络连接。

interface_name 的链路断开

描述: in.mpathd 检测到 interface_nameIFF_PHYSRUNNING 标志已清除,表明链路已断开。

interface_name 的链路连通

描述: in.mpathd 检测到已设置 interface_nameIFF_PHYSRUNNING 标志,表明链路已连通。