跳到内容 中国
HP.com 主页 产品与服务 支持及驱动程序 解决方案 如何购买
» 联系惠普
更多选项
HP.com 主页
管理 MC/ServiceGuard > 第 3 章 了解 MC/ServiceGuard 软件组件

程序包控制脚本如何工作

» 

技术文档资料

完整的 PDF 手册
» 反馈
内容从此开始:

 » 目录

 » 索引

程序包是 ServiceGuard 启动和暂停已配置好的应用程序的方式。程序包也是 ServiceGuard 中的故障切换行为单元。一个程序包就是服务、磁盘卷和 IP 地址的一个聚合,由 ServiceGuard 进行管理,以确保它们的可用性。每一群集最多可有 60 个程序包,每个群集的服务总数可达 900 个。

是什么可以使程序包运行?

一个程序包启动的条件是:当前它没在运行,程序包管理器发现它已在群集中一个合格的节点上启用。如果程序包在几个节点上启用了,程序包管理器将使用故障切换策略决定在哪个节点启动程序包。注意,您不一定非得用 cmrunpkg 命令。在很多情况下,可在一个或多个节点上启用程序包的 cmmodpkg 命令是启动程序包的最佳方法。

程序包管理器将尝试始终使程序包保持运行,除非有某些因素阻止程序包在某一节点上运行。程序包无法运行的最常见的原因是 AUTO_RUN 已被禁用,或者 NODE_SWITCHING 已对特定节点上的程序包禁用。当一个程序包在某个节点上出现故障,而在另一个节点上被启用时,它将自动在新的位置上启动。此过程称为程序包切换,或称为远程切换

当您在创建程序包时,您可提供程序包可以在其上运行的节点的列表。一个标准的程序包一次只能在一个节点上运行,它将运行在节点列表中的下一个可用节点上。如果 AUTO_RUN 参数设置为 YES,则程序包就可以自动在群集启动时启动。反之,AUTO_RUN 设置为 NO 的程序包将不会在群集启动时自动启动;您必须确切地用 cmmodpkg 命令启用此类程序包。

注释:如果在群集运行时配置程序包,程序包在 cmapplyconf 命令结束后不会立即启动。如要不经过暂停和重新启动群集就启动程序包,您必须发出 cmrunpkgcmmodpkg 命令。

程序包如何启动?它在运行时表现如何?程序包的生命周期有许多阶段,图 3-13 “显示重要事件的程序包时间线” 中所示为其中一部分。

图 3-13 显示重要事件的程序包时间线

显示重要事件的程序包时间线

下面是程序包的生命周期中最重要的一些时刻:

  1. 控制脚本启动之前

  2. 运行脚本执行过程中

  3. 服务正在运行时

  4. 服务、子网或受监视的资源出现故障时

  5. 暂停脚本执行过程中

  6. 使用命令暂停程序包或节点时

  7. 节点出现故障时

控制脚本启动之前

首先必须选定节点。此节点必须在程序包的节点列表中,它必须符合程序包的故障切换策略,且程序包所需的任何资源都必须在此选定的节点上可用。资源之一是为程序包而监视的子网。如果该子网不可用,则程序包无法在此节点上启动。另一种资源是受监视的外部资源上的附属件。如果监视显示某个已配置资源的值超出允许的范围,则程序包将无法启动。

一旦选定了节点,就会对该节点进行检查,以确保程序包可以在其上启动。然后将由控制脚本在选定的节点上为程序包启动服务。严格说来,选定节点上的运行脚本用于启动程序包。

运行脚本执行过程中

一旦程序包管理器确定程序包可在哪个特定节点上启动,它就启动运行脚本(即,使用 ‘start’ 参数执行的控制脚本)。此脚本可执行下列步骤(在图 3-14 “执行运行脚本的程序包时间线” 中也有显示):

  1. 激活卷组或磁盘组。

  2. 安装文件系统。

  3. 将程序包 IP 地址指定给节点上的 LAN 卡。

  4. 执行任何由客户定义的运行命令。

  5. 启动每个程序包服务。

  6. 启动程序包所需的任何已特别标记为延迟启动的资源。

  7. 在退出代码为零 (0) 时退出。

图 3-14 执行运行脚本的程序包时间线

执行运行脚本的程序包时间线

整个过程中的任何一步出现错误都将导致脚本异常退出(退出代码为 1)。例如,如果程序包服务无法启动,控制脚本将因错误而退出。

另外,如果在 RUN_SCRIPT_TIMEOUT 中指定的时间到来之前运行脚本的执行过程尚未完成,则程序包管理器将终止该脚本。在运行脚本的执行过程中,消息将写入与运行脚本相同的目录下的日志文件中。此日志的文件名与运行脚本相同,扩展名为 .log。正常启动以及与启动程序包相关的错误消息或警告都将记录在此日志中。

注释:程序包的运行脚本完成其工作后就将退出,即一旦程序包运行正常,运行脚本就将不再运行。脚本退出后,由其启动的服务的 PID 将由程序包管理器直接监视。如果服务停止,程序包管理器则将运行程序包暂停脚本,或者如果 SERVICE_FAILFAST_ENABLED 设置为 YES,程序包管理器将暂停有程序包在运行的节点。如果在程序包脚本中对某个服务指定了大量的 Restart,则如果重新启动计数允许的话,该服务将不经过重新运行程序包运行脚本而重新启动。

从运行脚本中的正常和不正常退出

退出运行脚本时的退出代码决定程序包下一步将发生什么。正常退出意味着程序包成功启动,但其他所有的退出都意味着启动操作没有成功地完成。

  • 0 — 正常退出。程序包正常启动,因此此节点上的所有服务都已启动。

  • 1 — 异常退出,也称为 NO_RESTART 退出。程序包没有正常地完成所有启动步骤。服务被终止,且程序包被禁止故障切换到其他节点。

  • 2 — 备选退出,也称为 RESTART 退出。存在错误,但程序包可以在另一个节点上启动。在存在错误,但可以成功地在另一个节点上启动程序包时,您可以通过客户定义的过程使用这种退出。有 RESTART 退出的程序包不能在本地节点上运行,但仍可以在其他节点上运行。

  • Timeout — 另一种类型的退出,在超出 RUN_SCRIPT_TIMEOUT 时发生。在这种情形下,程序包被终止,并全局性地禁用。但是它不会在当前节点上禁用。

cmrunserv 启动服务

在程序包控制脚本中,cmrunserv 命令可启动各个服务。此命令将对编码在文件中的每个服务都执行一次。每个服务都有大量的重新启动与之相关联。cmrunserv 命令将把此数目传递给程序包管理器,如果服务发生故障,程序包管理器则将使服务重新启动相应的次数。下面是一些典型设置:

SERVICE_RESTART[0]=" "        ; do not restart
SERVICE_RESTART[0]="-r <n>"   ; restart as many as <n> times
SERVICE_RESTART[0]="-R"       ; restart indefinitely
注释:如果您设置了 <n> 次重新启动,并将 SERVICE_FAILFAST_ENABLED 设置为 YES,则在 <n> 次重新启动的尝试失败后,将发生故障快速转移。对于某一服务而言,将 SERVICE_RESTART 设为“-R”,并将 SERVICE_FAILFAST_ENABLED 设为 YES没有意义的。

服务正在运行时

在群集服务的正常运行过程中,程序包管理器将持续不断地监视下列事项:

  • 服务的进程 ID

  • 程序包配置文件中配置好用于监视的子网

  • 已配置好的,程序包所依赖的资源

某些故障可能导致本地切换。例如,如果特定的 LAN 卡上出现故障,且该子网还配置了一个备用 LAN 卡,则网络管理器将切换到健康的 LAN 卡。如果有服务出现故障,但是该服务的 RESTART 参数已设置为大于 0 的值,则服务将重新启动而不会暂停程序包,最多可重新启动已配置好的重新启动次数。

如果存在已配置好的 EMS 资源附属件,且存在可引起事件的触发器,则程序包将暂停。

在正常操作中,当所有的服务都在运行时,您可以在 cmviewcl 命令输出的“Script Parameters”节中看到服务的状态。

服务、子网或受监视的资源出现故障时

当某些事物出现错误时会发生什么?如果某个服务发生故障且不再能重新启动,如果某个子网发生故障且没有备用子网,或者如果已配置好的资源发生故障,程序包将在其当前节点上暂停,并且可能在另一个节点上重新启动(取决于程序包切换标志的设置)。

程序包的暂停通常是指程序包暂停脚本的执行(请参见下一节)。但是如果发生故障的服务的 SERVICE_FAILFAST_ENABLED 设置为了 yes,则节点将在检测到故障后立即暂停。如果此标志未设置,则服务丢失的结果将是通过运行暂停脚本从容地暂停程序包。

如果 AUTO_RUN 设置为 YES,则如果另一个符合条件的节点满足启动的所有要求,程序包将在该节点上启动。如果 AUTO_RUN 设置为 NO,则程序包仅仅是暂停,而不会在任何别的地方启动。

