系统管理指南:IP 服务

第 6 部分 IPMP

本部分介绍 IP 网络多路径 (IP network multipathing, IPMP) 以及有关管理 IPMP 的任务。IPMP 为系统上连接到同一链路的接口提供故障检测和故障转移。

第 30 章 IPMP 介绍(概述)

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

本章包含以下信息:

有关 IPMP 配置任务,请参阅第 31 章

为什么应该使用 IPMP

IPMP 为具有多个物理接口的系统提供增强的可靠性、可用性和网络性能。有时,连接到该接口的物理接口或网络硬件可能会出现故障或者需要维护。过去,在这种情况下,系统便无法再通过与故障接口关联的任何 IP 地址进行联系。并且,使用这些 IP 地址与系统相连的任何现有连接都将被断开。

通过 IPMP,可以将一个或多个物理接口配置到 IP 多路径组(IPMP 组)中。配置 IPMP 后,系统将自动监视 IPMP 组中的接口是否出现故障。如果组中的接口出现故障或者被移除以进行维护,则 IPMP 自动迁移或故障转移故障接口的 IP 地址。这些地址的接收者是故障接口的 IPMP 组中的工作接口。IPMP 的故障转移功能可以保持连接并防止断开任何现有连接。此外,通过自动在 IPMP 组中的一组接口中分配网络通信流量,IPMP 提高了总体网络性能。此过程称为负荷分配

Oracle Solaris : IPMP 组件

Oracle Solaris : IPMP 涉及以下软件:

多路径守护进程 in.mpathd

in.mpathd 守护进程检测接口故障,然后实现故障转移和故障恢复的各种过程。在 in.mpathd 检测到故障或修复后,守护进程将发送 ioctl 以执行故障转移或故障恢复。ip 内核模块(用于实现 ioctl)将自动且透明地进行网络访问故障转移。


注 –

在同一组网络接口卡上使用 IPMP 时,不要使用 Alternate Pathing。同样,在使用 Alternate Pathing 时,不应使用 IPMP。可以在不同的接口组上同时使用 Alternate Pathing 和 IPMP。有关 Alternate Pathing 的更多信息,请参阅《Sun Enterprise Server Alternate Pathing 2.3.1 User Guide》。


in.mpathd 守护进程通过在属于 IPMP 组的所有接口上发出探测器来检测故障和修复。in.mpathd 守护进程还通过监视组中每个接口上的 RUNNING 标志来检测故障和修复。有关更多信息,请参阅 in.mpathd(1M) 手册页。


注 –

不支持 DHCP 管理 IPMP 数据地址。如果尝试对这些地址使用 DHCP,DHCP 最终会放弃对这些地址的控制。请勿对数据地址使用 DHCP。


IPMP 术语和概念

本小节介绍本书 IPMP 章节中涉及的术语和概念。

IP 链路

在 IPMP 术语中,IP 链路是一种通信工具或介质,节点可以通过它在 Internet 协议套件的数据链路层上进行通信。IP 链路的类型可能包括简单以太网、桥接以太网、集线器或异步传输模式 (Asynchronous Transfer Mode, ATM) 网络。IP 链路可以具有一个或多个 IPv4 子网号和(如果适用)一个或多个 IPv6 子网前缀。不能将一个子网号或前缀指定给多个 IP 链路。在 ATM LANE 中,一个 IP 链路便是一个仿真局域网 (local area network, LAN)。对于地址解析协议 (Address Resolution Protocol, ARP),其作用范围是单个 IP 链路。


注 –

