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

程序包的运行方式

» 

技术文档资料

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

 » 目录

 » 索引

Serviceguard 使用程序包启动和暂停已配置的应用程序。故障切换程序包也是 Serviceguard 中的故障切换行为单元。一个程序包是服务、磁盘卷和 IP 地址的集合,该集合由 Serviceguard 进行管理,以确保其中资源的可用性。每个群集最多可有 150 个程序包,服务总数可达 900 个。

激发程序包运行的机制

程序包有三种类型:

  • 故障切换程序包是最常用的程序包。它一次在一个节点上运行。如果发生故障,它可以切换到配置文件中所列的另一个节点。如果针对多个节点启用了切换,则程序包管理器将使用故障切换策略来确定启动程序包的位置。

  • 系统多节点程序包可以同时在所有活动群集节点上运行。它可以在所有节点上启动或暂停,但不能在单独的节点上启动或暂停。

  • 多节点程序包可以同时在若干个节点上运行。如果 auto_run 设置为 yes,则 Serviceguard 在配置文件中所列的所有节点上启动多节点程序包。它可以在所有节点上启动或暂停,还可以在单独的节点上启动或暂停,具体方法是执行命令 (cmhaltpkg),或者在出现程序包组件(如服务、EMS 资源或子网)故障时,由 Serviceguard 自动进行。

仅支持将系统多节点程序包用于 HP 提供的应用程序。

故障切换程序包可以配置为具有与多节点或系统多节点程序包的相关性。除非某个程序包所依赖的所有程序包已在节点上启动并运行,否则程序包管理器无法在节点上启动该程序包。

程序包管理器始终尝试使故障切换程序包保持运行状态,除非有某些因素阻止程序包在任何节点上运行。故障切换程序包无法运行的最常见的原因是:auto_run 被禁用(因而 Serviceguard 不允许启动该程序包)、在特定节点上禁用了程序包的节点切换功能,或者没有满足程序包的相关性。当程序包在一个节点上出现故障,并切换到另一个节点时,它将在满足相关性的新位置上自动启动。此过程称为程序包切换,或称为远程切换

故障切换程序包在其配置文件中的第一个可用节点上启动;缺省情况下,它故障切换到列表中的下一个可用节点。请注意,您不一定必须使用 cmrunpkg 命令重新启动发生故障的故障切换程序包;在很多情况下,最好的方法是使用 cmmodpkg 命令启用程序包切换和(或)节点切换。

创建程序包时,应指明可以运行程序包的节点的列表。系统多节点程序包必须列出群集中的所有群集节点。多节点程序包和故障切换程序包可以命名群集节点的某个子集或所有群集节点。

如果在程序包配置文件中将 auto_run 参数设置为 yes,则 Serviceguard 将在群集启动时自动启动程序包。对于系统多节点程序包,需要将 auto_run 设置为 yes。如果故障切换程序包的 auto_run设置为 no,则 Serviceguard 在群集启动时不能自动启动该程序包;您必须使用 cmmodpkg 命令明确启用此类程序包。

注释:如果在群集运行时配置程序包,程序包不会在 cmapplyconf 命令结束后立即启动。如果希望不经过暂停和重新启动群集就启动程序包,请执行 cmrunpkgcmmodpkg 命令。

故障切换程序包如何启动以及它在运行时的行为如何?程序包的生命周期划分为多个阶段,图 3-13 “显示重要事件的旧程序包时间轴” 显示了其中的一部分。

注释:此图表专用于旧程序包。下面集合了模块化脚本的不同点。

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

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

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

  1. 控制脚本启动之前(对于模块化程序包,这是主控制脚本)。

  2. 运行脚本执行过程中(对于模块化程序包,在控制脚本执行期间启动程序包)。

  3. 服务正在运行时

  4. 当服务、子网或受监视的资源出现故障,或者不满足相关性时。

  5. 暂停脚本执行过程中(对于模块化程序包,在控制脚本执行期间暂停程序包)。

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

  7. 节点出现故障时

控制脚本启动之前

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

一旦选定了节点,就会对该节点进行检查,以确保程序包可以在其上启动。然后选定的节点上的控制脚本启动程序包的服务。严格说来,是使用选定节点上的运行脚本来启动旧程序包;主控制脚本启动模块化程序包。

运行脚本执行过程中

