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