本章提供了有关普通数据服务 (GDS) 的信息,并说明了如何利用 SunPlex Agent Builder 或者标准的 Sun Cluster 管理命令创建一个使用 GDS 的服务。
GDS 是一种机制,它将简单的、能支持网络的应用程序插入 Sun Cluster 资源组管理框架中,从而使它们具有高可用性或可伸缩性。 此机制不需要为代理编写代码,而编写代码是使应用程序具有高可用性或可伸缩性的通常做法。
GDS 是一项单独的、预编译的数据服务。 您不能修改预编译的数据服务及其组件、回叫方法 (rt_callbacks (1HA)) 实现和资源类型登记文件 (rt_reg( 4))。
普通数据服务资源类型 SUNW.gds 包含在 SUNWscgds 软件包中。 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 中安装的软件包中。该软件包可在多个群集中重复使用。
使用 SunPlex Agent Builder
使用标准的 Sun Cluster 管理命令
使用 SunPlex Agent Builder 并选择 GDS 作为生成的源代码的类型。 使用用户所输入的内容来生成一组驱动脚本,而这些脚本将为给定的应用程序配置资源。
此方法使用 SUNWscgds 中预编译的数据服务代码,但要求系统管理员使用标准的 Sun Cluster 管理命令(scrgadm(1M) 和 scswitch(1M))创建和配置资源。
正如如何使用 Sun Cluster 管理命令来创建使用 GDS 且具有高可用性的服务和标准的 Sun Cluster 管理命令(用于创建使用 GDS 的、可伸缩的服务)等过程所示,需要在键盘上输入大量的信息才能发出有关的 scrgadm 命令和 scswitch 命令。
如果将 GDS 和 SunPlex Agent Builder 结合使用,则可简化此过程,因为它会产生驱动脚本,而这些驱动脚本可发出 scrgadm 命令和 scswitch 命令。
虽然使用 GDS 有很多优点,但还是存在不宜使用 GDS 机制的情况。 不宜 使用 GDS 机制的情况有:
使用预编译的资源类型时所需的控制多于可用控制, 例如,需要增加扩展特性或更改缺省特性时。
需要修改源代码以增加特殊的功能。
您想要使用多个进程树时。
您想要使用不支持网络的应用程序时。
Start_command(扩展特性)
Port_list
Start_command 扩展特性中指定的 start 命令可启动应用程序。 它必须是一条具有完整变量的 UNIX 命令,可以直接传给某个 shell 来启动应用程序。
Port_list 特性可标识应用程序所侦听的端口列表。 Port_list 特性必须根据由 SunPlex Agent Builder 创建的启动脚本而指定,或是根据 scrgadm 命令而指定(如果您使用的是标准的 Sun Cluster 管理命令)。
Network_resources_used
Stop_command(扩展特性)
Probe_command(扩展特性)
Start_timeout
Stop_timeout
Probe_timeout(扩展特性)
Child_mon_level(扩展特性,只用于标准的管理命令)
Failover_enabled(扩展特性)
Stop_signal(扩展特性)
此特性的缺省值为空。 如果应用程序需要绑定到一个或多个特定的地址,则必须指定此特性。 如果忽略此特性或者将其指定为 Null,则应用程序将会被认为是侦听所有地址。
在创建 GDS 资源之前,必须已经配置了一种 LogicalHostname 资源或 SharedAddress 资源。 有关如何配置 LogicalHostname 或 SharedAddress 资源的信息,请参阅《Sun Cluster 数据服务规划和管理指南(适用于 Solaris OS)》。
要指定一个值,请指定一个或多个资源名称;每个资源名称可以包含一个或多个 LogicalHostname 或者包含一个或多个 SharedAddress。 有关详细信息,请参阅 r_properties (5)。
stop 命令必须停止应用程序并仅在应用程序完全停止后返回。 它必须是一条完整的 UNIX 命令,可以直接传给某个 shell 来停止应用程序。
如果提供了 Stop_command,则 GDS 的 stop 方法将使用 80% 的停止超时时间来启动 stop 命令。 不管发出该 stop 命令后的结果如何,GDS 的 stop 方法都将用 15% 的停止超时时间发送 SIGKILL。 剩余的 5% 的超时时间将用于内务处理开销。
如果忽略 stop 命令,GDS 将试图使用在 Stop_signal 中指定的信号来停止应用程序。
probe 命令定期检查给定应用程序的运行状况。 它必须是一条具有完整变量的 UNIX 命令,可以直接传给某个 shell 来探测该应用程序。 如果应用程序运行成功,则 probe 命令返回 0 退出状态。
probe 命令的退出状态可用于确定应用程序故障的严重程度。 此退出状态(又称探测状态)必须是一个介于 0(表示成功)和 100(表示完全失败)之间的整数。 探测状态也可以是一个特殊值 201,它将导致应用程序立即进行故障切换,除非 Failover_enabled 被设置为 false。 GDS 探测算法中使用探测状态(请参阅scds_fm_action(3HA))来确定是在本地重新启动应用程序还是将其故障切换到另一个节点;如果退出状态是 201,立即对应用程序进行故障切换。
如果忽略 probe 命令,则 GDS 将提供其自身的简单 probe 命令。它将与从 Network_resources_used 特性或 scds_get_netaddr_list(3HA) 的输出结果中得到的 IP 地址集中的应用程序进行连接。 如果连接成功,它将立即断开连接。 如果能成功地进行连接和断开连接,则该应用程序即被认为运行状态完好。
随 GDS 一起提供 probe 命令的目的仅在于为正常运行的、特定于应用程序的 probe 命令提供简单的替代命令。
此特性用于指定 start 命令的启动超时(有关其它信息,请参阅Start_command 扩展特性)。 Start_timeout 的缺省值为 300 秒。
此特性用于指定 stop 命令的停止超时(有关其它信息,请参阅Stop_command 特性)。 Stop_timeout 的缺省值为 300 秒。
此特性用于指定 probe 命令的超时值(有关其它信息,请参阅Probe_command 特性)。 Probe_timeout 的缺省值为 30 秒。
此特性提供进程通过 PMF 获得监视的控制。 它指定了一个级别,在该级别之内的所有派生子进程都将被监视。 这类似于 pmfadm(1M) 命令的 -C 变量。
忽略此特性,或将其设置为缺省值 -1,与忽略 pmfadm 命令中的 -C 选项具有相同的效果;即,所有子项(和它们的子孙)都将受到监视。
此选项只能用标准的 Sun Cluster 管理命令来指定。 如果您使用的是 SunPlex Agent Builder,则无法指定此选项。
此布尔扩展特性用于控制资源的故障切换方式。 如果此扩展特性被设置为 true,则当应用程序在 retry_interval 秒内重新启动的次数超过 retry_count 时,该应用程序将进行故障切换。
如果将此扩展特性设置为 false,则只要应用程序在 retry_interval 秒内重启的次数超过 retry_count 次,该应用程序就不再重启或向另一个节点进行故障切换。
此扩展特性可用于阻止应用程序资源启动对其资源组的故障切换。 缺省值是 true。
GDS 使用此整数扩展特性的值来确定通过 PMF 停止应用程序时所使用的信号。 有关可以指定的整数值的列表,请参阅 signal(3HEAD)。 缺省值为 15 (SIGTERM)。
可以使用 SunPlex Agent Builder 创建使用 GDS 的服务。 第 9 章,SunPlex Agent Builder中详细介绍了 SunPlex Agent Builder。
# /usr/cluster/bin/scdsbuilder |
将出现 SunPlex Agent Builder 面板。
在“Vendor Name”中输入供应商名称。
在“Application Name”中输入应用程序名称。
供应商名称和应用程序名称加起来不能超过 9 个字符。 它被作为驱动脚本的软件包名称。
转到工作目录。
可以使用“Browse”按钮选择一个目录,而不必键入路径。
选择该数据服务是可进行伸缩,还是可进行故障切换。
不必选择“Network Aware”,因为在创建 GDS 时它是缺省值。
选择“GDS”。
单击“Create”按钮,以创建驱动脚本。
SunPlex Agent Builder 面板显示出服务的创建结果。 “Create”按钮将灰显,您随即可以使用“Next”按钮。
创建驱动脚本之后,需要使用 SunPlex Agent Builder 配置新服务。
单击“Next”按钮,之后将出现配置面板。
输入 Start 命令的位置,或者使用“Browse”按钮找到 Start 命令。
(可选的) 输入 Stop 命令,或者使用“Browse”按钮找到 Stop 命令。
(可选的) 输入 Probe 命令,或者使用“Browse”按钮找到 Probe 命令。
(可选的) 为 Start、Stop 和 Probe 等命令指定超时值。
单击“Configure”,开始对驱动脚本进行配置。
该软件包的名称将由“Vendor Name”和“Application Name”综合而成。
将创建驱动脚本软件包,并将其放在以下位置:
<working-dir>/<vendor_name><application>/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 手册页,请使用:
# man -M /opt/NETapp/man startapp |
在群集的一个节点上,配置资源并启动应用程序。
# /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list> |
启动脚本的变量根据资源类型的不同(故障切换或可伸缩) 而有所变化。 请检查定制的手册页或者运行不带任何变量的启动脚本,以获得用法语句。
# /opt/NETapp/util/startapp The resource name of LogicalHostname or SharedAddress must be specified. For failover services: Usage: startapp -h <logical host name> -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 的资源进行更为严格的控制,则可以这样做。 这些命令实际上是驱动脚本所执行的命令。
# 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 具有一个功能与 GUI 界面相同的命令行界面。 此界面由 scdscreate( 1HA) 和 scdsconfig (1HA) 命令组成。 本节中的操作与基于 GUI 的过程使用 Agent Builder 的命令行版本创建使用 GDS 的服务具有相同的功能,但不使用 GUI 界面。
创建服务。
对于故障切换服务,请使用:
# 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 手册页,请使用:
# man -M /opt/NETapp/man startapp |
在群集的一个节点上,配置资源并启动应用程序。
# /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list> |
启动脚本的变量根据资源类型的不同(故障切换或可伸缩) 而有所变化。 请检查定制的手册页或者运行不带任何变量的启动脚本,以获得用法语句。
# /opt/NETapp/util/startapp The resource name of LogicalHostname or SharedAddress must be specified. For failover services: Usage: startapp -h <logical host name> -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>] |