其他与 IP 相关的文档(如 RFC 2460,Internet Protocol, Version 6 (IPv6) Specification,使用术语链路而非 IP 链路。第六部分使用术语 IP 链路以避免与 IEEE 802 相混淆。在 IEEE 802 中,链路是指从以太网网络接口卡 (network interface card, NIC) 到以太网交换机的一根线。


物理接口

物理接口提供系统与 IP 链路的连接。此连接通常实现为设备驱动程序和 NIC。如果系统具有连接到同一链路的多个接口,则可以将 IPMP 配置为在其中某个接口出现故障时执行故障转移。有关物理接口的更多信息,请参阅IPMP 接口配置

网络接口卡

网络接口卡是一个可以内置到系统中的网络适配器。NIC 也可以是一个单独的卡,以用作从系统到 IP 链路的接口。一些 NIC 可以具有多个物理接口。例如,qfe NIC 可以具有四个接口:qfe0qfe3

IPMP 组

IP 多路径组(IPMP 组)由同一系统中使用同一 IPMP 组名称配置的一个或多个物理接口组成。IPMP 组中的所有接口都必须连接到同一 IP 链路。同一(非空)字符串 IPMP 组名称用于标识组中的所有接口。只要 NIC 属于同一类型,就可以将不同速度 NIC 中的接口放置在同一 IPMP 组中。例如,可以在同一组中配置 100 MB 以太网 NIC 的接口和 1 GB 以太网 NIC 的接口。再假定您有两个 100 MB 的以太网 NIC。可以将其中一个接口配置为 10 MB,并且仍将这两个接口放置在同一 IPMP 组中。

不能将介质类型不同的两个接口放置到一个 IPMP 组中。例如,不能将 ATM 接口与以太网接口放置在同一组中。

故障检测和故障转移

故障检测是检测一个接口或从接口到 Internet 层设备的路径何时不再工作的过程。IPMP 为系统提供检测接口何时出现故障的功能。IPMP 检测以下类型的通信故障:

检测到故障后,IPMP 开始进行故障转移。故障转移是将网络访问从出现故障的接口切换到同一组中正常工作的物理接口的自动过程。网络访问除包括 IPv6 单点传送和多点传送通信外,还包括 IPv4 单点传送、多点传送和广播通信。仅当在 IPMP 组中配置了多个接口时,才可以发生故障转移。故障转移过程可确保对网络的不间断访问。

修复检测和故障恢复

修复检测是检测 NIC 或从 NIC 到某个 Internet 层设备的路径在出现故障后何时开始正常工作的过程。在检测到已修复的 NIC 后,IPMP 执行故障恢复(将网络访问切换回已修复接口的过程)。修复检测假定已启用故障恢复。有关更多信息,请参见检测物理接口修复

目标系统

基于探测器的故障检测使用目标系统确定接口的状态。每个目标系统都必须连接到与 IPMP 组成员相同的 IP 链路。本地系统上的 in.mpathd 守护进程将 ICMP 探测器消息发送到每个目标系统。探测器消息有助于确定 IPMP 组中每个接口的运行状况。

有关在基于探测器的故障检测中使用目标系统的更多信息,请参阅基于探测器的故障检测

外发负荷分配

在配置 IPMP 后,可以在多个 NIC 中分配外发网络包,而不会影响包的排序。此过程称为负荷分配。通过负荷分配可以达到较高的吞吐量。仅当网络通信流向使用多个连接的多个目标时,才会发生负荷分配。

动态重新配置

动态重新配置 (Dynamic reconfiguration, DR) 是指在系统运行时重新配置系统而对现有操作影响很小或者没有影响的能力。并非所有 Sun 平台都支持 DR。有些 Sun 平台可能仅支持某些类型硬件的 DR。在支持 NIC 的 DR 的平台上,可以使用 IPMP 透明地故障转移网络访问,从而为系统提供不间断的网络访问。

有关 IPMP 如何支持 DR 的更多信息,请参阅IPMP 和动态重新配置

IPMP 的基本要求

IPMP 内置于 Oracle Solaris : 中,无需任何特殊硬件。Oracle Solaris : 支持的任何接口都可以与 IPMP 一起使用。但是,IPMP 对网络配置和拓扑有以下要求:

IPMP 寻址

可以在 IPv4 网络以及双栈、IPv4 和 IPv6 网络中配置 IPMP 故障检测。使用 IPMP 配置的接口支持以下两种类型的地址: 数据地址和测试地址。

数据地址

数据地址是在引导时指定给或通过 ifconfig 命令手动指定给 NIC 的接口的常规 IPv4 和 IPv6 地址。通过接口的标准 IPv4 和(如果适用)IPv6 包流量被视为数据通信

测试地址

测试地址是由 in.mpathd 守护进程使用的特定于 IPMP 的地址。对于要使用基于探测器的故障和修复检测的接口,至少必须为其配置一个测试地址。


注 –

仅当希望使用基于探测器的故障检测时,才需要配置测试地址。


in.mpathd 守护进程使用测试地址与 IP 链路上的其他目标交换 ICMP 探测器(也称为探测器通信)。探测器通信有助于确定接口及其 NIC 的状态,其中包括接口是否已出现故障。探测器检验接口的发送和接收路径是否正常工作。

可以使用 IP 测试地址配置每个接口。对于双栈网络中的接口,可以配置 IPv4 测试地址或/和IPv6 测试地址。

在接口出现故障后,测试地址将一直保留在故障接口上,以便 in.mpathd 可以继续发送探测器以检查后续修复。必须专门配置测试地址,以便应用程序不会意外地使用它们。有关更多信息,请参阅防止应用程序使用测试地址

有关基于探测器的故障检测的更多信息,请参阅基于探测器的故障检测

IPv4 测试地址

通常,可以将子网中的任何 IPv4 地址用作测试地址。IPv4 测试地址无需是可路由的。由于 IPv4 地址是许多站点的有限资源,因此您可能希望将不可路由的 RFC 1918 专用地址用作测试地址。请注意,in.mpathd 守护进程与测试地址在同一子网中的其他主机仅交换 ICMP 探测器。如果使用 RFC 1918 样式的测试地址,请确保使用适当的 RFC 1918 子网中的地址配置 IP 链路上的其他系统(首选路由器)。然后 in.mpathd 守护进程便可以成功地与目标系统交换探测器。

IPMP 示例将来自 192.168.0/24 网络的 RFC 1918 地址用作 IPv4 测试地址。有关 RFC 1918 专用地址的更多信息,请参阅RFC 1918, Address Allocation for Private Internets

有关如何配置 IPv4 测试地址,请参阅如何配置具有多个接口的 IPMP 组

IPv6 测试地址

唯一的有效 IPv6 测试地址是物理接口的链路本地地址。无需将单独的 IPv6 地址用作 IPMP 测试地址。IPv6 链路本地地址基于接口的介质访问控制 (Media Access Control, MAC) 地址。当引导时接口变成启用了 IPv6 的接口或通过 ifconfig 手动配置接口时,将自动配置链路本地地址。

要确定接口的链路本地地址,请在启用了 IPv6 的节点上运行 ifconfig interface 命令。检查输出中是否包含以前缀 fe80(链路本地前缀)开头的地址。以下 ifconfig 输出中的 NOFAILOVER 标志指示,hme0 接口的链路本地地址 fe80::a00:20ff:feb9:17fa/10 被用作测试地址。


hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2
        	inet6 fe80::a00:20ff:feb9:17fa/10 

有关链路本地地址的更多信息,请参阅链路本地单点传送地址

如果在 IPMP 组的所有接口上同时检测了 IPv4 和 IPv6,则无需配置单独的 IPv4 测试地址。in.mpathd 守护进程可以将 IPv6 链路本地地址用作测试地址。

要创建 IPv6 测试地址,请参阅如何配置具有多个接口的 IPMP 组任务。

防止应用程序使用测试地址

配置测试地址后,需要确保应用程序未使用此地址。否则,如果接口出现故障,则无法再访问应用程序,因为在故障转移操作期间测试地址并不故障转移。要确保 IP 不选择将测试地址用于常规应用程序,请将测试地址标记为 deprecated

除非应用程序显式绑定到过时的地址,否则 IPv4 不会将该地址用作源地址进行任何通信。in.mpathd 守护进程显式绑定到此类地址,以便发送和接收探测器通信。

因为 IPv6 链路本地地址通常不存在于名称服务中,所以 DNS 和 NIS 应用程序不使用链路本地地址进行通信。因此,不能将 IPv6 链路本地地址标记为 deprecated

不应将 IPv4 测试地址放置在 DNS 和 NIS 名称服务表中。在 IPv6 中,通常不将链路本地地址放置在名称服务表中。

IPMP 接口配置

IPMP 配置通常由同一系统上连接到同一 IP 链路的两个或更多物理接口组成。这些物理接口可能在同一 NIC 上,也可能不在同一 NIC 上。这些接口被配置为同一 IPMP 组的成员。如果系统在第二个 IP 链路上具有其他接口,则必须将这些接口配置为另一个 IPMP 组。

单个接口可以在自己的 IPMP 组中进行配置。单接口 IPMP 组的行为与具有多个接口的 IPMP 组相同。但是,对于只有一个接口的 IPMP 组,不能进行故障转移和故障恢复。

也可通过与配置 IP 接口之外的组相同的步骤在 IPMP 组内配置 VLAN。有关过程,请参见配置 IPMP 组。在IPMP 的基本要求中列出的同一要求适用于将 VLAN 配置到 IPMP 组。


注意 – 注意 –

当将 VLAN 配置为 IPMP 组时,用于命名 VLAN 的约定可能导致错误。有关 VLAN 名称的更多详细信息,请参见《系统管理指南:IP 服务》VLAN 标记和物理连接点。考虑四种 VLAN 示例,bge1000bge1001bge2000bge2001。IPMP 实现需要这些 VLAN 按如下方式进行分组:bge1000bge1001 属于同一 VLAN 1 中的一个组,而 bge2000bge2001 属于同一 VLAN 2 中的另一个组。由于 VLAN 的名称,很容易发生诸如将属于不同链路的 VLAN 混入一个 IPMP 组的错误,例如,bge1000bge2000


IPMP 组中的待机接口

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

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

常见的 IPMP 接口配置

IPMP 寻址所述,IPMP 组中的接口根据接口配置处理有规律的数据通信和探测器通信。使用 ifconfig 命令的 IPMP 选项可以创建配置。

活动接口是既传输数据通信又传输探测器通信的物理接口。通过执行如何配置具有多个接口的 IPMP 组如何配置单接口 IPMP 组中所述的任务,可以将接口配置为“活动”。

以下是两种常见的 IPMP 配置类型:

活动-活动配置

一个双接口 IPMP 组,其中的两个接口都为“活动”,即它们始终可能既传输探测器通信又传输数据通信。

活动-待机配置

一个双接口 IPMP 组,其中一个接口被配置为“待机”。

检查接口的状态

通过发出 ifconfig interface 命令,可以检查接口的状态。有关 ifconfig 状态报告的一般信息,请参阅如何获取有关特定接口的信息

例如,可以使用 ifconfig 命令获取待机接口的状态。当待机接口未承载任何数据地址时,该接口具有指示其状态的 INACTIVE 标志。可以在 ifconfig 输出中该接口的状态行中看到此标志。

IPMP 故障检测和恢复功能

in.mpathd 守护进程处理以下类型的故障检测:

in.mpathd(1M) 手册页对 in.mpathd 守护进程如何处理接口故障的检测进行了完整说明。

基于链路的故障检测

如果接口支持基于链路的故障检测,应始终启用该类故障检测。在 Oracle Solaris : 的当前发行版中支持以下 Sun 网络驱动程序:

要确定第三方接口是否支持基于链路的故障检测,请参阅制造商文档。

这些网络接口驱动程序会监视接口的链路状态,并在链路状态更改时通知联网子系统。收到更改通知后,联网子系统会根据需要设置或清除该接口的 RUNNING 标志。守护进程在检测到接口的 RUNNING 标志已被清除时,会立即使该接口失效。

基于探测器的故障检测

in.mpathd 守护进程会对 IPMP 组中具有测试地址的每个接口执行基于探测器的故障检测。基于探测器的故障检测涉及使用测试地址发送和接收 ICMP 探测器消息。这些消息通过接口发送到同一 IP 链路上的一个或多个目标系统。有关测试地址的介绍,请参阅测试地址。有关配置测试地址的信息,请参阅如何配置具有多个接口的 IPMP 组

in.mpathd 守护进程确定要动态探测的目标系统。会自动将连接到 IP 链路的路由器选为探测目标。如果在链路上不存在路由器,则 in.mpathd 会将探测器发送到链路上的相邻主机。发送到所有主机多点传送地址(在 IPv4 中为 224.0.0.1,在 IPv6 中为 ff02::1)的多点传送包可确定要用作目标系统的主机。对回显包作出响应的前几个主机将被选作探测目标。如果 in.mpathd 找不到响应 ICMP 回显包的路由器或主机,则 in.mpathd 无法检测基于探测器的故障。

可以使用主机路由显式配置要由 in.mpathd 使用的目标系统的列表。有关说明,请参阅配置目标系统

为确保 IPMP 组中的每个接口都正常工作,in.mpathd 将通过 IPMP 组中的所有接口分别探测所有目标。如果对五个连续的探测器未做出任何响应,则 in.mpathd 认为接口已出现故障。探测速率取决于故障检测时间 (failure detection time, FDT)。故障检测时间的缺省值是 10 秒。不过,可以在 /etc/default/mpathd 文件中调整故障检测时间。有关说明,请转至如何配置 /etc/default/mpathd 文件

对于 10 秒的修复检测时间,探测速率约为每两秒发送一个探测器。最短的修复检测时间是故障检测时间的两倍,缺省情况下为 20 秒,因为必须收到对 10 个连续探测器的回复。故障检测时间和修复检测时间仅适用于基于探测器的故障检测。


注 –

由 VLAN 组成的 IPMP 组,基于链路的故障检测通过物理链路实现,因此影响该链路上的所有 VLAN。基于探测器的故障检测通过 VLAN 链路执行。例如,同时在一个组内配置bge0/bge1bge1000/bge1001。如果已拔出 bge0 的电缆,那么基于链路的故障检测将立即报告 bge0bge1000 都好像已发生故障。但是,如果 bge0 上的所有探测器目标变得不可访问,将仅报告 bge0 发生故障,因为 bge1000 在其自己的 VLAN 上有其自己的探测器目标。


组故障

当 IPMP 组中的所有接口看起来同时出现故障时,就会出现组故障。对于组故障,in.mpathd 守护进程不执行故障转移。此外,当所有目标系统同时出现故障时,也不会执行故障转移。在这种情况下,in.mpathd 会清除其当前所有的目标系统并搜索新的目标系统。

检测物理接口修复

要使 in.mpathd 守护进程将某个接口视为要进行修复,必须为该接口设置 RUNNING 标志。如果使用基于探测器的故障检测,in.mpathd 守护进程必须先从接口收到对 10 个连续探测器包的响应,才会将该接口视为已修复。接口被视为已修复时,故障转移到其他接口的任何地址都将故障恢复到已修复的接口。如果接口在出现故障之前被配置为“活动”,则在修复之后该接口可以恢复发送和接收通信。

接口故障转移期间发生的情况

以下两个示例说明了一种典型配置,以及该配置在接口出现故障时如何自动更改。当 hme0 接口出现故障时,请注意所有数据地址都将从 hme0 移动到 hme1


示例 30–1 接口出现故障之前的接口配置


hme0: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
     mtu 1500 index 2
     inet 192.168.85.19 netmask ffffff00 broadcast 192.168.85.255
     groupname test
hme0:1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
     mtu 1500 
     index 2 inet 192.168.85.21 netmask ffffff00 broadcast 192.168.85.255
hme1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
8     inet 192.168.85.20 netmask ffffff00 broadcast 192.168.85.255
     groupname test
hme1:1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
     mtu 1500 
     index 2 inet 192.168.85.22 netmask ffffff00 broadcast 192.168.85.255
hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2
     inet6 fe80::a00:20ff:feb9:19fa/10
     groupname test
hme1: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2
     inet6 fe80::a00:20ff:feb9:1bfc/10
     groupname test


示例 30–2 接口出现故障之后的接口配置


hme0: flags=19000842<BROADCAST,RUNNING,MULTICAST,IPv4,
      NOFAILOVER,FAILED> mtu 0 index 2
      inet 0.0.0.0 netmask 0 
      groupname test
hme0:1: flags=19040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,
      NOFAILOVER,FAILED> mtu 1500 index 2 
      inet 192.168.85.21 netmask ffffff00 broadcast 10.0.0.255
hme1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
      inet 192.168.85.20 netmask ffffff00 broadcast 192.168.85.255
      groupname test
hme1:1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,
      NOFAILOVER> mtu 1500 
      index 2 inet 192.168.85.22 netmask ffffff00 broadcast 10.0.0.255
hme1:2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 6
      inet 192.168.85.19 netmask ffffff00 broadcast 192.168.18.255
hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER,FAILED> mtu 1500 index 2
      inet6 fe80::a00:20ff:feb9:19fa/10 
      groupname test
hme1: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2
      inet6 fe80::a00:20ff:feb9:1bfc/10 
      groupname test

可以看到,在 hme0 上设置了 FAILED 标志,以指示此接口已出现故障。还可以看到,创建了 hme1:2,而 hme1:2 最初是 hme0。然后,地址 192.168.85.19 变成可通过 hme1 进行访问。

192.168.85.19 关联的多点传送成员仍可以接收包,但是它们现在通过 hme1 接收包。当进行地址 192.168.85.19hme0hme1 的故障转移时,在 hme0 上创建了伪地址 0.0.0.0。由于创建了伪地址,因此仍可以访问 hme0。如果没有 hme0hme0:1 便无法存在。在执行后续的故障恢复时,将删除伪地址。

同样,进行了 IPv6 地址从 hme0hme1 的故障转移。在 IPv6 中,多点传送成员与接口索引关联。多点传送成员也从 hme0 故障转移到 hme1。而且还移动了 in.ndpd 配置的所有地址。示例中未说明此操作。

in.mpathd 守护进程继续通过故障接口 hme0 进行探测。守护进程在 20 秒的缺省修复检测时间内收到 10 个连续回复后,确定该接口已修复。由于在 hme0 上也设置了 RUNNING 标志,因此守护进程调用故障恢复。在故障恢复后,将恢复原始配置。

有关故障和修复期间在控制台上记录的所有错误消息的说明,请参见 in.mpathd(1M) 手册页。

IPMP 和动态重新配置

使用动态重新配置 (dynamic reconfiguration, DR) 功能,可以在系统运行的同时重新配置系统硬件(如接口)。本节介绍 DR 如何与 IPMP 交互操作。

在支持 NIC 的 DR 的系统上,可以使用 IPMP 保持连通性和防止断开现有的连接。在支持 DR 并使用 IPMP 的系统上,可以安全地连接、拆离或重新连接 NIC。这是因为 IPMP 已集成到重新配置调整管理器 (Reconfiguration Coordination Manager, RCM) 框架中。RCM 用于管理系统组件的动态重新配置。

通常使用 cfgadm 命令执行 DR 操作。但是,一些平台可提供其他方法。有关详细信息,请参阅平台文档。可以从以下资源中找到有关 DR 的特定文档。

表 30–1 动态重新配置的文档资源

说明 

参考 

有关 cfgadm 命令的详细信息

cfgadm(1M) 手册页

有关 Sun Cluster 环境中 DR 的特定信息 

Sun Cluster 3.1 System Administration Guide

有关 Sun Fire 环境中 DR 的特定信息 

Sun Fire 880 Dynamic Reconfiguration Guide

有关 DR 和 cfgadm 命令的介绍性信息

《系统管理指南:设备和文件系统》中的第 6  章 “动态配置设备(任务)”

在支持 DR 的系统上管理 IPMP 组的任务 

在支持动态重新配置的系统上替换出现故障的物理接口

连接 NIC

可以随时使用 ifconfig 命令将接口添加到 IPMP 组,如如何配置具有多个接口的 IPMP 组所述。因此,可以检测在系统引导后连接的系统组件上的任何接口并将其添加到现有的 IPMP 组。或者,如果适当,可以将新添加的接口配置到其 IPMP 组中。

这些接口和其上配置的数据地址可供 IPMP 组立即使用。但是,为了使系统在重新引导后自动配置和使用这些接口,必须为每个新接口创建 /etc/hostname.interface 文件。有关说明,请参阅如何在安装系统后配置物理接口

如果在连接接口时 /etc/hostname.interface 文件已存在,则 RCM 将根据此文件的内容自动配置接口。这样,该接口接收的配置与系统引导后其将接收的配置相同。

拆离 NIC

首先检查拆离包含 NIC 的系统组件的所有请求以确保可以保持连通性。例如,缺省情况下,无法拆离不在 IPMP 组中的 NIC。也无法拆离包含 IPMP 组中仅有的工作接口的 NIC。但是,如果必须移除系统组件,则可以使用 cfgadm-f 选项覆盖此行为,如 cfgadm(1M) 手册页中所述。

如果检查成功,则与已拆离的 NIC 关联的数据地址将故障转移到同一组中的工作 NIC,如同被拆离的 NIC 出现了故障。拆离 NIC 时,会取消 NIC 接口上配置的所有测试地址。然后,从系统中取消检测 NIC。如果其中的任一步骤失败,或者同一系统组件上其他硬件的 DR 失败,则会将先前的配置恢复到其原始状态。您应接收到有关此事件的状态消息。否则,拆离请求成功完成。可以从系统中移除组件。未断开任何现有连接。

重新连接 NIC

RCM 记录与从正在运行的系统拆离的任何 NIC 关联的配置信息。因此,RCM 会像连接新的 NIC 一样,重新连接以前拆离的 NIC。即,RCM 仅执行检测。

但是,重新连接的 NIC 通常具有现有的 /etc/hostname.interface 文件。在这种情况下,RCM 会根据现有 /etc/hostname.interface 文件的内容自动配置接口。此外,RCM 会通知 in.mpathd 守护进程最初在重新连接的接口上承载的每个数据地址。因此,在重新连接的接口正常工作后,其所有数据地址都将故障恢复到重新连接的接口,如同已修复该接口。

如果重新连接的 NIC 没有 /etc/hostname.interface 文件,则没有可用的配置信息。RCM 没有有关如何配置接口的信息。此情况的一个结果是,不会故障恢复以前故障转移到其他接口的地址。

系统引导时缺少的 NIC

系统引导时不存在的 NIC 是特殊的故障检测实例。在引导时,启动脚本会跟踪所有具有无法检测的 /etc/hostname.interface 文件的接口。在这类接口的 /etc/hostname.interface 文件中的所有数据地址将自动驻留在 IPMP 组中的替换接口上。

在此类事件中,会收到与以下内容类似的错误消息:


moving addresses from failed IPv4 interfaces: hme0 (moved to hme1)
moving addresses from failed IPv6 interfaces: hme0 (moved to hme1)

如果不存在备用接口,则收到与以下内容类似的错误消息:


moving addresses from failed IPv4 interfaces: hme0 (couldn't move; 
   no alternative interface) 
 moving addresses from failed IPv6 interfaces: hme0 (couldn't move; 
   no alternative interface) 

注 –

在此故障检测实例中,只有在缺少的接口的 /etc/hostname.interface 文件中显式指定的数据地址才会移动到备用接口。不会获取或移动通常通过其他方法(如通过 RARP 或 DHCP)获取的任何地址。


如果使用 DR 重新连接与在系统引导时缺少的接口同名的另一接口,则 RCM 将自动检测该接口。然后,RCM 根据接口的 /etc/hostname.interface 文件内容配置接口。最后,RCM 故障恢复所有数据地址,如同已修复接口。因此,最终的网络配置与在该接口存在的情况下引导系统时进行的配置完全相同。

第 31 章 管理 IPMP(任务)

本章介绍使用 IP 网络多路径 (IP network multipathing, IPMP) 管理接口组的任务。本章主要讨论以下主题:

有关 IPMP 概念的概述,请参阅第 30 章

配置 IPMP(任务列表)

本节包含指向本章所介绍任务的链接。

配置和管理 IPMP 组(任务列表)

任务 

说明 

参考 

规划 IPMP 组。 

列出所有辅助信息和必需任务,然后才能配置 IPMP 组。 

如何规划 IPMP 组

使用多个接口配置 IPMP 接口组。 

将多个接口配置为 IPMP 组的成员。 

如何配置具有多个接口的 IPMP 组

配置 IPMP 组,该组的一个接口是待机接口。 

将多接口 IPMP 组的其中一个接口配置为待机接口。 

如何为 IPMP 组配置待机接口

配置由单个接口组成的 IPMP 组。 

创建单接口 IPMP 组。  

如何配置单接口 IPMP 组

显示物理接口所属的 IPMP 组。 

说明如何从 ifconfig 命令的输出中获取接口的 IPMP 组的名称。

如何显示接口的 IPMP 组成员关系

将接口添加到 IPMP 组。 

将新接口配置为现有 IPMP 组的成员。 

如何将接口添加到 IPMP 组

从 IPMP 组中删除接口。 

说明如何从 IPMP 组中删除接口。 

如何从 IPMP 组中删除接口

将接口从现有 IPMP 组移动到其他组。 

在 IPMP 组之间移动接口。 

如何将接口从一个 IPMP 组移动到另一个组

更改 in.mpathd 守护进程的三个缺省设置。

自定义 in.mpathd 守护进程的故障检测时间和其他参数。

如何配置 /etc/default/mpathd 文件

在支持动态重新配置的接口上管理 IPMP(任务列表)

任务 

说明 

参考 

删除出现故障的接口。 

删除系统上出现故障的接口。 

如何删除出现故障的物理接口(DR 分离)

替换出现故障的接口。 

替换出现故障的接口。 

如何替换出现故障的物理接口(DR 连接)

恢复在引导时未配置的接口。 

恢复出现故障的接口。 

如何恢复系统引导时不存在的物理接口

配置 IPMP 组

本节提供了配置 IPMP 组的过程,并介绍如何将一个接口配置为待机接口。

规划 IPMP 组

将系统上的接口配置为 IPMP 组的一部分之前,需要进行一些配置前规划。

Procedure如何规划 IPMP 组

以下过程包括配置 IPMP 组之前要收集的规划任务和信息。不必顺序执行这些任务。

  1. 确定系统上的哪些接口将是 IPMP 组的一部分。

    IPMP 组通常由至少两个连接到同一 IP 链路的物理接口组成。但是,如果需要,可以配置单接口 IPMP 组。有关 IPMP 组的简介,请参阅IPMP 接口配置。例如,可以在同一 IPMP 组下配置同一台以太网交换机或同一个 IP 子网。可以在同一 IPMP 组中配置任意数量的接口。

    不能将 ifconfig 命令的 group 参数用于逻辑接口。例如,可以将 group 参数用于 hme0,但是不能用于 hme0:1

  2. 检验组中的每个接口是否具有唯一的 MAC 地址。

    有关说明,请参阅SPARC: 如何确保接口的 MAC 地址是唯一的

  3. 为 IPMP 组选择一个名称。

    任何非空的名称都适合用作组的名称。您可能希望使用一个可以标识接口所连接到的 IP 链路的名称。

  4. 确保在 IPMP 组中的所有接口上推送并配置了同一组 STREAMS 模块。

    同一组中的所有接口必须按相同顺序配置相同的 STREAMS 模块。

    1. 检查将来的 IPMP 组中所有接口上 STREAMS 模块的顺序。

      通过使用 ifconfig interface modlist 命令,可以输出 STREAMS 模块的列表。例如,以下是 hme0 接口的 ifconfig 输出:


      # ifconfig hme0 modlist
      	0 arp
      	1 ip
      	2 hme

      接口通常作为网络驱动程序直接位于 IP 模块之下,如 ifconfig hme0 modlist 的输出中所示。它们应该不需要其他配置。

      但是,某些技术(如 NCA 或 IP 过滤器)会将自身作为 STREAMS 模块插入到 IP 模块和网络驱动程序之间。同一 IPMP 组的接口的行为方式可能会出现问题。

      如果 STREAMS 模块是有状态的,即使将相同模块推送到组中的所有接口上,在进行故障转移时仍可能会出现意外行为。但是,假定按相同顺序将 STREAMS 模块推送到 IPMP 组中的所有接口上,则可以使用无状态 STREAMS 模块。

    2. 按 IPMP 组的标准顺序推送接口的模块。


      ifconfig interface modinsert module-name
      

      ifconfig hme0 modinsert ip
  5. 在 IPMP 组的所有接口上使用相同的 IP 寻址格式。

    如果为 IPv4 配置了一个接口,则必须为 IPv4 配置组的所有接口。假定有一个由多个 NIC 的接口组成的 IPMP 组。如果在一个 NIC 的接口上进行 IPv6 寻址,则必须将 IPMP 组中的所有接口配置为支持 IPv6。

  6. 检查 IPMP 组中的所有接口是否已连接到同一 IP 链路。

  7. 检验 IPMP 组是否包含具有不同网络介质类型的接口。

    组合在一起的接口应属于相同的接口类型,如 /usr/include/net/if_types.h 中定义的那样。例如,不能将以太网接口和令牌环接口组合在一个 IPMP 组中。此外,不能将令牌总线接口与异步传输模式 (asynchronous transfer mode, ATM) 接口组合在同一 IPMP 组中。

  8. 对于具有 ATM 接口的 IPMP,请在 LAN 仿真模式下配置 ATM 接口。

    使用经典的 IP over ATM 的接口不支持 IPMP。

配置 IPMP 组

本节包含有关具有至少两个物理接口的典型 IPMP 组的配置任务。

Procedure如何配置具有多个接口的 IPMP 组

将 VLAN 配置到 IPMP 组时,以下用于配置 IPMP 组的步骤也适用。

开始之前

需要已经配置将来的 IPMP 组中所有接口的 IPv4 地址,如果适用,还需配置 IPv6 地址。


注意 – 注意 –

只能为每个子网或 L2 广播域配置一个 IPMP 组。有关详细信息,请参见IPMP 的基本要求


  1. 在要配置接口的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将每个物理接口放入 IPMP 组。


    # ifconfig interface group group-name
    

    例如,要将 hme0hme1 放入组 testgroup1 中,应键入以下命令:


    # ifconfig hme0 group testgroup1
    # ifconfig hme1 group testgroup1
    

    请避免在组名中使用空格。ifconfig 状态显示不会显示空格。因此,请勿创建两个类似的组名,其中唯一的区别是一个名称还包含空格。如果其中一个组名包含空格,则这些组名在状态显示中看起来是相同的。

    在双栈环境中,如果将某个接口的 IPv4 实例放入特定组中,则 IPv6 实例会自动放入同一组中。

  3. (可选)在一个或多个物理接口上配置 IPv4 测试地址。

    仅当要在特定接口上使用基于探测器的故障检测时,才需要配置测试地址。测试地址将配置为在 ifconfig 命令中指定的物理接口的逻辑接口。

    如果组中的一个接口将成为待机接口,请勿在此时配置该接口的测试地址。作为如何为 IPMP 组配置待机接口的一部分,可以为待机接口配置一个测试地址。

    请使用 ifconfig 命令的以下语法配置测试地址:


    # ifconfig interface addif ip-address parameters -failover deprecated up
    

    例如,可以为主网络接口 hme0 创建以下测试地址:


    # ifconfig hme0 addif 192.168.85.21 netmask + broadcast + -failover deprecated up
    

    此命令可为主网络接口 hme0 设置以下参数:

    • 设置为 192.168.85.21 的地址

    • 设置为缺省值的网络掩码和广播地址

    • 设置的 -failoverdeprecated 选项


      注 –

      必须将 IPv4 测试地址标记为 deprecated,才能防止应用程序使用该测试地址。


  4. 检查特定接口的 IPv4 配置。

    通过键入 ifconfig interface,始终可以查看接口的当前状态。有关查看接口状态的更多信息,请参阅如何获取有关特定接口的信息

    通过指定分配给测试地址的逻辑接口,可以获取有关物理接口的测试地址配置的信息。


    # ifconfig hme0:1
    	hme0:1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
        mtu 1500 index 2 
        inet 192.168.85.21 netmask ffffff00 broadcast 192.168.85.255
  5. (可选)如果适用,请配置 IPv6 测试地址。


    # ifconfig interface inet6 -failover

    具有 IPv6 地址的物理接口会放入与接口的 IPv4 地址相同的 IPMP 组中。如果将具有 IPv4 地址的物理接口配置到 IPMP 组中,则会出现此情况。如果首先将具有 IPv6 地址的物理接口放入 IPMP 组中,则具有 IPv4 地址的物理接口也会隐式放入同一 IPMP 组中。

    例如,要使用 IPv6 测试地址配置 hme0,可键入以下内容:


    # ifconfig hme0 inet6 -failover
    

    无需将 IPv6 测试地址标记为 deprecated 即可防止应用程序使用该测试地址。

  6. 检查 IPv6 配置。


    # ifconfig hme0 inet6
    	hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2
            	inet6 fe80::a00:20ff:feb9:17fa/10 
            	groupname test

    IPv6 测试地址是指接口的链路本地地址。

  7. (可选)重新引导后保留 IPMP 组配置。

    • 对于 IPv4,请将以下行添加到 /etc/hostname.interface 文件:


      interface-address <parameters> group group-name up \
      	addif logical-interface -failover deprecated <parameters> up

      在此情况下,测试 IPv4 地址仅在下次重新引导时配置。如果要在当前会话中调用配置,请执行步骤 1、2 和 3(可选)。

    • 对于 IPv6,请将以下行添加到 /etc/hostname6.interface 文件:


      -failover group group-name up

      此测试 IPv6 地址仅在下次重新引导时配置。如果要在当前会话中调用配置,请执行步骤 1、2 和 5(可选)。

  8. (可选)通过重复步骤 1 至 6,将更多接口添加到 IPMP 组中。

    可以将新接口添加到实时系统上的现有组中。但是,重新引导后更改会丢失。


示例 31–1 配置具有两个接口的 IPMP 组

假定您要执行以下操作:

可键入以下命令:


# ifconfig hme0 addif 192.168.85.21 netmask + broadcast + -failover deprecated up

必须将 IPv4 测试地址标记为 deprecated,才能防止应用程序使用该测试地址。请参见如何配置具有多个接口的 IPMP 组

要启用地址的故障转移属性,可使用不带连字符的 failover 选项。

IPMP 组中的所有测试 IP 地址都必须使用相同的网络前缀。测试 IP 地址必须属于单个 IP 子网。



示例 31–2 重新引导后保留 IPv4 IPMP 组配置

假定您要创建一个名为 testgroup1 的具有以下配置的 IPMP 组:

可将以下行添加到 /etc/hostname.hme0 文件:


192.168.85.19 netmask + broadcast + group testgroup1 up \
	addif 192.168.85.21 deprecated -failover netmask + broadcast + up

同样,要将第二个接口 hme1 放入同一组 testgroup1 中并且配置测试地址,可添加以下行:


192.168.85.20 netmask + broadcast + group testgroup1 up \
	addif 192.168.85.22 deprecated -failover netmask + broadcast + up


示例 31–3 重新引导后保留 IPv6 IPMP 组配置

要为具有 IPv6 地址的接口 hme0 创建测试组,可将以下行添加到 /etc/hostname6.hme0 文件:


-failover group testgroup1 up

同样,要将第二个接口 hme1 放入组 testgroup1 中并且配置测试地址,可将以下行添加到 /etc/hostname6.hme1 文件:


-failover group testgroup1 up

故障排除

在 IPMP 组的配置过程中,in.mpathd 向系统控制台或 syslog 文件输出大量消息。这些消息实质是提示性消息,表示 IPMP 配置工作正常。

另请参见

如果希望 IPMP 组具有活动-待机配置,请转到如何为 IPMP 组配置待机接口

配置目标系统

基于探测器的故障检测涉及目标系统的使用,如基于探测器的故障检测中所述。对于某些 IPMP 组,in.mpathd 会使用大量的缺省目标。但是,对于另一些 IPMP 组,则可能需要为基于探测器的故障检测配置特定目标。通过将路由表中的主机路由设置为探测目标,可以完成基于探测器的故障检测。缺省路由器的前面将列出在路由表中配置的任何主机路由。因此,IPMP 会使用明确定义的主机路由来选择目标。可以使用以下两种方法中的任一种直接指定目标: 手动设置主机路由或创建可以成为启动脚本的 shell 脚本。

在评定网络中的哪些主机可能成为合适的目标时,请考虑以下标准。

Procedure如何为基于探测器的故障检测手动指定目标系统

  1. 使用您的用户帐户登录到要在其中配置基于探测器的故障检测的系统。

  2. 将路由添加到要用作基于探测器的故障检测中的目标的特定主机。


    $ route add -host destination-IP gateway-IP -static
    

    destination-IPgateway-IP 的值替换为要用作目标的主机的 IPv4 地址。例如,可以键入以下内容以指定目标系统 192.168.85.137,该目标系统与 IPMP 组 testgroup1 中的接口位于同一子网中。


    $ route add -host 192.168.85.137 192.168.85.137 -static 
    
  3. 将路由添加到网络中要用作目标系统的其他主机。

Procedure如何在 Shell 脚本中指定目标系统

  1. 在已配置 IPMP 组的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建一个将静态路由设置为建议目标的 shell 脚本。

    例如,可以创建一个名为 ipmp.targets 的包含以下内容的 shell 脚本:


    TARGETS="192.168.85.117 192.168.85.127 192.168.85.137"
    
    case "$1" in
            'start')
                /usr/bin/echo "Adding static routes for use as IPMP targets"
    		for target in $TARGETS; do
    	  /usr/sbin/route add -host $target $target
    		done
                      ;;
            'stop')
                  /usr/bin/echo "Removing static routes for use as IPMP targets"
    		 for target in $TARGETS; do
    		/usr/sbin/route delete -host $target $target
    		 done
                      ;;
      esac  
  3. 将 shell 脚本复制到启动脚本目录中。


     # cp ipmp.targets /etc/init.d  
    
  4. 更改新启动脚本的权限。


    # chmod 744 /etc/init.d/ipmp.targets
    
  5. 更改新启动脚本的拥有权。


    # chown root:sys /etc/init.d/ipmp.targets
    
  6. /etc/init.d 目录中为启动脚本创建链接。


    # ln /etc/init.d/ipmp.targets /etc/rc2.d/S70ipmp.targets
    

    文件名 S70ipmp.targets 中的 S70 前缀会将新脚本相对其他启动脚本正确进行排序。

