Sun Cluster 3.0 5/02 补编

附录 F 普通数据服务

本附录提供了有关普通数据服务 (GDS) 的信息,并说明了如何利用 SunPlex Agent Builder 或者标准的 Sun Cluster 管理命令创建一项使用 GDS 的服务。

普通数据服务概述

普通数据服务 (GDS) 是一种机制,它将简单的、能支持网络的应用程序插入"Sun Cluster 资源组管理"(Sun Cluster Resource Group Management) 框架中,从而使它们具有高可用性和高可缩放性。此机制不需要为代理编写代码,而这是使应用程序具有高可用性和高缩放性的通常做法。

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

使用 GDS 的原因

与由 SunPlex Agent Builder 生成的源代码模型(请参阅 scdscreate(1HA))或者标准的 Sun Cluster 管理命令相比,使用 GDS 具有如下优点:

使用 GDS 的服务的创建方法

有两种方法可用于创建使用 GDS 的服务:

GDS 和 SunPlex Agent Builder

使用 SunPlex Agent Builder,并选择 GDS 作为所生成源代码的类型。使用用户所输入的内容来生成一组驱动脚本,而这些脚本将为给定的应用程序配置资源。

GDS 和标准的 Sun Cluster 管理命令

此方法利用在 SUNWscgds 中预编译好的数据服务代码,但要求系统管理员使用标准的 Sun Cluster 管理命令(scrgadm(1M) 和 scswitch(1M))来创建和配置该资源。

如何选择创建基于 GDS 的服务时所应使用的方法

正如"标准的 Sun Cluster 管理命令(用于创建使用 GDS 的、具有高可用性的服务)""标准的 Sun Cluster 管理命令(用于创建使用 GDS 的、可缩放的服务)"等过程所示,需要在键盘上输入大量的信息才能发出有关的 scrgadm 命令和 scswitch 命令。

如果将 GDS 和 SunPlex Agent Builder 结合使用,则可简化此过程,因为它会产生驱动脚本,而这些驱动脚本可发出 scrgadm 命令和 scswitch 命令。

什么情况下不宜使用 GDS

尽管使用 GDS 有很多优点,但在某些情况下使用 GDS 并不合适。在下述情况下不宜使用 GDS:

GDS 所要求输入的项目

必须提供下列特性:

Start_command

根据 Start_command 特性而指定的 start 命令可启动应用程序。 它必须是一条具有完整变量的 UNIX 命令,可以直接传给某个 shell 来启动应用程序。

Port_list

Port_list 确定应用程序所侦听端口的列表。Port_list 特性必须根据由 SunPlex Agent Builder 创建的启动脚本而指定,或是根据 scrgadm 命令而指定(如果您使用的是标准的 Sun Cluster 管理命令)。

GDS 的可选输入项目

GDS 的可选输入项目包括:

Network_resources_used

此特性的缺省值为 Null。如果应用程序需要绑定到一个或多个特定的地址,则必须指定此特性。如果忽略此特性或者将其指定为 Null,则应用程序将会被认为是侦听所有地址。

在创建 GDS 资源之前,必须已经配置了一种 LogicalHostname 资源或 SharedAddress 资源。有关配置 LogicalHostname 或者 SharedAddress 资源的信息,请参阅《Sun Cluster 3.0 12/01 Data Services Installation and Configuration Guide》。

若要指定一个值,请指定一个或多个资源名称;每个资源名称都可包含一个或多个逻辑主机名称,或者一个或多个共享地址。有关详细信息,请参阅 r_properties(5)。

Stop_command

stop 命令必须停止应用程序,并且仅在应用程序完全停止以后才返回。它必须是一条完整的 UNIX 命令,可以直接传给某个 shell 来停止应用程序。

如果提供了 Stop_command,则 GDS 的 stop 方法将使用 80% 的停止超时时间来启动 stop 命令。不管发出该 stop 命令后的结果如何,GDS 的 stop 方法都将用 15% 的停止超时时间发送 SIGKILL。剩余的 5% 的超时时间将用于内务处理开销。

如果忽略 stop 命令,GDS 将试图使用在 Stop_signal 中指定的信号来停止应用程序。

Probe_command

probe 命令定期检查给定应用程序的状态。它必须是一条具有完整变量的 UNIX 命令,可以直接传给某个 shell 来探测该应用程序。如果该应用程序状态完好,则 probe 命令将返回退出状态(以 0 值表示)。

probe 命令的退出状态可用于确定应用程序故障的严重程度。此退出状态(又称探测状态)必须一个介于 0(表示成功)和 100(表示完全失败)之间的整数。探测状态也可以是一个特殊值 201,它将导致应用程序立即进行故障转移,除非 Failover_enabled 被设置为 false。探测状态用于 GDS 探测算法(请参阅 scds_fm_action(3HA)),可决定是从本地重启应用程序,还是将其故障转移到另一个节点; 如果退出状态为 201,则应用程序将立即进行故障转移。