只要程序包管理器确定了可在特定节点上启动程序包,它就会启动用于启动程序包的脚本(即,使用 start 参数执行的程序包控制脚本或主控制脚本)。此脚本执行下列步骤:

  1. 执行任何 external_pre_script(仅适用于模块化程序包;请参阅“external_pre_script”

  2. 激活卷组或磁盘组。

  3. 挂接文件系统。

  4. 将程序包 IP 地址指定给节点上的局域网卡(仅适用于故障切换程序包)。

  5. 执行任何由客户定义的运行命令(仅适用于旧程序包;请参阅“在程序包控制脚本中添加客户定义的函数 ”)或 external_script(仅适用于模块化程序包;请参阅“external_script”)。

  6. 启动程序包的每个服务。

  7. 启动程序包所需的任何已特别标记为延迟启动的 EMS(Event Monitoring Service,事件监视服务)资源。

  8. 退出并返回退出代码零 (0)。

图 3-14 程序包时间轴(旧程序包)

程序包时间轴(旧程序包)

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

注释:此图表专用于旧程序包。模块化程序包还运行外部脚本和“预处理脚本”,如上所述。

如果运行脚本在 run_script_timeout 中指定的时间之前未执行完毕,程序包管理器将终止该脚本。在运行脚本的执行过程中,消息将写入日志文件中。对于旧程序包,该日志文件与运行脚本在同一目录中,并具有与运行脚本相同的名称,扩展名为 .log。对模块化程序包,其路径名由程序包配置文件中的 script_log_file parameter 确定(请参阅“script_log_file”)。正常启动以及与启动程序包相关的错误消息或警告都将记录在此日志中。

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

正常和异常退出运行脚本

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

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

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

  • 2 - 备用退出,也称为 restart 退出。虽然存在错误,但程序包可以在另一个节点上启动。虽然存在错误,但如果可以在另一个节点上启动该程序包,您就可以通过客户定义的过程使用这种退出方式。 restart 退出的程序包不能在本地节点上运行,但仍可以在其他节点上运行。

  • Timeout - 在超出 run_script_timeout 时发生的另一种退出方式。在这种情形下,程序包将被终止并全局禁用。但是,在当前节点上不会禁用此程序包。程序包脚本可能无法清理其某些资源(如 LVM 卷组、VxVM 磁盘组或程序包挂接点),因此,尝试在任何节点上启动程序包之前,请确保检查是否需要清理程序包的任何资源。

cmrunserv 启动服务

在程序包控制脚本中,cmrunserv 命令可启动各个服务。此命令将针对编入文件中的每个服务都执行一次。您可以为每个服务配置重新启动次数。cmrunserv 命令将把此数传递给程序包管理器,如果服务发生故障,程序包管理器则将使服务重新启动相应的次数。下面是旧程序包中的一些典型设置;有关在模块化程序包中配置服务的详细信息,请参阅从“service_name”开始的相关讨论和程序包配置模板文件中的注释。

SERVICE_RESTART[0]=" "        ; 不重新启动
SERVICE_RESTART[0]="-r <n>"   ; 重新启动 <n> 次
SERVICE_RESTART[0]="-R"       ; 重新启动次数不限
注释:如果设置 <n> 次重新启动,并将 service_fail_fast_enabled 设置为 yes,则 <n> 次重新启动尝试失败后,将发生故障快速转移。对于某个服务,将 service_restart 设置为“-R”,并将 service_fail_fast_enabled 设置为 yes 是没有意义的。

服务正在运行时

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

  • 服务的进程 ID

  • 在程序包配置文件中配置的需要进行监视的子网

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

某些故障可能导致本地切换。例如,如果某个局域网卡出现故障,且该子网还配备了一个备用 LAN,则网络管理器将切换到运行正常的局域网卡。如果某个服务出现故障,但是该服务的重新启动参数已设置为大于 0 的值,则服务将重新启动,而不会暂停程序包,但服务重新启动的次数不能超过配置的次数。

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

在正常操作中,当所有的服务都在运行时,可以在 cmviewcl 命令输出的“Script Parameters”部分显示服务的状态。

当服务、子网或受监视的资源出现故障,或者不满足相关性时

当出现故障时会发生什么?如果某个服务发生故障且没有重新启动,如果某个子网发生故障且没有备用子网,如果已配置的资源发生故障,或者如果不满足与专用程序包的已配置相关性,则故障切换程序包将在其当前节点上暂停,并且可能在另一个节点上重新启动(取决于程序包切换标记的设置)。如果多节点程序包或系统多节点程序包发生故障,则配置了与其具有相关性的所有程序包也将发生故障。

暂停程序包通常是指执行程序包暂停脚本(请参阅下一节)。但是,对于发生故障的服务而言,如果故障切换程序包配置中的 service_fail_fast_enabled 标记设置为 yes,则节点将在检测到故障后立即暂停。如果未设置此标记,则服务发生故障将导致暂停脚本的运行,从而以正常方式暂停程序包。

如果 auto_run 设置为 yes,则如果另一个符合条件的节点满足启动的所有要求,程序包将在该节点上启动。如果 auto_run 设置为 no,则程序包仅仅是暂停,而不会在其他节点上启动。

注释:如果程序包依赖于某个子网,而主节点上的子网发生故障,则该程序包就将关闭。如果子网很快得到恢复(在程序包在代管节点上重新启动以前),则在这种情况下,该程序包可以在主节点上重新启动,并且不会切换到其他节点。

使用命令暂停程序包时

Serviceguard 的 cmhaltpkg 命令可以执行程序包暂停脚本,而该脚本将暂停属于特定程序包的正在运行的服务。这样程序包就可以从容关闭,紧接着将禁用程序包的自动启动 (AUTO_RUN)。

除非配置了与多节点或系统多节点程序包具有相关性的所有程序包已停止,否则,您不能暂停该多节点或系统多节点程序。使用 cmviewcl 可以检查相关性的状态。例如,如果 pkg1 和 pkg2 依赖于 PKGa,则必须先暂停 pkg1 和 pkg2,然后才能暂停 PKGa。

注释:如果使用带有 -n <节点名>选项的 cmhaltpkg 命令,则只有程序包在该节点上运行时才会暂停。

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

暂停脚本执行过程中

一旦程序包管理器检测到故障切换程序包所依赖的服务或程序包发生故障,或者为特定程序包执行 cmhaltpkg 命令时,程序包管理器将启动暂停脚本。即,使用 stop 参数执行程序包的控制脚本或主控制脚本。此脚本执行下列步骤(另见图 3-15 “执行暂停脚本的旧程序包时间轴”):

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

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

  3. 执行任何由客户定义的暂停命令(仅适用于旧程序包)或 external_script(仅适用于模块化程序包;请参阅“external_pre_script”)。

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

  5. 卸除文件系统。

  6. 停用卷组。

  7. 退出并返回退出代码零 (0)。

  8. 执行任何 external_pre_script(仅适用于模块化程序包;请参阅“external_pre_script”)。

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

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

整个过程中的任何一步出现错误都将导致脚本异常退出(退出代码为 1)。另外,如果暂停脚本未在 HALT_SCRIPT_TIMEOUT 指定的时间之前执行完毕,程序包管理器将终止脚本。在暂停脚本的执行过程中,消息将写入日志文件中。对于旧程序包,该日志文件与运行脚本在同一目录中,并具有与运行脚本相同的名称,扩展名为 .log。对模块化程序包,其路径名由程序包配置文件中的 script_log_file parameter 确定(请参阅“script_log_file”)。正常启动以及与暂停程序包相关的错误消息或警告都将记录在此日志中。

注释:此图表专用于旧程序包。上面集合了模块化脚本的不同点。

正常和异常退出暂停脚本

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

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

  • 1 - 异常退出,也称为 no_restart 退出。程序包没有正常暂停。服务被终止,并全局禁用程序包。但是,在当前节点上不会禁用此程序包。

  • Timeout - halt_script_timeout 时发生的另一种类型的退出。在这种情形下,程序包将被终止并全局禁用。但是,在当前节点上不会禁用此程序包。程序包脚本可能无法清理其某些资源(如 LVM 卷组、VxVM 磁盘组或程序包挂接点),因此,尝试在任何节点上启动程序包之前,请确保检查是否需要清理程序包的任何资源。

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

表 3-4 “故障切换程序包的错误状态和程序包移动” 显示故障切换程序包的错误情况、故障快速转移设置和程序包移动等因素的各种可能的组合。

表 3-4 故障切换程序包的错误状态和程序包移动

程序包错误情况

结果

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

具有相关性的程序包发生故障

二值均可

二值均可

正在运行

是(如果重新满足相关性)

是(如果满足
相关性)

 

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