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

第 10 章 普通数据服务

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

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

使用 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,则应用程序将会被认为是侦听所有地址。

在创建 GDS 资源之前,必须已经配置了一种 LogicalHostname 资源或 SharedAddress 资源。 有关如何配置 LogicalHostnameSharedAddress 资源的信息,请参阅Sun Cluster 数据服务规划和管理指南(适用于 Solaris OS)

要指定一个值,请指定一个或多个资源名称;每个资源名称可以包含一个或多个 LogicalHostname 或者包含一个或多个 SharedAddress。 有关详细信息,请参阅 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 命令。它将与从 Network_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 选项具有相同的效果;即,所有子项(和它们的子孙)都将受到监视。


注意:

此选项只能用标准的 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 的服务。 第 9 章,SunPlex Agent Builder中详细介绍了 SunPlex Agent Builder。

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

在 Agent Builder 中创建使用 GDS 的服务
  1. 启动 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    
  2. 将出现 SunPlex Agent Builder 面板。

    标题为“SunPlex Agent Builder”的对话框,显示了 Agent Builder 的主屏幕
  3. 在“Vendor Name”中输入供应商名称。

  4. 在“Application Name”中输入应用程序名称。


    注意:

    供应商名称和应用程序名称加起来不能超过 9 个字符。 它被作为驱动脚本的软件包名称。


  5. 转到工作目录。

    可以使用“Browse”按钮选择一个目录,而不必键入路径。

  6. 选择该数据服务是可进行伸缩,还是可进行故障切换。

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

  7. 选择“GDS”。

  8. 单击“Create”按钮,以创建驱动脚本。

  9. SunPlex Agent Builder 面板显示出服务的创建结果。 “Create”按钮将灰显,您随即可以使用“Next”按钮。

    显示已输入信息的“创建”屏幕的对话框
配置驱动脚本

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

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

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

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

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

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

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


    注意:

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


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


    <working-dir>/<vendor_name><application>/pkg
    
    例如,/export/wdir/NETapp/pkg

  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


    注意:

    各手册页和脚本名称与您在上面所输入的“应用程序名称”对应,而且其前面缀以脚本名称;例如,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 <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 的输出

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 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
    
  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 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 
    
  6. 将包含网络资源的资源组联机。


     # scswitch -Z -g sa_rg
    
  7. 将资源组 app_rg 联机。


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder 的命令行界面

SunPlex Agent Builder 具有一个功能与 GUI 界面相同的命令行界面。 此界面由 scdscreate( 1HA)scdsconfig (1HA) 命令组成。 本节中的操作与基于 GUI 的过程使用 Agent Builder 的命令行版本创建使用 GDS 的服务具有相同的功能,但不使用 GUI 界面。

使用 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


    注意:

    各手册页和脚本名称与您在上面所输入的“应用程序名称”对应,而且其前面缀以脚本名称;例如,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 <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>]