ILB 提供了以下可选类型的服务器运行状况检查:
内置的 ping 探测器
内置的 TCP 探测器
内置的 UDP 探测器
用户提供的可作为运行状况检查运行的定制测试
缺省情况下,ILB 不会执行任何运行状况检查。您可以在创建负载平衡规则时为每个服务器组指定运行状况检查。对于每个负载平衡规则,只能配置一个运行状况检查。只要启用了虚拟服务,与启用的虚拟服务关联的服务器组的运行状况检查就会自动启动并定期重复执行。禁用虚拟服务后,运行状况检查将立即停止。重新启用虚拟服务后,先前的运行状况检查状态将不会保留。
如果您指定了 TCP、UDP 或定制测试探测器来执行运行状况检查,则 ILB 缺省情况下会先发送 ping 探测器以确定服务器是否可以访问,然后再向该服务器发送指定的 TCP、UDP 或定制测试探测器。如果 ping 探测器失败,则会禁用相应的服务器,并且运行状况检查状态为 unreachable。如果 ping 探测器成功,但 TCP、UDP 或定制测试探测器失败,则会禁用服务器,并且运行状况检查状态为 dead。
您可以禁用缺省的 ping 探测器,但 UDP 探测器除外。对于 UDP 运行状况检查,ping 探测器始终是缺省探测器。
您可以创建运行状况检查,并在创建负载平衡规则时为服务器组分配运行状况检查。在以下示例中,创建了两个运行状况检查对象 hc1 和 hc-myscript。第一个运行状况检查使用内置的 TCP 探测器。第二个运行状况检查使用定制测试 /var/tmp/my-script。
# ilbadm create-healthcheck -h hc-timeout=3,\ hc-count=2,hc-interval=8,hc-test=tcp hc1 # ilbadm create-healthcheck -h hc-timeout=3,\ hc-count=2,hc-interval=8,hc-test=/var/tmp/my-script hc-myscript
参数如下所示:
指定将运行状况检查视为失败(如果未完成)时的超时。
指定尝试执行 hc-test 运行状况检查的次数。
指定连续的运行状况检查之间的间隔。为了避免将探测器同时发送到所有服务器,将会随机生成介于 0.5 * hc-interval 和 1.5 * hc-interval 之间的实际间隔。
指定运行状况检查的类型。您可以指定内置运行状况检查(例如 tcp、udp 和 ping),也可以指定外部运行状况检查(必须以完整的路径名指定)。
测试可位于系统上的任何位置。使用 create-healthcheck 子命令时,您必须指定绝对路径。
在 create-rule 子命令中将测试(例如,/var/tmp/my-script)指定为运行状况检查规范的一部分时,ilbd 守护进程将派生一个进程并执行测试,如下所示:
/var/tmp/my-script $1 $2 $3 $4 $5
参数如下所示:
VIP(数值 IPv4 或 IPv6 地址)
服务器 IP(数值 IPv4 或 IPv6 地址)
协议(字符串形式的 UDP、TCP)
数字端口范围(用户指定的 hc-port 值)
测试在返回失败之前必须等待的最长时间(秒)。如果测试运行超出了指定的时间,则可能会停止测试并认为测试失败。该值是用户定义的并在 hc-timeout 中指定。
用户提供的测试无需使用所有参数,但是必须返回以下几项之一:
往返时间 (round-trip time, RTT)(微秒)
0(如果测试不计算 RTT)
-1(失败)
缺省情况下,运行状况检查测试使用以下特权运行:PRIV_PROC_FORK、RIV_PROC_EXEC 和 RIV_NET_ICMPACCESS。
如果需要更广泛的特权集,则必须在测试中实现 setuid。有关特权的更多详细信息,请参见 privileges(5) 手册页。
要获取有关已配置运行状况检查的详细信息,请发出以下命令:
# ilbadm show-healthcheck HCNAME TIMEOUT COUNT INTERVAL DEF_PING TEST hc1 3 2 8 Y tcp hc2 3 2 8 N /var/usr-script
您可以使用 ilbadm list-hc-result 命令获取运行状况检查结果。如果未指定规则或运行状况检查,该子命令将列出所有运行状况检查。
以下示例将显示与称为 rule1 的规则关联的运行状况检查结果。
# ilbadm show-hc-result rule1 RULENAME HCNAME SERVERID STATUS FAIL LAST NEXT RTT rule1 hc1 _sg1:0 dead 10 11:01:19 11:01:27 941 rule1 hc1 _sg1:1 alive 0 11:01:20 11:01:34 1111
输出中的 LAST 列显示完成服务器运行状况检查的时间。NEXT 列显示将要完成下一次运行状况检查的时间。
您可以使用 ilbadm delete-healthcheck 命令删除运行状况检查。以下示例将删除名为 hc1 的运行状况检查。
# ilbadm delete-healthcheck hc1