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

第 4 章 修改资源类型

本章讨论修改资源类型需要了解的问题。群集管理员用于升级资源的方法信息亦包括在其中。

本章包括以下主题:

有关修改资源类型的概述

群集管理员必须能够执行以下任务:

要升级的资源类型称为支持升级的资源类型。可以更改现有资源类型的以下元素:


注 –

修改应用程序代码时,不是一定要修改资源类型。


为群集管理员提供升级资源类型的工具时,需要了解有哪些要求。本章介绍了设置这些工具需要了解的知识。

设置资源类型注册文件的内容

资源类型名称

资源类型名称的三个部分分别是在 RTR 文件中指定为 vendor-idresource-typert-version 的属性。scrgadm 命令插入句号和冒号分界符来创建资源类型的名称:

vendor-id.resource-type:rt-version

vendor-id 前缀用来区别不同公司提供的具有相同名称的两个注册文件。为确保 vendor-id 是唯一的,请在创建资源类型时使用公司的股票代号。rt-version 用于区别相同基本资源类型的多个注册版本(升级)。

可以通过键入以下命令来获取全限定资源类型名称:


# scha_resource_get -O Type -R resource-name -G resource-group-name

使用 Sun Cluster 3.1 以前的版本注册的资源类型名称则继续使用以下语法:

vendor-id.resource-type

资源类型名称的格式中介绍了资源类型名称的格式。

指定 #$upgrade#$upgrade_from 指令

要确保您正在修改的资源类型是支持升级的,请在该资源类型的 RTR 文件中加入 #$upgrade 指令。在 #$upgrade 指令后面,为要支持的资源类型的每个早期版本添加零个或多于零个 #$upgrade_from 指令。

#$upgrade#$upgrade_from 指令必须位于 RTR 文件中的资源类型属性声明和资源声明部分之间。请参见 rt_reg(4) 手册页。


示例 4–1 RTR 文件中的 #$upgrade_from 指令

#$upgrade_from   "1.1"   WHEN_OFFLINE
#$upgrade_from   "1.2"   WHEN_OFFLINE
#$upgrade_from   "1.3"   WHEN_OFFLINE
#$upgrade_from   "2.0"   WHEN_UNMONITORED
#$upgrade_from   "2.1"   ANYTIME
#$upgrade_from   ""      WHEN_UNMANAGED

#$upgrade_from 指令的格式如下所示:

#$upgrade_from version tunability
version

RT_version。如果某个资源类型不具有版本,或具有的版本不是您以前在 RTR 文件中定义的版本,请指定空字符串 (“”)。

tunability

群集管理员可以升级指定的 RT_version 的条件和时间。

#$upgrade_from 指令中,请使用以下可调性值:

ANYTIME

在对群集管理员可以升级资源的时间没有限制时使用。在升级过程中,资源可以完全处于联机状态。

WHEN_UNMONITORED

