Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

RMAPI 回叫方法

回叫方法是 API 提供的用来实现资源类型的主要元素。 当群集成员有所更改时(例如节点引导或崩溃),回叫方法将启用 RGM 来控制该群集中的资源。


注意:

RGM 以引导权限执行该回叫方法,因为客户机程序将控制群集系统上的 HA 服务。 安装和管理这些具有限制性文件拥有权和权限的方法。 有时需要为它们指定特权属主,例如 binroot,请不要使它们可写。


本节介绍回叫方法变量和出口代码,还按以下分类列出并介绍了各个回叫方法:


注意:

虽然本节提供了回叫方法的简要说明(包括何时调用方法以及对资源的预期影响),但是 rt_callbacks( 1HA) 手册页才是有关回叫方法的权威参考。


方法变量

RGM 按照以下方式调用回叫方法:


method -R resource-name -T type-name -G group-name

其中 method 是登记为 StartStop 或其它回叫方法的程序的路径名。 资源类型的回叫方法在其登记文件中进行声明。

所有回叫方法变量都作为标记值传送,-R 用来表示资源实例的名称,-T 用来表示资源的类型,-G 用来表示配置该资源的组。 使用变量和存取函数来检索关于资源的信息。

Validate 方法通过附加变量(所调用资源和资源组的特性值)调用。

有关详细信息,请参阅 scha_calls(3HA)

出口代码

所有回叫方法都定义了相同的出口代码,以指定方法调用对资源状态的影响。 scha_calls (3HA) 手册页中介绍了所有这些出口代码。 出口代码为:

RGM 还可处理回叫方法执行过程中的不正常失败,例如超时和信息转储。

方法实现必须使用每个节点上的 syslog 输出失败信息。 并不能保证写入 stdoutstderr 的输出信息一定会传送到用户(尽管它当前显示在本地节点的控制台中)。

控制和初始化回叫方法

主要的控制和初始化回叫方法用来启动和停止资源。 其它方法用来执行对资源的初始化和终止代码。

Start

当包含该资源的资源组在某个群集节点联机时,会对此节点调用此必需方法。 此方法激活该节点上的资源。

在所激活的资源启动并且在本地节点上可用之前,Start 方法不应退出。 因此,在退出之前,Start 方法应轮询该资源,以确定该资源是否已启动。 此外,您应该为此方法设置足够长的超时值。 例如,某些资源(例如数据库守护程序)需要较长的时间进行启动,因此,就要求该方法具有较长的超时值。

RGM 对 Start 方法失败的响应方式取决于 Failover_mode 特性的设置。

资源类型登记文件中的 START_TIMEOUT 特性用来设置资源的 Start 方法的超时值。

Stop

当包含该资源的资源组在群集节点上脱机时,将对该群集节点调用此必需方法。 如果该资源处于激活状态,则此方法可取消激活该资源。

在所控制资源在本地节点上完全停止所有活动并关闭所有文件描述符之前,Stop 方法不应退出, 否则,因为 RGM 将认为该资源已经停止,而实际上它仍处于活动状态,就会导致数据被破环。 避免数据被破坏的最可靠方法是终止与该资源有关的本地节点上的所有进程。

在退出之前,Stop 方法应该轮询该资源,以确定该资源是否停止。 此外,您应该为此方法设置足够长的超时值。 例如,某些资源(如数据库守护程序)需要较长的时间进行停止操作,因此,就要求该方法具有较长的超时值。

RGM 对 Stop 方法失败的响应方式取决于 Failover_mode 特性的设置 (请参阅表 A–2)。

资源类型登记文件中的 STOP_TIMEOUT 特性用来设置资源的 Stop 方法的超时值。

Init

当资源变为被管理的资源时(资源所在的资源组从未被管理状态切换到已管理状态或资源创建在已被管理的资源组中),调用此可选方法以对资源执行一次性初始化。 对哪些节点调用该方法由 Init_nodes 资源特性决定。

Fini

当资源变为未被管理的资源时(资源所在的资源组切换到未被管理状态或从被管理的资源组中删除了该资源),调用此可选方法以清除资源。 对哪些节点调用该方法由 Init_nodes 资源特性决定。

Fini

此可选方法与 Init 相似,在包含资源的资源组处于 RGM 的管理之下后调用此方法可初始化与群集相连接的节点上的资源。 对哪些节点调用该方法由 Init_nodes 资源特性决定。 引导或重新引导操作导致该节点连接或重新连接群集时,将调用 Boot 方法。


注意:

InitFiniBoot 方法的失败将导致 syslog() 函数生成错误消息,但是不会影响该资源的 RGM 管理。


管理支持方法

对资源进行的管理操作包括设置和更改资源特性。 ValidateUpdate 回叫方法将启用资源类型实现来介入这些管理操作。

Validate

当创建了资源且管理操作更新资源或其资源组的特性时,调用此可选方法。 将对由资源类型的 Init_nodes 特性指定的一组群集节点调用此方法。 在进行创建或更新之前,将调用 Validate,任何节点上的方法返回失败出口代码都将导致创建或更新操作取消。

仅当通过管理操作更改资源或资源组特性时(而不是在 RGM 设置特性时或监视器设置资源组特性 StatusStatus_msg 时),才调用 Validate

Update

调用此可选方法将特性已更改的消息通知正在运行的资源。 在管理操作成功地设置了资源及其资源组后,将调用 Update。 对资源处于联机状态的节点调用此方法。 该方法将通过 API 存取函数来读取可能会影响活动资源的特性值并相应地调整正在运行的资源。

Update 方法的失败将导致 syslog() 函数生成错误消息,但是不会影响该资源的 RGM 管理。

与网络相关的回叫方法

使用网络地址资源的服务可能要求按某种顺序(相对于网络地址配置)执行启动或停止步骤。 以下可选回叫方法 Prenet_startPostnet_stop 使资源类型实现在配置/取消配置相关网络地址之前/之后执行特殊的启动和关闭操作。

Prenet_start

在配置同一资源组中的网络地址之前,将调用此可选方法执行特殊的启动操作。

Postnet_stop

在同一资源组中的网络地址配置为停止使用之后,调用此可选的方法执行特殊停机操作。

监视器控制回叫方法

资源类型实现中可包含一个用来监视资源性能、报告其状态或针对资源失败情况进行操作的程序(可选)。 在资源类型实现中,Monitor_startMonitor_stopMonitor_check 方法支持资源监视器的实现。

Monitor_start

资源启动后,将调用此可选方法来启动该资源的监视器。

Monitor_stop

在停止资源前,调用此可选方法停止资源的监视器。

Monitor_check

在资源组重新定位到节点之前,将调用此可选方法来评估该节点的可靠性。 必须实现 Monitor_check 方法,以免与当前运行的其它方法发生冲突。