| 中国 |
|
|
|
![]() |
使用 ServiceGuard OPS Edition 配置 OPS 群集 > 第 3 章 了解 ServiceGuard OPS Edition 的软件组件程序包控制脚本如何工作 |
|
ServiceGuard 使用程序包启动和暂停已配置好的应用程序。程序包也是 ServiceGuard 中的故障切换行为单元。一个程序包就是服务、磁盘卷和 IP 地址的一个集合,该集合由 ServiceGuard 进行管理,以确保它们的可用性。每个群集最多可有 60 个程序包,服务总数可达 900 个。 一个程序包启动的条件是:当前它未在运行,并且程序包管理器判断出群集中一个合格的节点上已启用该程序包。如果在几个节点上都启用了某个程序包,程序包管理器将使用故障切换策略决定在哪个节点启动程序包。注意,您不一定必须执行 cmrunpkg 命令。在很多情况下,用于在一个或多个节点上启用程序包的 cmmodpkg 命令是启动程序包的最佳方法。 程序包管理器将尝试始终使程序包保持运行,除非有某些因素阻止程序包在任何节点上运行。程序包无法运行的最常见的原因是 AUTO_RUN 已被禁用,或者在特定节点上禁用了程序包的 NODE_SWITCHING。当一个程序包在某个节点上出现故障,而在另一个节点上被启用时,它将自动在新的位置上启动。此过程称为程序包切换,也称为远程切换。 在创建程序包时,应指定程序包可运行的节点列表。一个标准的程序包一次只能在一个节点上运行,它将运行在节点列表中的下一个可用节点上。如果 AUTO_RUN 参数设置为 YES,则程序包就可以在群集启动时自动启动。反之,AUTO_RUN 设置为 NO 的程序包将不会在群集启动时自动启动;您必须通过执行 cmmodpkg 命令明确启用此类程序包。
程序包如何启动,以及它在运行时的行为如何?程序包的生命周期划分为多个阶段,图 3-13 显示了其中的一部分。 下面是程序包在生命周期中最重要的时刻:
首先选择节点。此节点必须在程序包的节点列表中,它必须符合程序包的故障切换策略,且程序包所需的任何资源都必须在此选定的节点上可用。资源之一是为程序包监视的子网。如果子网不可用,程序包就不会在此节点上启动。另一种资源是与受监视的外部资源相关联的附属件。如果监视结果显示某个已配置资源的值超出了允许的范围,程序包也不会启动。 一旦选定了节点,就会对该节点进行检查,以确保程序包可以在其上启动。然后选定的节点上的控制脚本启动程序包的服务。严格说来,是使用选定节点上的运行脚本来启动程序包。 一旦程序包管理器确定程序包可在某个特定节点上启动,它就会启动运行脚本(即使用“start”参数执行控制脚本。)此脚本执行下列步骤(另见图 3-14 “执行运行脚本的程序包时间轴”):
整个过程中的任何一步出现错误都将导致脚本异常退出(退出代码为 1)。例如,如果程序包服务无法启动,控制脚本将因错误而退出。 另外,如果运行脚本在 RUN_SCRIPT_TIMEOUT 中指定的时间之前未执行完毕,程序包管理器将终止该脚本。在运行脚本的执行过程中,消息将写入运行脚本所在目录下的日志文件中。此日志的文件名与运行脚本名相同,扩展名为 .log。正常启动以及与启动程序包相关的错误消息或警告都将记录在此日志中。
退出运行脚本时的退出代码决定对程序包的下一步操作。正常退出意味着程序包成功启动,但其他的退出都意味着启动操作没有成功地完成。
在程序包控制脚本中,cmrunserv 命令可启动各个服务。此命令将针对编入文件中的每个服务都执行一次。可为每个服务指定相应的重新启动次数。cmrunserv 命令将把此数传递给程序包管理器,如果服务发生故障,程序包管理器则将使服务重新启动相应的次数。下面是一些典型设置:
在群集服务的正常运行过程中,程序包管理器将持续不断地监视下列事项:
某些故障可能导致本地切换。例如,如果某个局域网卡出现故障,且该子网还配备了一个备用 LAN,则网络管理器将切换到运行正常的局域网卡。如果某个服务出现故障,但是该服务的 RESTART 参数已设置为大于 0 的值,则服务将重新启动,而不会暂停程序包,但服务重新启动的次数不能超过配置的次数。 如果存在已配置好的 EMS 资源附属件,且存在可引发事件的触发器,则程序包将暂停。 在正常操作中,当所有的服务都在运行时,可以在 cmviewcl 命令输出的“Script Parameters”部分显示服务的状态。 当出现故障时会发生什么?如果某个服务发生故障且没有重新启动,如果某个子网发生故障且没有备用子网,或者如果已配置好的资源发生故障,程序包将在其当前节点上暂停,并且可能在另一个节点上重新启动(取决于程序包切换标志的设置)。 暂停程序包通常是指执行程序包暂停脚本(请参阅下一节)。但是如果发生故障的服务的 SERVICE_FAILFAST_ENABLED 设置为 Yes,则节点将在检测到故障后立即暂停。如果未设置此标志,则服务发生故障将导致暂停脚本的运行,从而以正常方式暂停程序包。 如果 AUTO_RUN 设置为 YES,则如果另一个符合条件的节点满足启动的所有要求,程序包将在该节点上启动。如果 AUTO_RUN 设置为 NO,则程序包仅仅是暂停,而不会在任其他节点上启动。
ServiceGuard 的 cmhaltpkg 命令可以执行程序包暂停脚本,而该脚本将暂停特定程序包的运行服务。这样可以使程序包以正常方式关闭,并在这之后禁止程序包切换到其他节点上。
cmmodpkg 命令不能用于暂停程序包,但它可以禁止在特定节点或所有节点之间进行切换。当程序包的切换被禁用时,它可以继续运行,但如果程序包在当前节点上停止运行,则它将无法在其他节点上启动。 一旦程序包管理器检测到服务故障,或已对特定程序包执行 cmhaltpkg 命令时,就会启动暂停脚本(即使用“halt”参数执行控制脚本)。此脚本执行下列步骤(也可见图 3-15 “执行暂停脚本的程序包时间轴”):
整个过程中的任何一步出现错误都将导致脚本异常退出(退出代码为 1)。另外,如果暂停脚本未在 HALT_SCRIPT_TIMEOUT 中指定的时间之前执行完毕,程序包管理器将终止脚本。在暂停脚本的执行过程中,消息将写入暂停脚本所在目录下的日志文件中。此日志的文件名与暂停脚本名相同,扩展名为 .log。正常启动以及与暂停程序包相关的错误消息或警告都将记录在此日志中。 程序包可移动到其他节点上的能力受暂停脚本结束时退出情况的影响。下面是可能的退出代码:
表 3-1 显示故障切换程序包的错误情况、故障快速转移设置和程序包移动等因素的各种可能的组合。 表 3-4 错误情况和程序包移动
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||