配置待机接口

如果希望 IPMP 组具有活动-待机配置,请使用此过程。有关此类型配置的更多信息,请参阅IPMP 接口配置

Procedure如何为 IPMP 组配置待机接口

开始之前

有关配置 IPMP 组和指定测试地址的信息,请参阅如何配置具有多个接口的 IPMP 组

  1. 在要配置待机接口的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将一个接口配置为待机接口并指定测试地址。


    # ifconfig interface plumb \
    ip-address other-parameters deprecated -failover standby up
    

    待机接口只能具有一个 IP 地址,即测试地址。设置 standby up 选项之前,必须先设置 -failover 选项。对于 <other-parameters>,请使用您的配置所需的参数,如 ifconfig(1M) 手册页中所述。

    • 例如,要创建 IPv4 测试地址,可键入以下命令:


      # ifconfig hme1 plumb 192.168.85.22 netmask + broadcast + deprecated -failover standby up
      
      hme1

      hme1 定义为要配置为待机接口的物理接口。

      192.168.85.22

      将此测试地址指定给待机接口。

      deprecated

      表示测试地址不用于外发包。

      -failover

      表示在接口出现故障时测试地址不进行故障转移。

      standby

      将接口标记为待机接口。

    • 例如,要创建 IPv6 测试地址,可键入以下命令:


      # ifconfig hme1 plumb -failover standby up
      
  3. 检查待机接口配置的结果。


    # ifconfig hme1
    hme1: flags=69040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,
          STANDBY,INACTIVE mtu 1500 
             index 4 inet 192.168.85.22 netmask ffffff00 broadcast 19.16.85.255
             groupname test

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


    注 –

    通过键入 ifconfig interface 命令,始终可以查看接口的当前状态。有关查看接口状态的更多信息,请参阅如何获取有关特定接口的信息


  4. (可选)重新引导后保留 IPv4 待机接口。

    将待机接口指定给同一 IPMP 组,并为该待机接口配置测试地址。

    例如,要将 hme1 配置为待机接口,可将以下行添加到 /etc/hostname.hme1 文件:


    192.168.85.22 netmask + broadcast + deprecated group test -failover standby up 
  5. (可选)重新引导后保留 IPv6 待机接口。

    将待机接口指定给同一 IPMP 组,并为该待机接口配置测试地址。

    例如,要将 hme1 配置为待机接口,可将以下行添加到 /etc/hostname6.hme1 文件:


    -failover group test standby up

