本章提供有关普通数据服务 (GDS) 方面的信息和说明如何创建使用 GDS 的服务。您可以使用 SunPlex Agent Builder 或标准的 Sun Cluster 管理命令来创建此服务。
GDS 是一种机制,它通过将支持网络的和不支持网络的简单应用程序插入到 Sun Cluster 资源组管理 (RGM) 框架中,从而使这些应用程序具有高可用性或可伸缩性。为使应用程序具有高可用性和可伸缩性,通常您必须为代理编写代码,而使用此机制,则不需要您这样做。
GDS 是一项单独的、预编译的数据服务。您无法修改预编译的数据服务及其组件、回调方法 (rt_callbacks (1HA)) 实现和资源类型注册文件 (rt_reg( 4))。
普通数据服务资源类型 SUNW.gds 包含在 SUNWscgds 软件包中。请在群集安装过程中使用 scinstall 实用程序安装此软件包(请参见 scinstall( 1M) 手册页)。SUNWscgds 软件包中包含下列文件:
# pkgchk -v SUNWscgds /opt/SUNWscgds /opt/SUNWscgds/bin /opt/SUNWscgds/bin/gds_monitor_check /opt/SUNWscgds/bin/gds_monitor_start /opt/SUNWscgds/bin/gds_monitor_stop /opt/SUNWscgds/bin/gds_probe /opt/SUNWscgds/bin/gds_svc_start /opt/SUNWscgds/bin/gds_svc_stop /opt/SUNWscgds/bin/gds_update /opt/SUNWscgds/bin/gds_validate /opt/SUNWscgds/etc /opt/SUNWscgds/etc/SUNW.gds |
与使用 SunPlex Agent Builder 生成的源代码模型(请参见 scdscreate( 1HA) 手册页)或标准的 Sun Cluster 管理命令相比较,GDS 具有以下优点:
GDS 易于使用。
GDS 及其方法都是预编译的,因此无法进行修改。
SunPlex Agent Builder 可以用来为您的应用程序生成脚本,并将些脚本放置到一个可在多个群集间重复使用的 Solaris 软件包中。
虽然使用 GDS 有很多优点,但还是存在不宜使用 GDS 机制的情况。在以下情况中,就不适合使用 GDS 机制:
当所需的控制力度超出了使用预编译的资源类型所能提供的范围时,例如,需要添加扩展特性或更改缺省值时
需要修改源代码以添加特殊功能
使用 SunPlex Agent Builder
使用标准的 Sun Cluster 管理命令
使用 SunPlex Agent Builder 并选择 GDS 作为生成的源代码的类型。使用用户输入的内容生成一组脚本,以便为给定的应用程序配置资源。
虽然此方法使用了 SUNWscgds 中预编译的数据服务代码,但还是需要系统管理员使用标准的 Sun Cluster 管理命令来创建和配置资源。请参见 scrgadm( 1M) 和 scswitch( 1M) 手册页。
正如如何使用 Sun Cluster 管理命令来创建使用 GDS 且具有高可用性的服务和如何使用 Sun Cluster 管理命令来创建使用 GDS 的可伸缩服务等过程所示,需要在键盘上输入大量的信息才能发出有关的 scrgadm 命令和 scswitch 命令。
结合 SunPlex Agent Builder 使用 GDS 可以简化该过程,因为这会生成可以为您发出 scrgadm 和 scswitch 命令的脚本。
使用 GDS,您可以记录一些从 GDS 传递到 GDS 所启动的脚本中的相关信息。此相关信息包括启动方法、探测方法和停止方法的状态以及特性变量的信息。您可以使用此信息来诊断脚本中存在的问题或错误,或者另作他用。
请使用Log_level 特性中介绍的 Log_level 特性来指定 GDS 要记录的消息的级别或类型。您可以指定 NONE、INFO 或 ERR。
以下两个 GDS 日志文件放置在目录 /var/cluster/logs/DS/resource_group_name/ resource_name 中:
start_stop_log.txt,其中包含由资源的启动和停止方法记录的消息
probe_log.txt,其中包含由资源监视器记录的消息
下例显示了 start_stop_log.txt 中所包含的信息的类型:
10/20/2004 12:38:05 phys-node-1 START-INFO> Start succeeded. [/home/brianx/sc/start_cmd] 10/20/2004 12:42:11 phys-node-1 STOP-INFO> Successfully stopped the application
下例显示了 probe_log.txt 中所包含的信息的类型:
10/20/2004 12:38:15 phys-node-1 PROBE-INFO> The GDS monitor (gds_probe) has been started 10/20/2004 12:39:15 phys-node-1 PROBE-INFO> The probe result is 0 10/20/2004 12:40:15 phys-node-1 PROBE-INFO> The probe result is 0 10/20/2004 12:41:15 phys-node-1 PROBE-INFO> The probe result is 0
如果您的应用程序不支持网络,则必须同时给出 Start_command 扩展特性以及 Port_list 特性。如果您的应用程序支持网络,则必须仅给出 Port_list 特性。
Start_command 扩展特性中指定的启动命令用来启动应用程序。它必须是一条具有一些参数的 UNIX 命令,这些参数可以直接传给 shell 来启动应用程序。
Port_list 特性必须在 SunPlex Agent Builder 所创建的启动脚本中指定,或者如果您使用的是标准的 Sun Cluster 管理命令,则必须随 scrgadm 命令一同指定。
Network_resources_used
Stop_command(扩展特性)
Probe_command(扩展特性)
Start_timeout
Stop_timeout
Probe_timeout(扩展特性)
Child_mon_level(扩展特性,只用于标准的管理命令)
Failover_enabled(扩展特性)
Stop_signal(扩展特性)
Log_level(扩展特性)
此特性的缺省值为空。如果应用程序需要绑定到一个或多个特定的地址,则必须指定此特性。如果忽略此特性或将其指定为 Null,则应用程序会被认为是侦听所有地址。
在创建 GDS 资源之前,必须已经配置了一种 LogicalHostname 资源或 SharedAddress 资源。有关如何配置 LogicalHostname 或 SharedAddress 资源的信息,请参见《Sun Cluster 数据服务规划和管理指南(适用于 Solaris OS)》。
要指定一个值,请指定一个或多个资源名称。每个资源名称都可以包含一个或多个 LogicalHostname 或一个或多个 SharedAddress。有关详细信息,请参见 r_properties (5) 手册页。
停止命令必须停止 应用程序并仅在应用程序完全停止后返回。它必须是一条完整的 UNIX 命令,可以直接传给某个 shell 来停止应用程序。
如果给出了 Stop_command 扩展特性,则 GDS 的停止方法将使用 80% 的停止超时时间来发出停止命令。不管发出停止命令后的结果如何,GDS 的停止方法都将用 15% 的停止超时时间发送 SIGKILL。剩余的 5% 的超时时间将用于内务处理开销。
如果忽略停止命令,GDS 将尝试使用在 Stop_signal 中指定的信号来停止应用程序。
probe 命令可定期检查给定应用程序的运行状况。它必须是一条结合参数使用的 UNIX 命令,可以直接传给某个 shell 来探测应用程序。如果应用程序运行正常,则探测命令返回时的退出状态为 0。
探测命令的退出状态用于确定应用程序故障的严重程度。此退出状态(又称探测状态)必须是一个介于 0(表示成功)和 100(表示完全失败)之间的整数。探测状态还有一个特殊值 201,在未将 "Failover_enabled" 设置为 "FALSE" 的情况下,该值将导致应用程序立即进行故障转移。探测状态用于 GDS 探测算法(请参见 scds_fm_action( 3HA) 手册页),可决定是从本地重新启动应用程序,还是将其故障转移到其他节点。如果退出状态为 201,则应用程序将立即进行故障转移。
如果忽略探测命令,则 GDS 将使用自带的简单探测方法连接到从 Network_resources_used 特性导出的或 scds_get_netaddr_list 输出的一组 IP 地址上的应用程序以进行探测。(请参见 scds_get_netaddr_list(3HA) 手册页)。如果连接成功,它将立即断开连接。如果可以成功地进行连接和断开连接,则该应用程序即被认为运行状况完好。
随 GDS 一起提供 probe 命令的目的仅在于为正常运行的、特定于应用程序的 probe 命令提供简单的替代命令。
此特性用来指定启动命令的启动超时值。有关其他信息,请参见Start_command 扩展特性。Start_timeout 的缺省值为 300 秒。
此特性用来指定停止命令的停止超时值。有关其他信息,请参见Stop_command 特性。Stop_timeout 的缺省值为 300 秒。
此特性用来指定探测命令的超时值。有关其他信息,请参见Probe_command 特性。Probe_timeout 的缺省值为 30 秒。
如果使用的是标准的 Sun Cluster 管理命令,则您可以使用此选项。如果使用的是 SunPlex Agent Builder,则不能使用此选项。
此特性用来控制通过进程监视工具 (PMF) 监视的进程。它指定了一个级别,在该级别之内的所有派生子进程都将被监视。此特性的作用类似于 pmfadm 命令的 -C 参数。请参见 pmfadm(1M) 手册页。
忽略此特性或将其设置为缺省值 -1 所产生的效果与忽略 pmfadm 命令的 -C 选项相同。也就是说,所有子进程(以及它们的子孙进程)都会受到监视。
此布尔型扩展特性用于控制资源的故障转移方式。如果将此扩展特性设置为 true,则只要应用程序在 retry_interval 中指定的秒内重启的次数超过 retry_count 中指定的次数,该应用程序就将进行故障转移。
如果将此特性设置为 false,则只要应用程序在 retry_interval 中指定的秒内重启的次数超过 retry_count 中指定的次数,该应用程序就不再重启或向另一个节点进行故障转移。
此特性可用于阻止应用程序资源启动对其资源组的故障转移。此特性的缺省值为 true。
GDS 使用此整型扩展特性的值来确定通过 PMF 停止应用程序时所使用的信号。有关您可以指定的整数值的列表,请参见 signal( 3HEAD) 手册页。缺省值为 15 ( SIGTERM)。
此特性用来指定由 GDS 记录的诊断消息的级别或类型。您可以将此特性指定为 NONE、INFO 或 ERR。如果指定为 NONE,则 GDS 将不会记录诊断消息。如果指定为 INFO,则仅记录信息消息。如果指定为 ERR,则仅记录错误消息。缺省情况下,GDS 不记录诊断消息 (NONE)。
您可以使用 SunPlex Agent Builder 创建使用 GDS 的服务。第 9 章,SunPlex Agent Builder中详细介绍了 SunPlex Agent Builder。
成为超级用户或作为等效角色。
# /usr/cluster/bin/scdsbuilder |
将显示 SunPlex Agent Builder 的“创建”屏幕。
键入供应商名称。
键入应用程序名称。
供应商名称和应用程序名称加起来的总长度不能超过 9 个字符。它将用作脚本的软件包名称。
转到工作目录。
您可以使用“浏览”下拉菜单选择该目录,而不必键入该路径。
选择该数据服务是可伸缩的,还是可进行故障转移的。
不必选择“支持网络”,因为在创建 GDS 时它是缺省值。
选择“GDS”。
(可选的) 更改所示的“RT 版本”缺省值。
不可在“RT 版本”字段中使用以下字符:空格、制表符、斜杠 (/)、反斜杠 (\)、星号 (*)、问号 (?)、逗号 (,)、分号 (;)、左方括号 ([) 或右方括号 (])。
单击“完成”。
Agent Builder 将创建脚本。创建服务的结果将显示在“输出记录”窗口中。
“创建”按钮已被禁用。现在您就可以开始配置该脚本了。
单击“下一步”。
将显示“配置”屏幕。
键入启动命令所在的位置,或单击“浏览”找到启动命令。
您可以指定特性变量。在特性变量中介绍了特性变量。
(可选的) 键入停止命令所在的位置,或单击“浏览”找到停止命令。
您可以指定特性变量。在特性变量中介绍了特性变量。
(可选的) 键入探测命令所在的位置,或单击“浏览”找到探测命令。
您可以指定特性变量。在特性变量中介绍了特性变量。
(可选的) 为启动命令、停止命令和探测命令指定超时值。
单击“配置”。
Agent Builder 即开始配置该脚本。
Agent Builder 将供应商名称和应用程序名称连接起来创建软件包名称。
将创建该脚本的软件包,并将其放置在以下目录中:
工作目录/供应商名称应用程序/pkg |
例如,/export/wdir/NETapp/pkg。
以超级用户身份,将已完成的软件包安装到群集中的所有节点上。
# cd /export/wdir/NETapp/pkg # pkgadd -d . NETapp |
以下是 pkgadd 安装的文件:
/opt/NETapp /opt/NETapp/README.app /opt/NETapp/man /opt/NETapp/man/man1m /opt/NETapp/man/man1m/removeapp.1m /opt/NETapp/man/man1m/startapp.1m /opt/NETapp/man/man1m/stopapp.1m /opt/NETapp/man/man1m/app_config.1m /opt/NETapp/util /opt/NETapp/util/removeapp /opt/NETapp/util/startapp /opt/NETapp/util/stopapp /opt/NETapp/util/app_config |
各手册页和脚本名称分别相当于在此前输入的“应用程序名称”前面加上脚本名(例如,startapp)。
若要查看手册页,需要指定手册页的路径。例如,要查看 startapp(1M) 手册页,请键入:
# man -M /opt/NETapp/man startapp |
在群集的一个节点上,配置资源并启动应用程序。
# /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list |
startapp 脚本的参数视资源类型的不同(故障转移或可伸缩)而有所变化。请检查定制的手册页或者运行不带任何参数的 startapp 脚本,以显示用法说明。
# /opt/NETapp/util/startapp The resource name of LogicalHostname or SharedAddress must be specified. For failover services: Usage: startapp -h logicalhostname -p port_and_protocol_list [-n ipmpgroup_adapter_list] For scalable services: Usage: startapp -h shared_address_name -p port_and_protocol_list [-l load_balancing_policy] [-n ipmpgroup/adapter_list] [-w load_balancing_weights] |
SunPlex Agent Builder 根据您在软件包创建过程中输入的信息生成三个脚本和一个配置文件。该配置文件指定了资源组和资源类型的名称。
这些脚本分别是:
启动脚本:用于配置资源,以及启动在 RGM 控制下的应用程序。
停止脚本:用于停止应用程序,以及拆分资源和资源组。
删除脚本:用于删除由启动脚本所创建的资源和资源组。
这些脚本的接口和行为与 SunPlex Agent Builder 为不基于 GDS 的代理生成的实用程序脚本的接口和行为相同。这些脚本全部放在一个可在 Solaris 中安装的软件包中。该软件包可在多个群集中重复使用。
您可以定制配置文件,以便为资源组或其他参数提供定制的名称,这些名称通常在 scrgadm 命令的输入内容中给出。如果您不定制这些脚本,则 SunPlex Agent Builder 将为 scrgadm 参数提供缺省值。
本节将介绍向 GDS 输入参数的方法。请使用现有的 Sun Cluster 管理命令(例如,scrgadm 和 scswitch)来使用和管理 GDS。
如果脚本的功能够用,则不必输入本节所述的低级管理命令。但是,如果需要更细致地控制基于 GDS 的资源,则可以输入低级管理命令。这些命令均由脚本执行。
成为超级用户或作为等效角色。
注册资源类型 SUNW.gds。
# scrgadm -a -t SUNW.gds |
创建资源组,其中包含 LogicalHostname 资源和故障转移服务本身。
# scrgadm -a -g haapp_rg |
为 LogicalHostname 资源创建资源。
# scrgadm -a -L -g haapp_rs -l hhead |
为故障转移服务本身创建资源。
# scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \ -y Scalable=false -y Start_timeout=120 \ -y Stop_timeout=120 -x Probe_timeout=120 \ -y Port_list="2222/tcp" \ -x Start_command="/export/ha/appctl/start" \ -x Stop_command="/export/ha/appctl/stop" \ -x Probe_command="/export/app/bin/probe" \ -x Child_mon_level=0 -y Network_resources_used=hhead \ -x Failover_enabled=true -x Stop_signal=9 |
将资源组 haapp_rg 联机。
# scswitch -Z -g haapp_rg |
成为超级用户或作为等效角色。
注册资源类型 SUNW.gds。
# scrgadm -a -t SUNW.gds |
为 SharedAddress 资源创建资源组。
# scrgadm -a -g sa_rg |
在 sa_rg 上创建 SharedAddress 资源。
# scrgadm -a -S -g sa_rg -l hhead |
为可伸缩服务创建资源组。
# scrgadm -a -g app_rg -y Maximum_primaries=2 \ -y Desired_primaries=2 -y RG_dependencies=sa_rg |
为可伸缩服务自身创建资源组。
# scrgadm -a -j app_rs -g app_rg -t SUNW.gds \ -y Scalable=true -y Start_timeout=120 \ -y Stop_timeout=120 -x Probe_timeout=120 \ -y Port_list="2222/tcp" \ -x Start_command="/export/app/bin/start" \ -x Stop_command="/export/app/bin/stop" \ -x Probe_command="/export/app/bin/probe" \ -x Child_mon_level=0 -y Network_resource_used=hhead \ -x Failover_enabled=true -x Stop_signal=9 |
将包含网络资源的资源组联机。
# scswitch -Z -g sa_rg |
将资源组 app_rg 联机。
# scswitch -Z -g app_rg |
SunPlex Agent Builder 还包括一个命令行界面,它可以提供图形用户界面所提供的功能。此界面由 scdscreate 和 scdsconfig 命令组成。请参见 scdscreate (1HA) 和 scdsconfig(1HA) 手册页。
本节将介绍如何使用命令行界面来执行使用 SunPlex Agent Builder 创建使用 GDS 的服务中所述的各个步骤。
成为超级用户或作为等效角色。
创建服务。
对于故障转移服务,请键入:
# scdscreate -g -V NET -T app -d /export/wdir |
对于可伸缩服务,请键入:
# scdscreate -g -s -V NET -T app -d /export/wdir |
-d 参数是可选的。如果不指定此参数,则当前目录将成为工作目录。
配置服务。
# scdsconfig -s "/export/app/bin/start" -t "/export/app/bin/stop" \ -m "/export/app/bin/probe" -d /export/wdir |
您可以指定特性变量。在特性变量中介绍了特性变量。
仅 start 命令是必需的。所有其他参数都是可选的。
将已完成的软件包安装到群集中的所有节点上。
# cd /export/wdir/NETapp/pkg # pkgadd -d . NETapp |
以下是 pkgadd 所安装的文件:
/opt/NETapp /opt/NETapp/README.app /opt/NETapp/man /opt/NETapp/man/man1m /opt/NETapp/man/man1m/removeapp.1m /opt/NETapp/man/man1m/startapp.1m /opt/NETapp/man/man1m/stopapp.1m /opt/NETapp/man/man1m/app_config.1m /opt/NETapp/util /opt/NETapp/util/removeapp /opt/NETapp/util/startapp /opt/NETapp/util/stopapp /opt/NETapp/util/app_config |
各手册页和脚本名称对应于之前在“应用程序名称”中输入的字符串并以脚本名称为前缀的名称(例如,startapp)。
若要查看手册页,需要指定手册页的路径。例如,要查看 startapp(1M) 手册页,请键入:
# man -M /opt/NETapp/man startapp |
在群集的一个节点上,配置资源并启动应用程序。
# /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list |
startapp 脚本的参数视资源类型的不同(故障转移或可伸缩)而有所变化。请检查定制的手册页或者运行不带任何参数的 startapp 脚本,以显示用法说明。
# /opt/NETapp/util/startapp The resource name of LogicalHostname or SharedAddress must be specified. For failover services: Usage: startapp -h logicalhostname -p port_and_protocol_list [-n ipmpgroup/adapter_list] For scalable services: Usage: startapp -h shared_address_name -p port_and_protocol_list [-l load_balancing_policy] [-n ipmpgroup/adapter_list] [-w load_balancing_weights] |