| 中国 |
|
|
|
![]() |
管理 Serviceguard 第 15 版 > 第 4 章 规划和记录
HA 群集 程序包配置规划 |
|
程序包的规划涉及有关每组高可用性服务的组合信息。
您可能需要将卷组中的逻辑卷用作群集中程序包操作基础结构的一部分。当程序包从一个节点移至另一节点时,它必须能像原节点那样,访问驻留在相同磁盘上的数据。可以通过激活卷组,并挂接驻留在其上的文件系统,来实现这一目标。 在 Serviceguard 中,将高可用性应用程序、服务和数据,安排在共享总线的卷组中。当节点出现故障时,包含故障节点的应用程序、服务和数据的卷组,就在故障节点上停用,并在代管节点上激活。要做到这一点,必须将卷组配置为可从故障节点转移到代管节点。 作为规划的一部分,必须确定以下几点:
请按程序包创建由卷组、逻辑卷和文件系统组成的列表。指明哪些节点需要在不同时间访问公共文件系统。 HP 建议使用不同于缺省逻辑卷名(lvol1、lvol2 等)的定制逻辑卷名。选择代表与其相关的高可用性应用程序的逻辑卷名(如 lvoldatabase),可以简化群集管理。 要进一步说明每个节点上的程序包相关卷组、逻辑卷和文件系统,可以在 /etc/fstab 文件中添加注释行。下面是一个数据库应用程序的示例:
请为每个逻辑卷创建一个项,指明其是用于文件系统还是用于原始设备。请记住使用如上所示的 # 字符将这些行注释掉。
对于使用 CVM 或 CFS 的故障切换程序包,应配置系统多节点程序包来处理卷组和文件系统。
Veritas Cluster Volume Manager 3.5 使用系统多节点程序包 VxVM-CVM-pkg 来管理群集的卷。 请为 CVM 3.5 和 VxVM-CVM-pkg 配置一个心跳线网络。不支持多个心跳线。不支持将 APA、Infiniband 或 VLAN 接口用作心跳线网络。 Veritas Cluster Volume Manager 4.1 和更高版本使用系统多节点程序包 SG-CFS-pkg 来管理群集的卷。 CVM 4.1 和更高版本以及 SG-CFS-pkg 要求配置多个心跳线网络,或一个具有备用心跳线网络的心跳线网络。不支持将 APA、Infiniband 或 VLAN 接口用作心跳线网络。 支持将 CFS (Veritas Cluster File System) 与 Veritas Cluster Volume Manager 4.1 和更高版本配合使用。 系统多节点程序包 SG-CFS-pkg 管理群集的卷。还使用两组多节点程序包:CFS 挂接程序包 SG-CFS-MP-id# 和 CFS 磁盘组程序包 SG-CFS-DG-id#。使用 cfs 系列命令创建多节点程序包;请不要编辑配置文件。 CVM 4.1 和更高版本以及 SG-CFS-pkg 要求配置多个心跳线网络,或一个具有备用心跳线网络的心跳线网络。不支持将 APA、Infiniband 或 VLAN 接口用作心跳线网络。 对于应用程序故障切换程序包和非故障切换程序包,可以创建一系列程序包相关性:
可以向正在运行的群集添加程序包。此过程将在第 7 章“群集和程序包维护”中进行介绍。 添加程序包时,请确保不要超过群集配置文件中定义的 max_configured_packages 值(请参阅“群集配置参数 ”)。如果需要,可以在群集运行时修改此参数。 要确定故障切换程序包的故障切换行为(请参阅“程序包类型”),请定义故障切换策略,用于控制 Serviceguard 将自动启动未运行的程序包的位置。另外,可以定义故障返回策略,用于确定程序包在可能时是否自动返回到其主节点。 下表说明了不同类型的故障切换行为,以及程序包配置文件中确定每种行为的设置。有关详细信息,请参阅“程序包参数说明”。 表 4-2 程序包故障切换行为
还可以配置故障切换程序包,以便 IP 地址从出现故障的局域网卡切换到同一节点和同一物理子网上的备用局域网卡。要管理该行为,请使用程序包配置文件中的参数“local_lan_failover_allowed”(缺省值为 yes,表示已启用)。
Serviceguard 提供了一组配置 EMS(Event Monitoring Service,事件监视服务)资源的参数。它们是 resource_name、resource_polling_interval、resource_start 和 resource_up_value。请在程序包配置文件中,为程序包依赖的每个资源配置这些参数。 resource_start 参数用于确定 Serviceguard 何时启动对 EMS 资源的资源监视。resource_start 可设置为 automatic 或 deferred。 Serviceguard 将在节点上的 Serviceguard 群集守护程序启动时自动启动对 automatic 资源的资源监视。 Serviceguard 不会在节点启动过程中尝试启动 deferred 资源监视,但会在程序包运行时启动对这些资源的监视。 下面是如何配置 deferred 和 automatic 资源的示例。
从 Serviceguard A.11.17 开始,一个程序包可以具有与其他程序包的相关性,也就是说,除非该程序包的相关程序包在节点上运行,否则该程序包不会在该节点上启动。 在 Serviceguard A.11.17 中,仅支持将程序包相关性用于 HP 指定的特定应用程序,例如,HP 提供的多节点及系统多节点程序包可用于支持其系统上的 Veritas Cluster File System (CFS)。 从 Serviceguard A.11.18 开始,程序包相关性已不再受限制;可以使某个程序包依赖于在同一群集节点上运行的一个或多个不同的程序包,但受第 6 章中的“dependency_condition”的限制。 如果第一个程序包在没有第二个程序包提供的服务时无法(或者不应)运行,则可以使这两个程序包彼此相关。例如,pkg1 可能运行一个由 pkg2 管理的数据库的实时 Web 接口,在这种情况下,应使 pkg1 依赖于 pkg2。 在考虑是否要在程序包之间创建相关性时,请考虑下面的“规则”和“准则”。 假设要使 pkg1 依赖于 pkg2。
对于一组具有 configured_node failover_policy 的故障切换程序包,当其中的一个或多个程序包依赖于另一个或另一些程序包时,可以使用 priority 参数控制这些程序包的启动、故障切换和故障返回行为。 一种广泛适用的规则是,优先级较高的程序包可以拖动优先级较低的程序包,即强制该程序包在一个适合于高优先级程序包的节点上启动,或移动到这样的节点。
请注意,即使一个或多个程序包依赖于另一个程序包,也不必设置 priority。缺省值 no_priority 通常会产生所需的行为。例如,如果 pkg1 依赖于 pkg2,并且这两个程序包的 priority 均设置为 no_priority,同时根据本节的建议设置了其他参数(如 node_name 和 auto_run),则 pkg1 通常会随 pkg2 移动到两者均可运行的位置,这是常见的结果,可能也是所需要的结果。 下列示例诠释了以上规则,这些示例适用于两个“failover_policy”为 configured_node 的故障切换程序包。假定 pkg1 依赖于 pkg2,并且在每个程序包配置文件的“node_name”下指定了 node1、node2 和 node3,同时还假定每个程序包的“failback_policy”设置为 automatic。
如果 pkg1 依赖于 pkg2,并且 pkg1 的优先级低于或等于 pkg2 的优先级,则 pkg2 的节点顺序将起决定作用。假定 pkg2 的节点顺序为 node1、node2、node3,则:
如果 pkg1 依赖于 pkg2,并且 pkg1 的优先级高于 pkg2,则 pkg1 的节点顺序将起决定作用。假定 pkg1 的节点顺序为 node1、node2、node3,则:
如“拖动规则”所述,如果 pkg1 依赖于 pkg2,有时最好向 pkg1 分配一个更高的优先级,这是因为是当 pkg1 出现故障时,此方法更有利于成功进行故障切换(和故障返回)。 但同时还应权衡程序包的相对重要性。如果 pkg2 运行的数据库对于业务至关重要,则可能希望该数据库在无干扰的状态下运行,而不管依赖它的应用程序包出现什么情况。这种情况下,数据库程序包应具有最高的优先级。 请注意,如果未设置优先级,则拖动规则会将原程序包故障切换到从属程序包。 如果从属程序包的实际重要性与它所依赖的程序包相同,请考虑将更高的优先级分配给从属程序包;否则,请将更高优先级分配给更重要的程序包,或将这两个程序包的优先级设置为缺省值。 还需要考虑当某个程序包出现故障时的情况。如果其他程序包依赖于此程序包,则 Serviceguard 会暂停这些程序包(以及依赖于这些程序包的任何程序包等)。无论出现故障的程序包的优先级如何,均会出现此情况。 缺省情况下,程序包将按启动顺序的相反顺序暂停;如果任何从属程序包的暂停脚本挂起,则出现故障的程序包将无限期等待,以完成其自身的暂停进程。这种情况非常有利于所有从属程序包完全暂停,但这可能并不是所需的行为。可以通过 successor_halt_timeout 参数(请参阅“successor_halt_timeout”)更改此行为。 如果将 successor_halt_timeout 设置为 0,Serviceguard 会同时暂停从属程序包和出现故障的程序包;如果将该参数设置为正数,Serviceguard 会按启动顺序的相反顺序暂停程序包,但将使出现故障的程序包在 successor_halt_timeout 秒之后暂停,而不管从属程序包是否完成了它们的暂停脚本。 模块化脚本的程序包配置模板显式提供了外部脚本。这些脚本取代了旧脚本中的 CUSTOMER DEFINED FUNCTIONS,并可以在:
外部脚本还会在 cmcheckconf 和 cmapplyconf 验证程序包时运行,并且必须具有验证入口点,如下所示。 程序包可以同时使用此两种类型的脚本,并可以启动每种类型的多个脚本;这种情况下,脚本将按它们在程序包配置文件中列出的顺序执行(而在程序包关闭时则按相反顺序执行)。 每个外部脚本必须有三个入口点:start、stop 和 validate,并应在退出时返回下列值之一:
外部脚本可以使用由程序包管理器或运行程序包的主控制脚本导出的一组标准环境变量(包括程序包名称 SG_PACKAGE 和本地节点名称 SG_NODE),还可以调用日志记录函数和其他实用函数中的源函数。其中的一个函数 sg_source_pkg_env() 可用于访问为此程序包配置的所有参数,包括通过 pev_ 参数(请参阅“pev_”)配置的程序包特定的环境变量。 有关详细信息,请参阅 $SGCONF/examples/external_script.template 中的模板。 以下是一个示例脚本。该脚本假定还有一个名为 monitor.sh 的脚本,后者将通过 Serviceguard 服务进行配置以监视某个应用程序。 monitor.sh 脚本(此处并不包含)使用程序包配置文件中定义的参数 PEV_MONITORING_INTERVAL 来定期轮询要监视的应用程序,例如: PEV_MONITORING_INTERVAL 60 验证时,该示例脚本将确保 PEV_MONITORING_INTERVAL 和监视服务已经过正确配置;在启动和停止时,该示例脚本将向日志文件输出时间间隔。
有关将应用程序与 Serviceguard 集成的详细信息,请参阅白皮书《Framework for HP Serviceguard Toolkits》,其中包含了一套可自定义的脚本。此白皮书包含在 Serviceguard Developer's Toolkit 中,可以从 http://www.hp.com/go/softwaredepot 免费下载此工具包。 可以在程序包中运行的外部脚本中使用 Serviceguard 命令(如 cmmodpkg)。这些命令不能与该程序包(即运行外部脚本的程序包)本身进行交互操作,但可以与其他程序包进行交互。同时,请注意编码这些交互操作的方式。 如果 Serviceguard 命令与其他程序包进行交互,请注意避免命令循环。例如,下列情况下可能会发生命令循环。假定 pkg1 运行的某个脚本对 pkg2 执行 cmmodpkg -d,而 pkg2 运行的某个脚本对 pkg1 执行 cmmodpkg -d。如果 pkg1 和 pkg2 同时启动,pkg1 脚本会立即尝试对 pkg2 执行 cmmodpkg。但是,cmmodpkg 命令必须等到 pkg2 启动之后才能完成。而 pkg2 脚本在启动时也会尝试对 pkg1 执行 cmmodpkg,但 pkg2 也必须等到 pkg1 启动之后才能完成,这样就造成了命令循环。 为了避免出现这种情况,最好为所有程序包指定 run_script_timeout 和 halt_script_timeout,特别是那些在外部脚本中使用 Serviceguard 命令的程序包。如果没有指定超时时间,并且配置中存在如上所述的命令循环,则会出现不一致的结果,包括挂起群集。 可以使用外部脚本(或旧程序包控制脚本的 CUSTOMER DEFINED FUNCTIONS 区域)来查明程序包关闭的原因。 在程序包暂停时,Serviceguard 会将程序包控制脚本中的环境变量 SG_HALT_REASON 设置为下列值之一:
您可以向程序包添加定制代码,以便询问此变量、确定此程序包暂停的原因,以及采取相应的操作。对于旧程序包,请将 customer_defined_halt_cmds() 函数中的代码放置在程序包控制脚本的 CUSTOMER DEFINED FUNCTIONS 区域中(请参阅“在程序包控制脚本中添加客户定义的函数 ”);对于模块化程序包,请将该代码放在程序包的外部脚本(请参阅“关于外部脚本”)中。 例如,如果管理员正暂停数据库程序包(将 SG_HALT_REASON 设置为 user_halt),您可能希望定制代码,以便按顺序关闭数据库;另一方面,如果将 SG_HALT_REASON 设置为 failure(说明此程序包被异常暂停,例如由于其依赖的服务出现故障而暂停),则可能需要执行强制关闭。 可以将群集配置为跨多个子网,这些子网通过路由器连接在一起,一些节点使用其中一个子网,而另外一些节点则使用另一个子网。这就是所谓的跨子网配置(请参阅“跨子网配置”)。在此环境中,可以将程序包配置为从一个子网的某个节点故障切换到另一子网的某个节点上。 配置程序包进行跨子网故障切换的实现方法如下:
由于可重新定位的 IP 地址在程序包故障切换到另一子网上的节点时将发生变化,因此必须确保下列操作:
有关详细信息,请参阅《Technical Considerations for Creating a Serviceguard Cluster that Spans Multiple IP Subnets》白皮书,该书可从 http://docs.hp.com -> High Availability 获得。 要将程序包配置为跨子网进行故障切换,需要对程序包配置文件完成一些其他编辑。
假定您要配置一个程序包 pkg1,使其能够在某个群集中的所有节点之间进行故障切换(该群集由 NodeA、NodeB、NodeC 和 NodeD 组成)。 NodeA 和 NodeB 使用子网 15.244.65.0,而 NodeC 和 NodeD 不使用该子网;NodeC 和 NodeD 使用子网 15.244.56.0,而 NodeA 和 NodeB 不使用该子网 (有关 cmquerycl 的输出示例,请参阅“获取跨子网信息”)。 首先,需要确保 pkg1 只有在必要的时候才切换到另一个子网上的某个节点。例如,如果该程序包正在 NodeA 上运行,并需要故障切换,而在产生跨子网故障切换到 NodeC 或 NodeD 的开销之前,用户希望其尝试同一个子网上的 NodeB。 假定 nodeA 是 pkg1 的主节点(即通常情况下启动该程序包的节点),请按如下所示在程序包配置文件中创建 node_name 条目: node_name nodeA node_name nodeB node_name nodeC node_name nodeD 要监视子网 15.244.65.0 或 15.244.56.0,根据 pkg1 运行的位置需要按如下所示在 pkg1 的程序包配置文件中配置 monitored_subnet 和 monitored_subnet_access: monitored_subnet 15.244.65.0 monitored_subnet_access PARTIAL monitored_subnet 15.244.56.0 monitored_subnet_access PARTIAL
准备开始配置程序包后,请继续执行第 6 章“配置程序包及其服务”;然后开始执行“选择程序包模块” (如果发现它十分有用,则可以提前将每个程序包的配置数据分别填写在一份工作表中;空白工作表在附录 F “空白规划工作表” 中提供。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||