示例 31–4 为 IPMP 组配置待机接口

假定您要创建具有以下配置的测试地址:

应键入以下内容:


# ifconfig hme2 plumb 192.168.85.22 netmask + broadcast + \
deprecated -failover standby up

仅当地址标记为 NOFAILOVER 地址时,才会将接口标记为待机接口。

通过键入以下内容,可以删除接口的待机状态:


# ifconfig interface -standby

配置具有单个物理接口的 IPMP 组

如果 IPMP 组中仅有一个接口,则无法进行故障转移。但是,可以通过将接口指定给 IPMP 组对该接口启用故障检测。不必配置专用的测试 IP 地址,即可为单接口 IPMP 组建立故障检测。可以使用单个 IP 地址发送数据和检测故障。

Procedure如何配置单接口 IPMP 组

  1. 在将来具有单接口 IPMP 组的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 对于 IPv4,创建单接口 IPMP 组。

    使用以下语法将单个接口指定给 IPMP 组。


    # ifconfig interface group group-name
    

    以下示例会将接口 hme0 指定给 IPMP 组 v4test


    # ifconfig hme0 group v4test
    

    执行此步骤之后,IPMP 会对接口启用基于链路的故障检测。

    此外,还可以使用 ifconfig 命令的 -failover 子命令启用基于探测器的故障检测。以下示例通过使用当前指定给 hme0 的 IP 地址对 hme0 启用基于探测器的故障 hme0:


    # ifconfig hme0 -failover
    

    请注意,与多接口组不同,同一 IP 地址既可充当数据地址,又可充当测试地址。要让应用程序将测试地址用作数据地址,不能针对单接口 IPMP 组将测试地址标记为 deprecated

  3. 对于 IPv6,创建单接口 IPMP 组。

    使用以下语法将单个接口指定给 IPMP 组:


    # ifconfig interface inet6 group group-name
    

    例如,要将单个接口 hme0 添加到 IPMP 组 v6test 中,请键入以下内容:


    # ifconfig hme0 inet6 group v6test
    

    执行此步骤之后,IPMP 会对接口启用基于链路的故障检测。

    此外,还可以使用 ifconfig 命令的 -failover 子命令启用基于探测器的故障检测。以下示例通过使用当前指定给 hme0 的 IP 地址对 hme0 启用基于探测器的故障 hme0:


    # ifconfig hme0 inet6 -failover
    

    请注意,与多接口组不同,同一 IP 地址既可充当数据地址,又可充当测试地址。要让应用程序将测试地址用作数据地址,不能针对单接口 IPMP 组将测试地址标记为 deprecated

    在单物理接口配置中,无法检验所探测的目标系统是否已出现故障或者接口是否已出现故障。仅可以通过一个物理接口来探测目标系统。如果子网中仅有一个缺省路由器,则当组中仅有一个物理接口时,关闭 IPMP。如果存在单独的 IPv4 和 IPv6 缺省路由器,或者存在多个缺省路由器,则需要探测多个目标系统。因此,可以安全地打开 IPMP。

