测试 IPMP 故障转移
我们可以使用 if_mpadm 命令非常轻松地检查接口的故障和修复。
"-d" 分离接口,而 "-r" 重新连接它。
# if_mpadm -d ce0 # if_mpadm -r ce0
什么是基于探针的 IPMP?
in.mpathd 守护程序使用的故障检测方法将 IPMP 区分为基于探针或者基于链接。
基于探测的 IPMP 在其配置中使用两种类型的地址。
测试地址 - 由 in.mpathd 守护程序用于检测故障(也称为探测地址)。
数据地址——由应用程序用于实际数据传输。
在基于探针的 IPMP 的情况下:
-in.mpathd 守护进程在测试地址上向同一子网上的一个或者多个目标系统发送 ICMP 探测消息。
-in.mpathd 守护进程确定可用的目标系统进行动态探测。
它使用“所有主机”多播 (224.0.0.1) 地址来确定要探测的目标系统。
目标系统示例:
同一子网上的所有默认路由。
同一子网上的所有主机路由。
(用“route -p add”命令配置)
- 所有测试地址应该在同一个子网中。
标志的含义
我们会在“ifconfig -a”命令的输出中看到诸如 NOFAILOVER、DEPRECATED、STANDBY 等标志。
这些标志和启用它们的参数的含义是:
deprecated -> 只能用作 IPMP 的测试地址,不能用于应用程序的任何实际数据传输。
-failover -> 在接口出现故障时不会进行故障转移
备用 -> 使接口用作备用
最常用的基于探针的 IPMP 配置
1.主动主动配置
Groupname: ipmp0 Active interface(s): e1000g0 e1000g1 Standby interface(s): Data IP addresse(s): 192.168.1.2 Test IP addresse(s): 192.168.1.3 192.168.1.4
命令行 :
# ifconfig e1000g0 plumb 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up # ifconfig e1000g1 plumb 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 up
要确保在重新启动后的持久配置,请编辑文件:
/etc/hostname.e1000g0: 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up /etc/hostname.e1000g1: 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 up
失败前:
# ifconfig -a lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 e1000g0: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 9 inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:67 e1000g0:1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 9 inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255 e1000g1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 10 inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:71
失败后:
# ifconfig -a lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 e1000g0: flags=19000802[BROADCAST,MULTICAST,IPv4,NOFAILOVER,FAILED] mtu 0 index 9 inet 0.0.0.0 netmask 0 groupname ipmp0 ether 0:c:29:f6:ef:67 e1000g0:1: flags=19040803[UP,BROADCAST,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,FAILED] mtu 1500 index 9 inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255 e1000g1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 10 inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:71 e1000g1:1: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 10 inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255
- 主备
主备配置的唯一区别是配置为备用的接口不用于发送任何出站流量。
从而禁用主动-主动配置的负载平衡功能。
Groupname: ipmp0 Active interface(s): e1000g0 Standby interface(s): e1000g1 Data IP addresse(s): 192.168.1.2 Test IP addresse(s): 192.168.1.3 192.168.1.4
命令行 :
# ifconfig e1000g0 plumb 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up # ifconfig e1000g1 plumb 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 standby up
要确保在重新启动后的持久配置,请编辑文件:
/etc/hostname.e1000g0: 192.168.1.2 netmask + broadcast + group ipmp0 up addif 192.168.1.3 netmask + broadcast + deprecated -failover up /etc/hostname.e1000g1: 192.168.1.4 netmask + broadcast + deprecated -failover group ipmp0 standby up
失败前:
# ifconfig -a lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 e1000g0: flags=1000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4] mtu 1500 index 11 inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:67 e1000g0:1: flags=9040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER] mtu 1500 index 11 inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255 e1000g1: flags=69040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY,INACTIVE] mtu 1500 index 12 inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:71
失败后:
# ifconfig -a lo0: flags=2001000849[UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL] mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 e1000g0: flags=19000802[BROADCAST,MULTICAST,IPv4,NOFAILOVER,FAILED] mtu 0 index 11 inet 0.0.0.0 netmask 0 groupname ipmp0 ether 0:c:29:f6:ef:67 e1000g0:1: flags=19040803[UP,BROADCAST,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,FAILED] mtu 1500 index 11 inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255 e1000g1: flags=29040843[UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY] mtu 1500 index 12 inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255 groupname ipmp0 ether 0:c:29:f6:ef:71 e1000g1:1: flags=21000843[UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY] mtu 1500 index 12 inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255
故障检测和维修检测时间
探测速率取决于 /etc/default/mpathd 配置文件中设置的 FAILURE_DETECTION_TIME(默认值为 10 秒)。
in.mpathd 每 10 秒发送 5 个探测(或者 FAILURE_DETECTION_TIME 设置)。
如果连续 5 次探测失败,则 in.mpathd 认为接口失败。
最小修复检测时间是故障检测时间的两倍。
因此,如果故障检测时间为 10 秒,则修复检测时间将为 20 秒(10 个探针)。
mpathd 配置文件
mpathd 守护进程负责检测接口故障。
它使用配置文件 /etc/default/mpathd 来设置各种 IPMP 参数。
# cat /etc/default/mpathd # #pragma ident "@(#)mpathd.dfl 1.2 00/07/17 SMI" # # Time taken by mpathd to detect a NIC failure in ms. The minimum time # that can be specified is 100 ms. # FAILURE_DETECTION_TIME=10000 # # Failback is enabled by default. To disable failback turn off this option # FAILBACK=yes # # By default only interfaces configured as part of multipathing groups # are tracked. Turn off this option to track all network interfaces # on the system # TRACK_INTERFACES_ONLY_WITH_GROUPS=yes
mpathd 配置文件中的重要参数是:
- FAILURE_DETECTION_TIME : mpathd 检测 NIC 故障所用的时间(以毫秒为单位)(默认值 10 秒)
- FAILBACK : 在故障链接可用后启用或者禁用故障回复(默认值是)
- TRACK_INTERFACES_ONLY_WITH_GROUPS 如果打开接口配置为 IPMP 的一部分只被监控(默认值是)
in.mpathd 守护进程重新读取配置文件的命令是:
# pkill -HUP in.mpathd