如果忽略 probe 命令,则 GDS 将提供其自身的简单 probe 命令。它将与从 Newtork_resources_used 特性或 scds_get_netaddr_list(3HA) 的输出结果中得到的 IP 地址集中的应用程序进行连接。如果连接成功,它将立即断开连接。如果能成功地进行连接和断开连接,则该应用程序即被认为运行状态完好。


注意:

随 GDS 一起提供 probe 命令的目的仅在于为正常运行的、特定于应用程序的 probe 命令提供简单的替代命令。


Start_timeout

此属性为 start 命令指定启动超时(有关其他信息,请参阅"Start_command")。Start_timeout 的缺省值为 300 秒。

Stop_timeout

此属性为 stop 命令指定停止超时(有关其他信息,请参阅"Stop_command")。Stop_timeout 的缺省值为 300 秒。

Probe_timeout

此属性为 probe 命令指定超时值(有关其他信息,请参阅"Probe_command")。Probe_timeout 的缺省值为 30 秒。

Child_mon_level

此属性控制通过 PMF 监视哪些进程。它指定了一个级别,在该级别之内的所有派生子进程都将被监视。这类似于 pmfadm(1M) 命令的 -C 变量。

如果忽略此属性或将其设置为缺省值 -1,所产生的效果将与忽略 pmfadm 命令的 -C 选项相同。也即:所有子进程(以及它们的子进程)都将被监视。有关详细信息,请参阅 pmfadm(1M) 手册页。


注意:

此选项只能用标准的 Sun Cluster 管理命令来指定。如果您使用的是 SunPlex Agent Builder,则无法指定此选项。


Failover_enabled

此布尔型扩展特性控制着资源的故障转移行为。如果将该扩展特性设置为 true,则只要应用程序在 retry_interval 秒内重启的次数超过 retry_count 次,该应用程序就将进行故障转移。

如果将此扩展特性设置为 false,则只要应用程序在 retry_interval 秒内重启的次数超过 retry_count 次,该应用程序就不再重启或向另一个节点进行故障转移。

此扩展特性可用于阻止应用程序资源启动对其资源组的故障转移。缺省值是 true

Stop_signal

GDS 借助此整数型扩展特性的值来决定通过 PMF 停止应用程序时所使用的信号。有关可以指定的整数值的列表,请参阅 signal(3head)。缺省值为 15 (SIGTERM)。

使用 SunPlex Agent Builder 创建使用 GDS 的服务

可以使用 SunPlex Agent Builder 创建使用 GDS 的服务。有关 SunPlex Agent Builder 以及各字段定义的信息,请参阅《Sun Cluster 3.0 12/01 Data Services Installation and Configuration Guide》。

在 Agent Builder 中创建使用 GDS 的服务

  1. 启动 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    

  2. 将出现 SunPlex Agent Builder 面板。

    Graphic
  3. 输入"Vendor Name"。

  4. 输入"Application Name"。


    注意:

    "Vendor Name"和"Application Name"加起来不能超过 9 个字符。它将用作驱动脚本的软件包名称。


  5. 输入"Working Directory"。可以使用"Browse"按钮选择一个目录,而不必键入路径。

  6. 选择该数据服务是可进行缩放,还是可进行故障转移。

  7. 不必选择"Network Aware",因为在创建 GDS 时它是缺省值。

  8. 选择 GDS。

  9. 单击"Create"按钮,以创建驱动脚本。

  10. SunPlex Agent Builder 面板显示出服务的创建结果。此时,"Create"按钮将灰显,而"Next"按钮变得可用。

    Graphic

配置驱动脚本

创建驱动脚本之后,需要使用 SunPlex Agent Builder 配置新服务。

  1. 单击"Next"按钮,之后将出现配置面板。

  2. 输入 Start 命令的位置,或者使用"Browse"按钮找到 Start 命令。

  3. (可选的) 输入 Stop 命令,或者使用"Browse"按钮找到 Stop 命令。

  4. (可选的) 输入 Probe 命令,或者使用"Browse"按钮找到 Probe 命令。

  5. (可选的) 为 Start、Stop 和 Probe 等命令指定超时值。

  6. 单击"Configure",开始对驱动脚本进行配置。

    将创建驱动脚本软件包,并将其放在以下位置:


    working-dir/<vendor_name><application>/pkg

    例如,/export/wdir/NETapp/pkg


    注意:

    该软件包的名称由"Vendor Name"和"Application Name"综合而成。


  7. 将已完成的软件包安装到群集中的所有节点上。


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d . NETapp
    

  8. 在 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


    注意:

    各手册页和脚本名称与您在上面所输入的"Application Name"对应,而且其前面缀以脚本名称;例如,startapp


    若要查看手册页,需要指定手册页的路径。例如,要查看 startapp 手册页,请使用:


    # man -M /opt/NETapp/man startapp
    

  9. 在群集的一个节点上,配置资源并启动应用程序。


    # /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 <nafogroup/adapter list>] 
     For scalable services: 
     Usage: startapp 
              -h <shared address name> 
              -p <port and protocol list> 
              [ -l <load balancing policy>] 
              [-n <nafogroup/adapter list>] 
               [-w <load balancing weights>]