维护 IPMP 组

本节包含维护现有 IPMP 组以及组成这些组的接口的任务。这些任务假定已按配置 IPMP 组中的说明配置了 IPMP 组。

Procedure如何显示接口的 IPMP 组成员关系

  1. 在具有 IPMP 组配置的系统上,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 显示有关接口的信息,包括接口所属的组。


    # ifconfig interface
    
  3. 如果适用,请显示接口的 IPv6 信息。


    # ifconfig interface inet6
    

示例 31–5 显示物理接口组

要显示 hme0 的组名,可键入以下内容:


# ifconfig hme0
	hme0: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 
      index 2 inet 192.168.85.19 netmask ffffff00 broadcast 192.168.85.255
      groupname testgroup1

要显示仅用于 IPv6 信息的组名,可键入以下内容:


# ifconfig hme0 inet6
	hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
        	inet6 fe80::a00:20ff:feb9:19fa/10 
        	groupname testgroup1

Procedure如何将接口添加到 IPMP 组

  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将接口添加到 IPMP 组。


    # ifconfig interface group group-name
    

    interface 中指定的接口会成为 IPMP 组 group-name 的成员。


示例 31–6 将接口添加到 IPMP 组

要将 hme0 添加到 IPMP 组 testgroup2,可键入以下命令:


# ifconfig hme0 group testgroup2
  hme0: flags=9000843<UP ,BROADCAST,RUNNING,MULTICAST,IPv4,NOFAILOVER> mtu 1500 index 2
  inet 192.168.85.19 netmask ff000000 broadcast 10.255.255.255
  groupname testgroup2
  ether 8:0:20:c1:8b:c3 

Procedure如何从 IPMP 组中删除接口

执行 ifconfig 命令的包含空字符串的 group 参数时,将从接口的当前 IPMP 组中删除该接口。从组中删除接口时请务必谨慎。如果 IPMP 组中的其他某个接口出现故障,则故障转移可能会提早发生。例如,如果 hme0 以前出现过故障,则当 hme1 位于同一组中时,所有地址都将故障转移到 hme1。从组中删除 hme1 会导致 in.mpathd 守护进程将所有故障转移地址返回到组中的其他某个接口。如果组中的其他接口都未运行,则故障转移可能无法恢复所有网络访问。

同样,需要取消检测组中的某个接口时,应首先从组中删除该接口。然后,确保该接口已配置了所有的初始 IP 地址。in.mpathd 守护进程会尝试恢复从组中删除的接口的初始配置。您需要确保在取消检测接口之前恢复配置。请参阅接口故障转移期间发生的情况以了解接口在故障转移前后的外观。

  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 从 IPMP 组中删除接口。


    # ifconfig interface group ""

    引号表示空字符串。


示例 31–7 从组中删除接口

要从 IPMP 组 test 中删除 hme0,可键入以下命令:


# ifconfig hme0 group ""
	# ifconfig hme0
	hme0: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500
    index 2 inet 192.168.85.19 netmask ffffff00 broadcast 192.168.85.255
	# ifconfig hme0 inet6
	hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
    inet6 fe80::a00:20ff:feb9:19fa/10 

Procedure如何将接口从一个 IPMP 组移动到另一个组

如果某个接口属于现有的 IPMP 组,则可以将该接口放入新的 IPMP 组中。无需从当前 IPMP 组中删除该接口。接口放入新组中后,该接口将自动从任何现有的 IPMP 组中删除。

  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将接口移动到新的 IPMP 组。


    # ifconfig interface group group-name
    

    如果将接口放入新组中,则会自动从任何现有组中删除该接口。


示例 31–8 将接口移动到其他 IPMP 组

要更改接口 hme0 的 IPMP 组,应键入以下内容:


# ifconfig hme0 group cs-link

此命令会从 IPMP 组 test 中删除 hme0 接口,然后将其放入组 cs-link 中。


在支持动态重新配置的系统上替换出现故障的物理接口

本节包含与管理支持动态重新配置 (dynamic reconfiguration, DR) 的系统有关的过程。


注 –

这些任务仅与使用 ifconfig 命令配置的 IP 层有关。如果 IP 层前后的层(如 ATM 或其他服务)未自动化,则它们需要使用特定的手动步骤。以下过程中的步骤用于在预分离过程中取消配置接口以及在连接之后配置接口。


Procedure如何删除出现故障的物理接口(DR 分离)

此过程说明如何在支持 DR 的系统上删除物理接口。该过程假设已具备以下条件:


注 –

如果测试地址是使用 /etc/hostname.hme0 文件检测的,则可以跳过步骤 2。


  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 显示测试地址配置。


    # ifconfig hme0:1
    
    hme0:1:
    flags=9040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
    mtu 1500 index 3
    inet 192.168.233.250 netmask ffffff00 broadcast 192.168.233.255

    替换物理接口时,需要使用此信息重新检测测试地址。

  3. 删除物理接口。

    有关如何删除物理接口的完整说明,请参阅以下资料:

    • cfgadm(1M) 手册页

    • Sun Enterprise 6x00, 5x00, 4x00, and 3x00 Systems Dynamic Reconfiguration User's Guide

    • Sun Enterprise 10000 DR 配置指南

Procedure如何替换出现故障的物理接口(DR 连接)

此过程说明如何在支持 DR 的系统上替换物理接口。

  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 替换物理接口。

    请参阅以下资料中的说明:

    • cfgadm(1M) 手册页

    • Sun Enterprise 6x00, 5x00, 4x00, and 3x00 Systems Dynamic Reconfiguration User's Guide

    • 《Sun Enterprise 10000 DR 配置指南》《Sun Fire 880 Dynamic Reconfiguration User's Guide》

恢复系统引导时不存在的物理接口


注 –

以下过程仅与使用 ifconfig 命令配置的 IP 层有关。如果 IP 层前后的层(如 ATM 或其他服务)未自动化,则它们需要使用特定的手动步骤。以下过程中的特定步骤用于在预分离过程中取消配置接口以及在连接之后配置接口。


对于位于 Sun Fire™ 平台的 I/O 板上的接口,动态重新配置后的恢复是自动进行的。如果 NIC 是 Sun Crypto 加速器 I - cPCI 板,则恢复也是自动进行的。因此,对于在 DR 操作过程中恢复的接口,不需要执行以下步骤。有关 Sun Fire x800 和 Sun Fire 15000 系统的更多信息,请参见 cfgadm_sbd(1M) 手册页。物理接口将故障恢复到在 /etc/hostname. interface 文件中指定的配置。有关如何将接口配置为在重新引导后保留配置的详细信息,请参见配置 IPMP 组


注 –

在 Sun Fire 传统 (Exx00) 系统上,DR 分离仍须手动进行。但是,DR 连接是自动进行的。


Procedure如何恢复系统引导时不存在的物理接口

恢复系统引导时不存在的物理接口之前,必须完成以下过程。此过程中的示例具有以下配置:


注 –

在恢复出现故障的物理接口的过程中,IP 地址的故障恢复需要长达三分钟。此时间可能会随网络通信流量的不同而不同。此时间还取决于通过 in.mpathd 守护进程对故障转移的接口进行故障恢复的传入接口的稳定性。


  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 从控制台日志的故障错误消息中检索故障网络的信息。

    请参见 syslog(3C) 手册页。错误消息可能与以下内容类似:


    moving addresses from failed IPv4 interfaces:
    hme1 (moved to hme0)

    此消息表示故障接口 hme1 上的 IPv4 地址已故障转移到 hme0 接口。

    或者,可能收到以下类似消息:


    moving addresses from failed IPv4 interfaces:
    hme1 (couldn't move, no alternative interface)

    此消息表示在故障接口 hme1 所在的组中无法找到活动接口。因此,hme1 上的 IPv4 地址无法故障转移。

  3. 将物理接口连接到系统。

    有关如何替换物理接口的说明,请参阅以下内容:

    • cfgadm(1M) 手册页

    • Sun Enterprise 10000 DR 配置指南

    • Sun Enterprise 6x00, 5x00, 4x00, and 3x00 Systems Dynamic Reconfiguration User's Guide

  4. 请参阅步骤 2 中的消息内容。如果无法移动地址,请转到步骤 6。如果地址已移动,请继续执行步骤 5。

  5. 取消检测在故障转移过程中配置的逻辑接口。

    1. 查看 /etc/hostname. moved-from-interface 文件的内容,确定哪些逻辑接口已在故障转移过程中配置。

    2. 取消检测每个故障转移 IP 地址。


      # ifconfig moved-to-interface removeif moved-ip-address
      

      注 –

      故障转移地址标记有 failover 参数,或者未标记有 -failover 参数。无需对标记有 -failover 的 IP 地址取消检测。


      例如,假定 /etc/hostname.hme0 文件的内容包含以下行:


      inet 10.0.0.4 -failover up group one
      addif 10.0.0.5 failover up
      addif 10.0.0.6 failover up

      要取消检测每个故障转移 IP 地址,可键入以下命令:


      # ifconfig hme0 removeif 10.0.0.5
      # ifconfig hme0 removeif 10.0.0.6
  6. 通过对已删除的每个接口键入以下命令,为已替换的物理接口重新配置 IPv4 信息:


    # ifconfig removed-from-NIC <parameters>

    例如,可键入以下命令:


    # ifconfig hme1 inet plumb
    # ifconfig hme1 inet 10.0.0.4 -failover up group one
    # ifconfig hme1 addif 10.0.0.5 failover up
    # ifconfig hme1 addif 10.0.0.6 failover up

修改 IPMP 配置

使用 IPMP 配置文件 /etc/default/mpathd 为 IPMP 组配置以下系统范围的参数。

Procedure如何配置 /etc/default/mpathd 文件

  1. 在具有 IPMP 组配置的系统上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/default/mpathd 文件。

    更改这三个参数中的一个或多个参数的缺省值。

    1. FAILURE_DETECTION_TIME 参数键入新值。


      FAILURE_DETECTION_TIME=n
      

      其中 n 是 ICMP 探测器用来检测是否发生接口故障的时间(以秒为单位)。缺省值是 10 秒。

    2. FAILBACK 参数键入新值。


      FAILBACK=[yes | no]
      • yesyes 值是 IPMP 的缺省故障恢复行为。当检测到故障接口修复时,网络访问故障恢复到已修复的接口,如IPMP 故障检测和恢复功能中所述。

      • nono 指示数据通信不会移回已修复的接口。当检测到某个故障接口已修复时,会为此接口设置 INACTIVE 标志。此标志表示该接口当前不用于数据通信,但该接口仍可用于探测器通信。

        例如,假设 IPMP 组由两个接口 ce0 和 ce1 组成。然后假定在 /etc/default/mpathd 中设置了值 FAILBACK=no。如果 ce0 出现故障,它的通信将会故障转移至 ce1,这是 IPMP 的预期行为。但是,当 IPMP 检测到 ce0 已修复时,通信不会从 ce1 进行故障恢复,这是因为在 /etc/default/mpathd 中设置了参数 FAILBACK=no。ce0 接口保持 INACTIVE 状态并且不用于通信,除非 ce1 接口出现故障。如果 ce1 接口出现故障, ce1 上的地址会迁移回 ce0,其 INACTIVE 标志也随之被清除。发生此迁移的前提条件是 ce0 是该组中唯一的 INACTIVE 接口。如果该组中存在其他的 INACTIVE 接口,这些地址可能会迁移到 ce0 以外的 INACTIVE 接口。

    3. TRACK_INTERFACES_ONLY_WITH_GROUPS 参数键入新值。


      TRACK_INTERFACES_ONLY_WITH_GROUPS=[yes | no]
      • yesyes 值是 IPMP 的缺省行为。此参数使 IPMP 忽略未配置到 IPMP 组中的网络接口。

      • nono 值为所有网络接口设置故障和修复检测,无论它们是否配置到 IPMP 组中。但是,如果在未配置到 IPMP 组中的接口上检测到故障或修复,不会发生故障转移或故障恢复。因此,no 值仅用于报告故障,并不能直接提高网络可用性。

  3. 重新启动 in.mpathd 守护进程。


    # pkill -HUP in.mpathd