本章讨论修改资源类型需要了解的问题。群集管理员用于升级资源的方法信息亦包括在其中。
本章包括以下主题:
安装和注册现有资源类型的新版本
允许注册给定资源类型的多个版本
将现有资源升级到新版本资源类型,而不必删除和重新创建该资源
要升级的资源类型称为支持升级的资源类型。可以更改现有资源类型的以下元素:
资源类型属性的属性
声明的资源属性(包括标准属性和扩展属性)集
声明的方法集
方法或监视器的实现
修改应用程序代码时,不是一定要修改资源类型。
为群集管理员提供升级资源类型的工具时,需要了解有哪些要求。本章介绍了设置这些工具需要了解的知识。
资源类型名称的三个部分分别是在 RTR 文件中指定为 vendor-id、resource-type 和 rt-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
资源类型名称的格式中介绍了资源类型名称的格式。
要确保您正在修改的资源类型是支持升级的,请在该资源类型的 RTR 文件中加入 #$upgrade 指令。在 #$upgrade 指令后面,为要支持的资源类型的每个早期版本添加零个或多于零个 #$upgrade_from 指令。
#$upgrade 和 #$upgrade_from 指令必须位于 RTR 文件中的资源类型属性声明和资源声明部分之间。请参见 rt_reg(4) 手册页。
#$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
RT_version。如果某个资源类型不具有版本,或具有的版本不是您以前在 RTR 文件中定义的版本,请指定空字符串 (“”)。
群集管理员可以升级指定的 RT_version 的条件和时间。
在 #$upgrade_from 指令中,请使用以下可调性值:
在对群集管理员可以升级资源的时间没有限制时使用。在升级过程中,资源可以完全处于联机状态。
在新资源类型版本的方法满足以下条件时使用:
Update、Stop、Monitor_check 和 Postnet_stop 方法兼容以前的资源类型版本的启动方法(Prenet_stop 和 Start)
Fini 方法兼容以前版本的 Init 方法
群集管理员必须在升级之前仅停止资源监视器程序。
当新资源类型版本的 Update、Stop、Monitor_check 或 Postnet_stop 方法满足以下条件时使用:
兼容以前版本的 Init 方法
不兼容以前资源类型版本的启动方法(Prenet_stop 和 Start)
群集管理员必须在升级之前使资源处于脱机状态。
与 WHEN_OFFLINE 相似。但是,群集管理员必须在升级之前禁用资源。
当新资源类型版本的 Fini 方法不兼容以前版本的 Init 方法时使用。升级之前,群集管理员必须将现有资源组切换到未管理状态。
如果 #$upgrade_from 指令的列表中没有显示资源类型的某个版本,则默认情况下,RGM 会将 WHEN_UNMANAGED 可调性强加于该版本。
用于防止将现有资源升级到新版本资源类型。群集管理员必须删除和重新创建资源。
更改 RTR 文件中的内容时,需要更改的只是 RT_version 属性。为此属性选择值,该值可以清楚地表明此版本的资源类型是最新版本。
请勿在 RTR 文件中的 RT_version 字符串中使用以下字符(否则资源类型的注册将失败):
空格键
Tab
斜杠 (/)
反斜杠 (\)
星号 (*)
问号 (?)
逗号 (,)
分号 (;)
左方括号 ([)
右方括号 (])
从 Sun Cluster 3.1 开始,RT_version 属性已成为强制属性(在 Sun Cluster 3.0 中为可选属性)。
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 不支持将现有资源升级到新资源类型。
以下是群集管理员升级资源类型时必须执行的操作或者将出现的情况:
如果现有资源属性不满足新版本资源类型的验证条件,则群集管理员必须提供有效值。群集管理员必须在出现以下情况时这样做:
新版本资源类型没有默认值并且使用了早期版本中未声明的属性。
现有资源所使用的属性值在新版本中未声明或无效。将从资源中删除未在新版本的资源类型中声明的已声明属性。
从不支持的资源类型版本进行的任何升级尝试都将失败。
升级之后,资源将从新版本资源类型继承所有属性的资源属性。
如果您在 RTR 文件中更改了资源类型的默认值,则现有资源将继承新的默认值。即使将属性声明为仅在 AT_CREATION 或 WHEN_DISABLED 时可调,仍会继承新的默认值。群集管理员创建的相同类型的属性也会继承此默认值。但是,如果群集管理员为属性指定新的默认值,则新默认值将覆盖 RTR 文件中指定的默认值。
将在 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 文件?
是否更改属性的缺省值或可调性?
是否更改属性的 min 或 max 值?
升级过程中是否添加或删除属性?
是否更改监视器代码?
是否更改方法代码?
新方法、监视器代码或两者是否兼容以前的版本?
这些问题的答案将有助于您确定要对新资源类型使用的正确封包。
修改资源类型时,您不是一定要创建新方法或监视器代码。例如,您可能仅更改资源属性的默认值或可调性。在这种情况下,由于您没有更改方法代码,因而只需要可读取 RTR 文件的新有效路径名称。
如果不再需要注册旧资源类型,则可以使新 RTR 文件覆盖以前的版本。否则,将 RTR 文件置于新路径中。
如果升级更改了属性的默认值或可调性,则使用新版本资源类型的 Validate 方法,来验证现有属性对于新资源类型是否有效。如果无效,则群集管理员可以将现有资源的属性更改为正确值。如果升级更改了 min、max 或 type 属性,则 scrgadm 命令将在群集管理员升级资源类型时自动验证这些约束。
如果升级添加了新属性或删除了旧属性,则可能需要更改回调方法或监视器代码。
如果仅更改资源类型的监视器代码,则可以使用软件包安装程序覆盖监视器二进制文件。
如果仅更改资源类型中的方法代码,则必须确定新方法代码是否兼容以前的方法代码。此问题的答案将确定新方法代码是必须存储在新路径中还是覆写以前的方法。
如果您可以将新 Stop、Postnet_stop 和 Fini 方法(如果已声明)应用于由以前版本的 Start、Prenet_stop 或 Init 方法初始化或启动的资源,则可以使新方法覆写以前的方法。
如果将新默认值应用于属性将导致方法(例如 Stop、Postnet_stop 或 Fini)出现故障,则在升级资源类型时,群集管理员必须相应地限制资源的状态。
当通过限制 Type_version 属性的可调性来升级资源时,应让群集管理员限制资源的状态。
封包的一种方法是包括软件包中仍支持的资源类型的所有早期版本。此方法允许新版本的软件包替换旧版本的软件包,而无需覆写或删除方法的以前路径。您必须确定要支持的以前版本的数量。
下表总结了要用于新资源类型的封包方案。
表 4–1 确定要使用的封包方案
更改类型 |
可调性值 |
封包方案 |
---|---|---|
仅在 RTR 文件中进行属性更改。 |
ANYTIME |
仅传送新 RTR 文件。 |
更新方法。 |
ANYTIME |
将已更新的方法置于与以前方法不同的路径中。 |
安装新监视器程序。 |
WHEN_UNMONITORED |
仅覆写以前版本的监视器。 |
更新方法。 新 Update 和 Stop 方法不兼容以前的 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 文件而不更改方法和监视器代码,则告知群集管理员使节点保持在群集模式下运行。还应告知群集管理员使针对所有资源类型的监视保持在打开状态。
向群集管理员说明何时可以将资源升级到新版本的资源类型。群集管理员根据 RTR 文件中每个版本资源的 #$upgrade_from 指令的可调性来升级资源类型,如下所示:
随时 (ANYTIME)
仅在资源未受监视时 (WHEN_UNMONITORED)
仅在资源处于脱机状态时 (WHEN_OFFLINE)
仅在禁用资源时 (WHEN_DISABLED)
仅在资源组未受管理时 (WHEN_UNMANAGED)
此示例显示了 #$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 |
任何时候 |
所有其他版本 |
仅在资源组未受管理时 |
当您对资源类型进行某些更改时,要求群集管理员在升级时修改现有资源的属性。本部分说明了这样的更改。您可以进行的这样的更改概如下示:
更改现有资源类型属性的默认设置
引入资源类型的新扩展属性
删除资源类型的现有属性
更改您为资源类型声明的标准属性集
更改诸如 min、max、arraymin、arraymax、default 和 tunability 之类的资源属性的属性
更改您已声明的方法集
更改方法或默认监视器的实现