在新资源类型版本的方法满足以下条件时使用:

  • UpdateStopMonitor_checkPostnet_stop 方法兼容以前的资源类型版本的启动方法(Prenet_stopStart

  • Fini 方法兼容以前版本的 Init 方法

群集管理员必须在升级之前仅停止资源监视器程序。

WHEN_OFFLINE

当新资源类型版本的 UpdateStopMonitor_checkPostnet_stop 方法满足以下条件时使用:

  • 兼容以前版本的 Init 方法

  • 不兼容以前资源类型版本的启动方法(Prenet_stopStart

群集管理员必须在升级之前使资源处于脱机状态。

WHEN_DISABLED

WHEN_OFFLINE 相似。但是,群集管理员必须在升级之前禁用资源。

WHEN_UNMANAGED

当新资源类型版本的 Fini 方法不兼容以前版本的 Init 方法时使用。升级之前,群集管理员必须将现有资源组切换到未管理状态。

如果 #$upgrade_from 指令的列表中没有显示资源类型的某个版本,则默认情况下,RGM 会将 WHEN_UNMANAGED 可调性强加于该版本。

AT_CREATION

用于防止将现有资源升级到新版本资源类型。群集管理员必须删除和重新创建资源。

更改 RTR 文件中的 RT_version

更改 RTR 文件中的内容时,需要更改的只是 RT_version 属性。为此属性选择值,该值可以清楚地表明此版本的资源类型是最新版本。

在 RTR 文件中的 RT_version 字符串中使用以下字符(否则资源类型的注册将失败):

从 Sun Cluster 3.1 开始,RT_version 属性已成为强制属性(在 Sun Cluster 3.0 中为可选属性)。

Sun Cluster 早期版本中的资源类型名称

Sun Cluster 3.0 中的资源类型名称不包含版本后缀,如下所示:

vendor-id.resource-type

即使在群集管理员将群集软件升级到 Sun Cluster 3.1 或更高版本之后,原来在 Sun Cluster 3.0 下注册的资源类型仍将继续具有遵循此语法的名称。与此相似,如果 RTR 文件是在运行 Sun Cluster 3.1 或更高版本的群集上注册的,则该文件中缺少 #$upgrade 指令的资源类型将被指定 Sun Cluster 3.0 格式的名称(不具有版本后缀)。

群集管理员可以在 Sun Cluster 3.0 中使用 #$upgrade 指令或 #$upgrade_from 指令来注册 RTR 文件。但是,Sun Cluster 3.0 不支持将现有资源升级到新资源类型。

群集管理员进行升级时将出现的情况

以下是群集管理员升级资源类型时必须执行的操作或者将出现的情况:


注 –

将在 Sun Cluster 3.0 中创建的资源升级到 Sun Cluster 的更高版本时,这些资源不从资源类型继承新的默认资源属性。此限制仅适用于从 Sun Cluster 3.0 群集升级的 Sun Cluster 3.1 群集。群集管理员可以通过为属性指定值并覆盖默认值来克服此限制。


实现资源类型监视器代码

群集管理员可以在 Sun Cluster 3.0 中注册支持升级的资源类型。但是,Sun Cluster 将记录无版本后缀的资源类型名称。为了可以在 Sun Cluster 3.0 和 Sun Cluster 3.1 中正常运行,此资源类型的监视器代码必须能够处理这两种命名约定:

vendor-id.resource-type:rt-version
vendor-id.resource-type

资源类型名称的格式中介绍了资源类型名称的格式。

群集管理员不能以两个不同的名称注册相同的资源类型版本两次。为了使监视器代码可以确定正确的名称,请在监视器代码中调用以下命令:

scha_resourcetype_get -O RT_VERSION -T VEND.myrt
scha_resourcetype_get -O RT_VERSION -T VEND.myrt:vers

然后,将输出值与 vers 进行比较。对于特定的 vers 值,这两个命令中只有一个会成功。

确定安装要求和封包

确定资源类型软件包的安装要求和封包时,请记住以下两点:

要确定将使用的正确封包,请考虑以下问题:

这些问题的答案将有助于您确定要对新资源类型使用的正确封包。

更改 RTR 文件须知

修改资源类型时,您不是一定要创建新方法或监视器代码。例如,您可能仅更改资源属性的默认值或可调性。在这种情况下,由于您没有更改方法代码,因而只需要可读取 RTR 文件的新有效路径名称。

如果不再需要注册旧资源类型,则可以使新 RTR 文件覆盖以前的版本。否则,将 RTR 文件置于新路径中。

如果升级更改了属性的默认值或可调性,则使用新版本资源类型的 Validate 方法,来验证现有属性对于新资源类型是否有效。如果无效,则群集管理员可以将现有资源的属性更改为正确值。如果升级更改了 minmaxtype 属性,则 scrgadm 命令将在群集管理员升级资源类型时自动验证这些约束。

如果升级添加了新属性或删除了旧属性,则可能需要更改回调方法或监视器代码。

更改监视器代码

如果仅更改资源类型的监视器代码,则可以使用软件包安装程序覆盖监视器二进制文件。

更改方法代码

如果仅更改资源类型中的方法代码,则必须确定新方法代码是否兼容以前的方法代码。此问题的答案将确定新方法代码是必须存储在新路径中还是覆写以前的方法。

如果您可以将新 StopPostnet_stopFini 方法(如果已声明)应用于由以前版本的 StartPrenet_stopInit 方法初始化或启动的资源,则可以使新方法覆写以前的方法。

如果将新默认值应用于属性将导致方法(例如 StopPostnet_stopFini)出现故障,则在升级资源类型时,群集管理员必须相应地限制资源的状态。

当通过限制 Type_version 属性的可调性来升级资源时,应让群集管理员限制资源的状态。

封包的一种方法是包括软件包中仍支持的资源类型的所有早期版本。此方法允许新版本的软件包替换旧版本的软件包,而无需覆写或删除方法的以前路径。您必须确定要支持的以前版本的数量。

确定要使用的封包方案

下表总结了要用于新资源类型的封包方案。

表 4–1 确定要使用的封包方案

更改类型 

可调性值 

封包方案 

仅在 RTR 文件中进行属性更改。 

ANYTIME

仅传送新 RTR 文件。 

更新方法。 

ANYTIME

将已更新的方法置于与以前方法不同的路径中。 

安装新监视器程序。 

WHEN_UNMONITORED

仅覆写以前版本的监视器。 

更新方法。 

UpdateStop 方法不兼容以前的 Start 方法。

WHEN_OFFLINE

将已更新的方法置于与以前方法不同的路径中。 

更新方法并将新属性添加到 RTR 文件中。新方法需要新属性。 

目标是允许所包含的资源组仍处于联机状态,但如果该资源组在某个节点上从脱机状态转变为联机状态,则防止该资源进入联机状态。 

WHEN_DISABLED

覆写方法的以前版本。 

更新方法并将新属性添加到 RTR 文件中。新方法不需要新属性。 

ANYTIME

覆写方法的以前版本。 

更新方法。新的 Fini 方法与旧的 Init 方法不兼容。

WHEN_UNMANAGED

将已更新的方法置于与以前方法不同的路径中。 

更新方法。不修改 RTR 文件。 

不适用。不修改 RTR 文件。 

覆写方法的以前版本。因为您未对 RTR 文件进行更改,所以无需注册或升级资源。 

针对已修改的资源类型提供的文档信息

《Sun Cluster Data Services Planning and Administration Guide for Solaris OS》中的“Upgrading a Resource Type”为群集管理员提供了可以用于如何升级资源类型的说明。为使群集管理员可以升级您修改的资源类型,本节中介绍了其他信息来作为以上说明的补充。

通常,创建新资源类型时,您需要提供具有以下用途的文档信息:

有关安装升级软件包之前应做事情的信息

向群集管理员说明在节点上安装升级软件包之前必须执行的操作,具体如下:

有关何时升级资源的信息

向群集管理员说明何时可以将资源升级到新版本的资源类型。群集管理员根据 RTR 文件中每个版本资源的 #$upgrade_from 指令的可调性来升级资源类型,如下所示:


示例 4–2 #$upgrade_from 定义群集管理员何时可以进行升级的方式

此示例显示了 #$upgrade_from 指令的可调性是如何影响群集管理员可以将资源升级到新版本资源类型的条件的。

#$upgrade_from   "1.1"   WHEN_OFFLINE
#$upgrade_from   "1.2"   WHEN_OFFLINE
#$upgrade_from   "1.3"   WHEN_OFFLINE
#$upgrade_from   "2.0"   WHEN_UNMONITORED
#$upgrade_from   "2.1"   ANYTIME
#$upgrade_from   ""      WHEN_UNMANAGED

版本 

群集管理员何时可以升级资源 

1.1、1.2 或 1.3 

仅在资源处于脱机状态时 

2.0 

仅在资源未受监视时 

2.1 

任何时候 

所有其他版本 

仅在资源组未受管理时 


有关对资源属性所作更改的信息

当您对资源类型进行某些更改时,要求群集管理员在升级时修改现有资源的属性。本部分说明了这样的更改。您可以进行的这样的更改概如下示: