本书对如何为软件应用程序(例如,Oracle®、Sun JavaTM System Web Server [以前称为 SunTM ONE Web Server]、DNS 等)创建资源类型提供了准则,因此本书面向的是资源类型的开发者。
本书中使用的术语资源类型和数据服务是可以互换的。术语代理(尽管在本书中很少用到)也与资源类型和数据服务表示的含义相同。
Sun Cluster 系统允许应用程序作为具有高可用性和可伸缩性的资源运行和管理。作为资源组管理器(即 RGM)的群集工具提供了一种具有高可用性和可伸缩性的机制。构成此工具编程接口的元素包括以下内容。
资源管理 API (RMAPI),一组可用于编写回调方法的低级 API 命令和函数。这些 API 在 libscha.so 库中实现。
数据服务开发库 (DSDL),一组库函数,用于封装低级 API 和高级进程管理功能以及添加某些其他功能以便于编写回调方法。这些功能是在 libdsdev.so 库中实现。
Sun Cluster 软件包中包含的 SunPlexTM Agent Builder 是一种自动处理数据服务创建过程的工具(请参见第 9 章,SunPlex Agent Builder)。Agent Builder 在 C shell(使用 DSDL 函数编写回调方法)或 Korn shell (ksh)(使用低级 API 命令编写回调方法)中生成数据服务代码。
RGM 在每个群集节点上作为守护程序运行,并根据预先配置的策略在选定节点上自动启动和停止资源。RGM 可以通过在受影响的节点上停止资源并在另一个节点上启动该资源,使该资源在节点失效或重新引导时具有高可用性。RGM 还可以自动启动和停止特定于资源的监视器,这些监视器可以检测到资源失效并将失效的资源重定位到另一个节点,还可以监视资源性能的其他方面。
RGM 支持故障转移资源(一次最多只能在一个节点上联机)和可伸缩资源(可以同时在多个节点上联机)。
本节介绍了一些基本术语并详细解释了 RGM 及其关联接口。
RGM 用于处理三种主要类型的相互关联对象:资源类型、资源和资源组。引入这些对象的一种方式是通过示例,如下所示。
开发者实现了资源类型 ha-oracle,使现有的 Oracle DBMS 应用程序具有高可用性。最终用户为营销、工程和财务定义了独立的数据库,每个数据库都是 ha-oracle 类型的资源。群集管理员将这些资源放在独立的资源组中,以便它们可以在不同的节点上运行以及分别进行故障转移。开发者创建了第二种资源类型 ha-calendar,以实现需要使用 Oracle 数据库的高可用日历服务器。群集管理员将财务日历资源放在财务数据库资源所在的资源组中,以便两个资源在同一节点上运行并同时进行故障转移。
资源类型由以下内容组成:在群集上运行的软件应用程序、由 RGM 用作回调方法以管理作为群集资源的应用程序的控制程序以及一组构成部分静态群集配置的特性。RGM 使用资源类型特性来管理特定类型的资源。
除了软件应用程序之外,资源类型还可以表示其他系统资源,例如网络地址。
资源类型开发者指定资源类型的特性并在资源类型注册 (RTR) 文件中设置它们的值。RTR 文件遵循设置资源和资源类型特性和 rt_reg(4) 手册页中介绍的已明确定义的格式。有关资源类型注册文件样例的说明,另请参见定义资源类型注册文件。
资源类型特性中提供了一个资源类型特性的列表。
群集管理员在群集上安装和注册资源类型实现和基础应用程序。注册过程会将资源类型注册文件中的信息输入群集配置。《Sun Cluster 数据服务规划和管理指南(适用于 Solaris OS)》中介绍了注册数据服务的过程。
资源将继承其资源类型的特性和值。此外,开发者可以在资源类型注册文件中声明资源特性。资源特性中包含一个资源特性的列表。
根据某些特性在资源类型注册 (RTR) 文件中的指定方式,群集管理员可以更改这些特性的值。例如,特性定义可以指定允许值的范围以及特性何时可调(例如,创建时、随时或从不)。在这些规范中,群集管理员可以使用管理命令对特性进行更改。
群集管理员可以创建很多相同类型的资源,每个资源都具有自己的名称和特性值集,以便基础应用程序的多个实例都可以在群集上运行。每个实例都要求在群集内具有唯一的名称。
每个资源都必须在资源组中进行配置。RGM 使组中的所有资源在同一节点上同时联机或脱机。RGM 使资源组联机或脱机时,它将调用组中各个资源上的回调方法。
资源组当前联机的节点称为其主要节点或主节点。资源组由它的每个主要节点控制。每个资源组都具有一个关联的 Nodelist 特性,该特性由群集管理员进行设置,用来标识资源组所有的潜在主节点或主控节点。
资源组还具有一组特性。这些特性包括配置特性(可以由群集管理员进行设置)和动态特性(由 RGM 进行设置,可以反映资源组的活动状态)。
RGM 定义了两种类型的资源组:故障转移和可伸缩。故障转移资源组一次只能在一个节点上联机,而可伸缩资源组可以同时在多个节点上联机。RGM 提供了一组支持资源组每个类型创建的特性。有关这些特性的详细信息,请参见将数据服务传送到群集和实现回调方法。
资源组特性中包含一个资源组特性的列表。
资源组管理器 (RGM) 作为守护程序 rgmd 实现,该守护程序在群集的每个成员节点上运行。所有的 rgmd 进程之间相互通信,并一起作为一个适用于整个群集的工具。
节点引导或崩溃时,RGM 尝试通过自动使所有管理的资源组在相应的主控节点上联机来维护它们的可用性。
如果特定资源失效,其监视程序可以请求资源组在同一主控节点上重启或切换到新的主控节点。
群集管理员可以发出管理命令以请求执行以下任一操作:
更改资源组的控制
启用或禁用资源组中的特定资源
创建、删除或修改资源、资源组或资源类型
RGM 激活配置更改后,它将在群集的所有成员节点间协调其操作。这种活动称为重新配置。为使状态更改在单个资源上生效,RGM 会对该资源调用特定于资源类型的回调方法。
Sun Cluster 框架使用回调机制提供数据服务与 RGM 之间的通信。该框架定义了一组回调方法(包括参数和返回值)以及 RGM 调用每种方法的环境。
通过对一组单独的回调方法进行编码并实现每种方法作为 RGM 可调用的控制程序,可以创建数据服务。也就是说,数据服务包含的不是单个可执行文件,而是大量可执行脚本 (ksh) 或二进制文件 (C),每个脚本或二进制文件都可以直接由 RGM 调用。
回调方法通过 RGM 在资源类型注册 (RTR) 文件中进行注册。在 RTR 文件中,可以标识已为数据服务实现的每种方法的程序。系统管理员在群集上注册数据服务时,RGM 将读取 RTR 文件,该文件将提供回调程序的标识及其他信息。
资源类型唯一需要的回调方法是 start 方法(Start 或 Prenet_start)和 stop 方法(Stop 或 Postnet_stop)。
控制和初始化方法
Start 和 Stop 分别用于启动和停止联机或脱机的组中的资源。
Init、Fini 和 Boot 分别用于执行资源上的初始化和终止代码。
管理支持方法
Validate 用于检验由管理操作设置的特性。
Update 用于更新联机资源的特性设置。
与网络相关的方法
Prenet_start 和 Postnet_stop 分别用于在将同一资源组中的网络地址配置为启用之前执行特殊的启动操作,或在将同一资源组中的网络地址配置为关闭之后执行特殊的关闭操作。
监视器控制方法
Monitor_start 和 Monitor_stop 启动或停止对某个资源的监视。
Monitor_check 用于在将资源组移至节点之前评估该节点的可靠性。
有关回调方法的详细信息,请参见第 4 章,资源管理 API 参考和 rt_callbacks (1HA) 手册页。有关数据服务样例中的回调方法,另请参见第 5 章,数据服务样例和第 8 章,DSDL 资源类型实现样例。
为了编写数据服务代码,资源管理体系结构提供了低级的基本 API、在基本 API 基础上生成的高级库以及 SunPlex Agent Builder 工具(该工具自动根据您提供的基本输入生成数据服务)。
RMAPI(资源管理 API)提供了一组低级例行程序,使数据服务可以访问系统中有关资源、资源类型和资源组的信息,请求本地重新启动或故障转移以及设置资源状态。您可以通过 libscha.so 库访问这些功能。RMAPI 以 shell 命令和 C 函数的形式提供这些回调方法。有关 RMAPI 例程的详细信息,请参见 scha_calls(3HA) 和第 4 章,资源管理 API 参考。要获得如何在数据服务回调方法样例中使用这些例程的示例,另请参见第 5 章,数据服务样例。
DSDL 位于 RMAPI 顶端,它在保留 RGM 的基础方法回调模型的同时提供了一种高级集成框架。DSDL 同时提供了多种数据服务开发工具,其中包括:
libscha.so—低级资源管理 API
PMF—进程管理工具,提供了监视进程及其子进程以及在它们无响应时对其进行重新启动的方法(请参见 pmfadm(1M) 和 rpc.pmfd(1M))。
hatimerun—在超时的情况下运行程序的工具(请参见 hatimerun( 1M))。
对于大多数应用程序,DSDL 提供了生成数据服务所需的多数或所有功能。但请注意,DSDL 不会替代低级 API,而是封装并扩展它。实际上,很多 DSDL 函数都调用 libscha.so 函数。同样,您可以在使用 DSDL 对数据服务进行大量编码时直接调用 libscha.so 函数。libdsdev.so 库中包含了 DSDL 函数。
有关 DSDL 的详细信息,请参见第 6 章,数据服务开发库 (DSDL)和 scha_calls (3HA) 手册页。
Agent Builder 是一种自动创建数据服务的工具。您输入有关目标应用程序和要创建的数据服务的基本信息。Agent Builder 将生成数据服务,由资源和可执行码(C 或 Korn shell)、自定义 RTR 文件和 SolarisTM 软件包组成。
对于多数应用程序,都可以使用 Agent Builder 生成完整的数据服务,且只需您进行很少的手动更改。具有较复杂要求(例如,对附加特性添加验证检查)的应用程序可能需要执行 Agent Builder 无法完成的操作。但是,即使在这些情况下,也可以使用 Agent Builder 生成大量代码并对其余内容手动进行编码。至少可以使用 Agent Builder 为您生成 Solaris 软件包。
Sun Cluster 提供了图形用户界面和一组用于管理群集的命令。
SunPlex Manager 是基于 Web 的工具,可以用来执行以下任务:
安装群集
管理群集
创建和配置资源和资源组
使用 Sun Cluster 软件配置数据服务
有关如何安装 SunPlex Manager 和如何使用 SunPlex Manager 安装群集软件的说明,请参见《Sun Cluster 软件安装指南(适用于 Solaris OS)》 。SunPlex Manager 为多数唯一的管理任务提供了联机帮助。
用于管理 RGM 对象的 Sun Cluster 命令有 scrgadm(1M)、scswitch(1M) 和 scstat(1M)-g。
通过 scrgadm 命令可以查看、创建、配置和删除 RGM 使用的资源类型、资源组和资源对象。该命令是群集管理接口的一部分,但不会和本章其余部分所介绍的应用程序接口在同一编程上下文中使用。但是,scrgadm 是构造 API 进行操作的群集配置的工具。理解管理接口有助于理解应用程序接口。有关该命令可以执行的管理任务的详细信息,请参见 scrgadm(1M) 手册页。
scswitch 命令用于切换资源组在指定节点上的联机和脱机,以及启用或禁用资源或其监视器。有关该命令可以执行的管理任务的详细信息,请参见 scswitch(1M) 手册页。
scstat -g 命令用于显示所有资源组和资源的当前动态状态。