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

第 10 章 普通数据服务

本章提供有关普通数据服务 (GDS) 方面的信息和说明如何创建使用 GDS 的服务。您可以使用 SunPlex Agent Builder 或标准的 Sun Cluster 管理命令来创建此服务。

本章包含以下主题:

GDS 概述

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

使用 GDS 的优点与不足

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

虽然使用 GDS 有很多优点,但还是存在不宜使用 GDS 机制的情况。在以下情况中,就适合使用 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 命令。

结合 SunPlex Agent Builder 使用 GDS 可以简化该过程,因为这会生成可以为您发出 scrgadmscswitch 命令的脚本。

GDS 记录事件的方式

使用 GDS,您可以记录一些从 GDS 传递到 GDS 所启动的脚本中的相关信息。此相关信息包括启动方法、探测方法和停止方法的状态以及特性变量的信息。您可以使用此信息来诊断脚本中存在的问题或错误,或者另作他用。

请使用Log_level 特性中介绍的 Log_level 特性来指定 GDS 要记录的消息的级别或类型。您可以指定 NONEINFOERR

GDS 日志文件

以下两个 GDS 日志文件放置在目录 /var/cluster/logs/DS/resource_group_name/ resource_name 中:

下例显示了 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

必需的 GDS 特性

如果您的应用程序不支持网络,则必须同时给出 Start_command 扩展特性以及 Port_list 特性。如果您的应用程序支持网络,则必须仅给出 Port_list 特性。

Start_command 扩展特性

Start_command 扩展特性中指定的启动命令用来启动应用程序。它必须是一条具有一些参数的 UNIX 命令,这些参数可以直接传给 shell 来启动应用程序。

Port_list 特性

Port_list 特性必须在 SunPlex Agent Builder 所创建的启动脚本中指定,或者如果您使用的是标准的 Sun Cluster 管理命令,则必须随 scrgadm 命令一同指定。

可选的 GDS 特性

以下列表列出了可选的 GDS 特性:

Network_resources_used 特性

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

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

要指定一个值,请指定一个或多个资源名称。每个资源名称都可以包含一个或多个 LogicalHostname 或一个或多个 SharedAddress。有关详细信息,请参见 r_properties (5) 手册页。

Stop_command 特性

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

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

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

Probe_command 特性

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_timeout 特性

此特性用来指定启动命令的启动超时值。有关其他信息,请参见Start_command 扩展特性Start_timeout 的缺省值为 300 秒。

Stop_timeout 特性

此特性用来指定停止命令的停止超时值。有关其他信息,请参见Stop_command 特性Stop_timeout 的缺省值为 300 秒。

Probe_timeout 特性

此特性用来指定探测命令的超时值。有关其他信息,请参见Probe_command 特性Probe_timeout 的缺省值为 30 秒。

Child_mon_level 特性


注意 –

如果使用的是标准的 Sun Cluster 管理命令,则您可以使用此选项。如果使用的是 SunPlex Agent Builder,则不能使用此选项。


此特性用来控制通过进程监视工具 (PMF) 监视的进程。它指定了一个级别,在该级别之内的所有派生子进程都将被监视。此特性的作用类似于 pmfadm 命令的 -C 参数。请参见 pmfadm(1M) 手册页。

忽略此特性或将其设置为缺省值 -1 所产生的效果与忽略 pmfadm 命令的 -C 选项相同。也就是说,所有子进程(以及它们的子孙进程)都会受到监视。

Failover_enabled 特性

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

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

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

Stop_signal 特性

GDS 使用此整型扩展特性的值来确定通过 PMF 停止应用程序时所使用的信号。有关您可以指定的整数值的列表,请参见 signal( 3HEAD) 手册页。缺省值为 15 ( SIGTERM)。

Log_level 特性

此特性用来指定由 GDS 记录的诊断消息的级别或类型。您可以将此特性指定为 NONEINFOERR。如果指定为 NONE,则 GDS 将不会记录诊断消息。如果指定为 INFO,则仅记录信息消息。如果指定为 ERR,则仅记录错误消息。缺省情况下,GDS 不记录诊断消息 (NONE)。

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

您可以使用 SunPlex Agent Builder 创建使用 GDS 的服务。第 9 章,SunPlex Agent Builder中详细介绍了 SunPlex Agent Builder。

创建并配置脚本