注释:如果程序包依赖子网,且主节点上的子网出现故障,则该程序包将会开始关闭。如果该节点(于程序包在代管节点上重新启动前)立即得以恢复,则程序包可在主节点上重新启动。因此,在这种情况下程序包就不会切换到该群集中的另一节点上。

使用命令暂停程序包时

ServiceGuard 的 cmhaltpkg 命令可以执行程序包的暂停脚本,后者用于暂停为特定程序包运行的服务。这样可以使程序包从容地关闭,然后禁用启动程序包启动 (AUTO_RUN)。

注释:如果发出 cmhaltpkg 命令时带有 -n <nodename> 选项,则仅当程序包在该节点上运行时才会暂停。

cmmodpkg 命令不能用于暂停程序包,但它可以禁止在特定节点或所有节点之间进行切换。当程序包的切换被禁用时,它可以继续运行,但如果它在当前节点上停止运行,则它将无法在其他节点上启动。

暂停脚本执行过程中

在程序包管理器检测到服务故障后,或当已为特定程序包发出 cmhaltpkg 命令时,将启动暂停脚本(即,使用 ‘halt’ 参数执行的控制脚本)。此脚本可执行下列步骤(在图 3-15 “执行暂停脚本的程序包时间线” 中也有显示):

  1. 暂停早些时候启动的任何延迟资源。

  2. 暂停所有程序包服务。

  3. 执行任何由客户定义的暂停命令。

  4. 从节点上的 LAN 卡中删除程序包 IP 地址。

  5. 卸载文件系统。

  6. 停用卷组。

  7. 在退出代码为零 (0) 时退出。

图 3-15 执行暂停脚本的程序包时间线

执行暂停脚本的程序包时间线

整个过程中的任何一步出现错误都将导致脚本异常退出(退出代码为 1)。另外,如果暂停脚本未在 HALT_SCRIPT_TIMEOUT 中指定的时间之前执行完毕,程序包管理器将终止脚本。在暂停脚本的执行过程中,消息将写入与暂停脚本相同的目录下的日志文件中。此日志的文件名与暂停脚本相同,扩展名为 .log。正常启动以及与暂停程序包相关的错误消息或警告都将记录在此日志中。

从暂停脚本中的正常和不正常退出

程序包的可移动到其他节点上的能力受离开暂停脚本时的退出情况的影响。下面是可能的退出代码:

  • 0 — 正常退出。程序包正常暂停,因此此节点上的所有服务都将停止。

  • 1 — 异常退出,也称为 NO_RESTART 退出。程序包没有正常暂停。服务都将停止,且程序包将全局性地禁用。但是它不会在当前节点上禁用。

  • Timeout — 另一种类型的退出,在超出 HALT_SCRIPT_TIMEOUT 时发生。在这种情形下,程序包被终止,并全局性地禁用。但是它不会在当前节点上禁用。

程序包控制脚本错误和退出情况

表 3-1 “程序包配置数据” 显示故障切换程序包的错误情况、故障快速转移和程序包移动等的各种可能的组合。

表 3-4 错误情况和程序包移动

程序包错误情况

结果

错误或退出代码节点快速故障转移已启用服务故障快速转移已启用出现错误后主节点上的 HP-UX 状态暂停脚本在出现错误或退出后运行出现错误后允许程序包在主节点上运行允许程序包在备用节点上运行
服务故障TOCN/A (TOC)
服务故障TOCN/A (TOC)
服务故障正在运行
服务故障正在运行
运行脚本退出代码 1二值均可二值均可正在运行不变
运行脚本退出代码 2二值均可TOCN/A (TOC)
运行脚本退出代码 2二值均可正在运行
运行脚本超时二值均可TOCN/A (TOC)
运行脚本超时二值均可正在运行不变
暂停脚本退出代码 1二值均可正在运行N/A
暂停脚本退出代码 1二值均可正在运行N/A
暂停脚本超时二值均可TOCN/AN/A (TOC)一般为 Yes,执行 cmhaltpkg 命令后发生超时则例外。
暂停脚本超时二值均可正在运行N/A
服务故障二值均可TOCN/A (TOC)
服务故障二值均可正在运行
丢失网络二值均可TOCN/A (TOC)
丢失网络二值均可正在运行
丢失受监视资源二值均可TOCN/A (TOC)
丢失受监视资源二值均可正在运行如果该资源不是延迟资源,则为 Yes。如果该资源已延迟则为 No。

 

打印版本
保密声明 使用本网站表示您同意其使用条件
© Hewlett-Packard Development Company, L.P.