SunPlex Agent Builder 的输出

SunPlex Agent Builder 根据您输入的信息生成三个驱动脚本和一个配置文件。该配置文件指定了资源组和资源类型的名称。

驱动脚本分别是:

这些驱动脚本的界面和行为与 SunPlex Agent Builder 为不基于 GDS 的代理而生成的实用程序脚本的界面和行为相同。这些脚本全部放在一个可在 Solaris 中安装的的软件包中。该软件包可在多个群集中重复使用。

可以定制配置文件,以便为资源组或其他变量提供定制的名称,这些名称通常是在 scrgadm 命令的输入内容中出现。如果您不定制这些脚本,则 SunPlex Agent Builder 将为 scrgadm 变量提供合理的缺省值。

使用标准的 Sun Cluster 管理命令来创建使用 GDS 的服务

在本节中我们将说明上述变量实际上是如何输入到 GDS 中的。我们将使用现有的 Sun Cluster 管理命令(如 scrgadmscswitch)来使用和管理 GDS。

如果驱动脚本的功能够用,就不必输入本节所述的低级管理命令。但是,如果您需要对基于 GDS 的资源进行更为严格的控制,则可以这样做。这些命令实际上是驱动脚本所执行的命令。

标准的 Sun Cluster 管理命令(用于创建使用 GDS 的、具有高可用性的服务)
  1. 注册资源类型 SUNW.gds


    # scrgadm -a -t SUNW.gds
    

  2. 创建资源组,其中包含 LogicalHostname 资源和故障转移服务本身。


    # scrgadm -a -g haapp_rg
    

  3. 为 LogicalHostname 资源创建资源。


    # scrgadm -a -L -g haapp_rs -l hhead
    

  4. 为故障转移服务本身创建资源。


    # scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \
         -y Scalable=false -y Start_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
    

  5. 将资源组 haapp_rg 联机。


    # scswitch -Z -g haapp_rg
    

标准的 Sun Cluster 管理命令(用于创建使用 GDS 的、可缩放的服务)
  1. 注册资源类型 SUNW.gds


    # scrgadm -a -t SUNW.gds
    

  2. 为 SharedAddress 资源创建资源组。


    # scrgadm -a -g sa_rg
    

  3. sa_rg 上创建 SharedAddress 资源。


    # scrgadm -a -S -g sa_rg -l hhead
    

  4. 为可缩放服务创建资源组。


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
    -y Desired_primaries=2 -y RG_dependencies=sa_rg
    

  5. 为可缩放服务自身创建资源组。


    # 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 Portlist="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
    

  6. 将包含网络资源的资源组联机。


    # scswitch -Z -g sa_rg
    

  7. 将资源组 app_rg 联机。


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder 的命令行界面

SunPlex Agent Builder 有一个命令行界面,其功能与 GUI 界面的功能相同。此界面由 scsdcreate(1ha) 和 scdsconfig(1ha) 命令组成。本节中的操作与基于 GUI 的过程""具有相同的功能,但不使用 GUI 界面。

使用与 SunPlex Agent Builder 具有同等功能的命令行创建使用 GDS 的服务
  1. 创建服务。

    对于故障转移服务,请使用:


    # scdscreate -g -V NET -T app -d /export/wdir
    

    对于可缩放服务,请使用:


    # scdscreate -g -s -V NET -T app -d /export/wdir
    


    注意:

    -d 参数是可选的。如果不指定此参数,则工作目录缺省为当前目录。


  2. 配置服务。


    # scdsconfig -s "/export/app/bin/start" \
    -t "/export/app/bin/stop" \
    -m "/export/app/bin/probe" -d /export/wdir
    


    注意:

    只有 start 命令是必需的。所有其他参数都是可选的。


  3. 将已完成的软件包安装到群集中的所有节点上。


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d . NETapp
    

  4. 在 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


    注意:

    各手册页和脚本名称与您在上面所输入的"Application Name"对应,而且其前面缀以脚本名称;例如,startapp


    若要查看手册页,需要指定手册页的路径。例如,要查看 startapp 手册页,请使用:


    # man -M /opt/NETapp/man startapp
    

  5. 在群集的一个节点上,配置资源并启动应用程序。


    # /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 <nafogroup/adapter list>] 
     For scalable services: 
     Usage: startapp 
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>] 
              [-n <nafogroup/adapter list>] 
               [-w <load balancing weights>]