启动 SunPlex Agent Builder 并创建脚本的方法
  1. 成为超级用户或作为等效角色。

  2. 启动 SunPlex Agent Builder。


    # /usr/cluster/bin/scdsbuilder
    
  3. 将显示 SunPlex Agent Builder 的“创建”屏幕。

    标题为“SunPlex Agent Builder”的对话框中显示了 Agent Builder 的主”创建”屏幕
  4. 键入供应商名称。

  5. 键入应用程序名称。


    注意 –

    供应商名称和应用程序名称加起来的总长度不能超过 9 个字符。它将用作脚本的软件包名称。


  6. 转到工作目录。

    您可以使用“浏览”下拉菜单选择该目录,而不必键入该路径。

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

    不必选择“支持网络”,因为在创建 GDS 时它是缺省值。

  8. 选择“GDS”。

  9. (可选的) 更改所示的“RT 版本”缺省值。


    注意 –

    不可在“RT 版本”字段中使用以下字符:空格、制表符、斜杠 (/)、反斜杠 (\)、星号 (*)、问号 (?)、逗号 (,)、分号 (;)、左方括号 ([) 或右方括号 (])。


  10. 单击“完成”。

    Agent Builder 将创建脚本。创建服务的结果将显示在“输出记录”窗口中。

    输入信息后,显示“创建”屏幕的对话框

    “创建”按钮已被禁用。现在您就可以开始配置该脚本了。

  11. 单击“下一步”。

    将显示“配置”屏幕。

如何配置脚本

创建脚本后,您需要配置新服务。

  1. 键入启动命令所在的位置,或单击“浏览”找到启动命令。

    您可以指定特性变量。在特性变量中介绍了特性变量。

  2. (可选的) 键入停止命令所在的位置,或单击“浏览”找到停止命令。

    您可以指定特性变量。在特性变量中介绍了特性变量。

  3. (可选的) 键入探测命令所在的位置,或单击“浏览”找到探测命令。

    您可以指定特性变量。在特性变量中介绍了特性变量。

  4. (可选的) 为启动命令、停止命令和探测命令指定超时值。

  5. 单击“配置”。

    Agent Builder 即开始配置该脚本。


    注意 –

    Agent Builder 将供应商名称和应用程序名称连接起来创建软件包名称。


    将创建该脚本的软件包,并将其放置在以下目录中:


    工作目录/供应商名称应用程序/pkg
    

    例如,/export/wdir/NETapp/pkg

  6. 以超级用户身份,将已完成的软件包安装到群集中的所有节点上。


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

  7. 以下是 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
    
  8. 在群集的一个节点上,配置资源并启动应用程序。


    # /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 的输出

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. 成为超级用户或作为等效角色。

  2. 注册资源类型 SUNW.gds


    # scrgadm -a -t SUNW.gds
    
  3. 创建资源组,其中包含 LogicalHostname 资源和故障转移服务本身。


    # scrgadm -a -g haapp_rg
    
  4. LogicalHostname 资源创建资源。


    # scrgadm -a -L -g haapp_rs -l hhead
    
  5. 为故障转移服务本身创建资源。


    # 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
    
  6. 将资源组 haapp_rg 联机。


    # scswitch -Z -g haapp_rg
    
如何使用 Sun Cluster 管理命令来创建使用 GDS 的可伸缩服务
  1. 成为超级用户或作为等效角色。

  2. 注册资源类型 SUNW.gds


    # scrgadm -a -t SUNW.gds
    
  3. SharedAddress 资源创建资源组。


    # scrgadm -a -g sa_rg
    

  4. sa_rg 上创建 SharedAddress 资源。


    # scrgadm -a -S -g sa_rg -l hhead
    
  5. 为可伸缩服务创建资源组。


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
          -y Desired_primaries=2 -y RG_dependencies=sa_rg
    
  6. 为可伸缩服务自身创建资源组。


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


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


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder 的命令行界面

SunPlex Agent Builder 还包括一个命令行界面,它可以提供图形用户界面所提供的功能。此界面由 scdscreatescdsconfig 命令组成。请参见 scdscreate (1HA)scdsconfig(1HA) 手册页。

如何使用命令行版本的 Agent Builder 创建使用 GDS 的服务

本节将介绍如何使用命令行界面来执行使用 SunPlex Agent Builder 创建使用 GDS 的服务中所述的各个步骤。

  1. 成为超级用户或作为等效角色。

  2. 创建服务。

    对于故障转移服务,请键入:


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

    对于可伸缩服务,请键入:


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

    注意 –

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


  3. 配置服务。


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

    您可以指定特性变量。在特性变量中介绍了特性变量。


    注意 –

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


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


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

  5. 以下是 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
    
  6. 在群集的一个节点上,配置资源并启动应用程序。


    # /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]