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

第 10 章 普通数据服务

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

本章包括以下主题:

普通数据服务概念

GDS 是一种机制,它通过将简单的网络可识别和非网络可识别应用程序插入 Sun Cluster 资源组管理 (RGM) 框架而使其具有高可用性或高可伸缩性。此机制无需对数据服务进行编码,而通常必须执行编码操作才能使应用程序具有高可用性或高可伸缩性。

GDS 是一项单独的、预编译的数据服务。您不能修改预编译的数据服务及其组件、回调方法 (rt_callbacks) 实现和资源类型注册文件 (rt_reg)。

本节包含以下主题:

预编译的资源类型

SUNWscgds 软件包中包含普通数据服务资源类型 SUNW.gdsscinstall 实用程序将在群集安装过程中安装此软件包。请参见 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 的优点与不足

使用 GDS 与使用 Agent Builder 源代码(请参见 scdscreate(1HA) 手册页)或者 Sun Cluster 管理命令相比,具有以下优点:

虽然使用 GDS 有很多优点,但 GDS 机制不能用于以下实例:

创建使用 GDS 的服务的方法

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

GDS 和 Agent Builder

使用 Agent Builder 并选择 GDS 作为生成源代码的类型。使用用户输入的内容生成一组脚本,以便为给定的应用程序配置资源。

GDS 和 Sun Cluster 管理命令

此方法使用 SUNWscgds 中的预编译数据服务代码。但是,群集管理员必须使用 Sun Cluster 管理命令来创建和配置资源。请参见 scrgadm(1M)scswitch(1M) 手册页。

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

发布正确的 scrgadmscswitch 命令需要键入大量内容。例如,请参见如何使用 Sun Cluster 管理命令来创建使用 GDS 且具有高可用性的服务如何使用 Sun Cluster 管理命令来创建使用 GDS 的可伸缩服务

将 GDS 与 Agent Builder 结合使用可以简化此进程,因为它将为您生成用于发布 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/2005 12:38:05 phys-node-1 START-INFO> Start succeeded. [/home/brianx/sc/start_cmd]
10/20/2005 12:42:11 phys-node-1 STOP-INFO> Successfully stopped the application

以下示例显示了 probe_log.txt 包含的信息类型:

10/20/2005 12:38:15 phys-node-1 PROBE-INFO> The GDS monitor (gds_probe) has been started
10/20/2005 12:39:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2005 12:40:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2005 12:41:15 phys-node-1 PROBE-INFO> The probe result is 0

必需的 GDS 属性

如果使用的是网络可识别应用程序,则必须提供 Start_command 扩展属性和 Port_list 属性。如果使用的是非网络可识别的应用程序,则只应提供 Start_command 扩展属性。

Start_command 扩展属性

您在 Start_command 扩展属性中指定的 start 命令将启动应用程序。此命令必须为可直接传递给 shell 启动应用程序的带参数的 UNIX 命令。

Port_list 属性

Port_list 属性将标识应用程序进行侦听的端口列表。Port_list 属性必须根据由 Agent Builder 创建的启动脚本指定,或是根据 scrgadm 命令指定(如果使用的是 Sun Cluster 管理命令)。

可选的 GDS 属性

可选的 GDS 属性包括系统定义的属性扩展属性。系统定义的属性是 Sun Cluster 提供的一组标准属性。定义在 RTR 文件中的属性称为扩展属性。以下是可选的 GDS 属性:

Network_resources_used 属性

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

创建 GDS 资源之前,必须已配置 LogicalHostnameSharedAddress 资源。有关如何配置 LogicalHostnameSharedAddress 资源的信息,请参见《Sun Cluster Data Services Planning and Administration Guide for Solaris OS》

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

Stop_command 属性

stop 命令必须停止应用程序并且只能在应用程序完全停止之后返回。此命令必须为可以直接传递给 shell 以停止应用程序的完整 UNIX 命令。

如果提供了 Stop_command 扩展属性,GDS 停止方法将在停止超时达到 80% 时启动 stop 命令。不管启动 stop 命令的输出结果是什么,GDS 停止方法都将在停止超时达到 15% 时发送 SIGKILL。剩余的 5% 的超时时间将用于内务处理开销。

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

Probe_command 属性

probe 命令将定期检查给定应用程序的运行状况。此命令必须为可直接传递给 shell 以探测应用程序的带参数的 UNIX 命令。如果应用程序运行正常,probe 命令将以 0 退出状态返回。

probe 命令的退出状态用于确定应用程序失败的严重性。此退出状态(又称探测状态)必须是 0(表示成功)至 100(表示完全失败)之间的整数。探测状态也可以为特殊值 201,该值将导致应用程序立即故障转移,除非 Failover_enabled 设置为 FALSE。GDS 探测算法将使用探测状态决定是在本地重新启动应用程序还是将其故障转移。有关更多信息,请参见 scds_fm_action(3HA) 手册页。如果退出状态为 201,则应用程序将立即进行故障转移。

如果忽略 probe 命令,GDS 将提供它自己的简单探测。此探测将连接到源自 Network_resources_used 属性或 scds_get_netaddr_list() 函数的输出结果的 IP 地址集上的应用程序。有关更多信息,请参见 scds_get_netaddr_list(3HA) 手册页。如果连接成功,连接将立即断开。如果连接和断开连接均成功,则认为应用程序运行正常。


注 –

GDS 提供的探测仅适于简单替换功能全面的应用程序特定的探测。


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 属性


注 –

如果使用 Sun Cluster 管理命令,则可以使用 Child_mon_level 属性。如果使用 Agent Builder,则不能使用此属性。


此属性对通过进程监视工具 (PMF) 监视的进程提供控制。此属性指示要达到监视交叉子进程的级别。此属性的作用类似于 pmfadm 命令的 -C 参数。请参见 pmfadm(1M) 手册页。

如果忽略此属性或将其设置为默认值 -1,所产生的效果将与忽略 pmfadm 命令的 -C 选项相同。即,所有子进程以及它们的子进程都将被监视。

Failover_enabled 属性

此 Boolean 扩展属性用于控制资源的故障转移行为。如果将该扩展属性设置为 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)。

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

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

创建和配置基于 GDS 的脚本

Procedure如何启动 Agent Builder 和创建脚本

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

  2. 启动 Agent Builder。


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

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

  5. 键入应用程序名称。


    注 –

    自 Solaris 9 操作系统开始,供应商名称和应用程序名称的组合可超出九个字符。但是,如果使用的是早期版本的 Solaris 操作系统,则供应商名称和应用程序名称的组合不能超出九个字符。此组合用作脚本软件包的名称。


  6. 转到工作目录。

    可以使用“浏览”下拉式菜单选择目录而不是键入路径。

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

    不必选择“网络可识别”,因为在创建 GDS 时该设置是默认值。

  8. 选择“GDS”。

  9. (可选的)更改 RT 版本的所示默认值。


    注 –

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


  10. 单击“创建”。

    Agent Builder 将创建脚本。结果显示在“输出日志”区域中。

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

    请注意,“创建”按钮将灰显。现在您就可以开始配置该脚本了。

  11. 单击“下一步”。

    将显示“配置”屏幕。

    显示“配置”屏幕的对话框

Procedure如何配置脚本

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

步骤
  1. 键入 start 命令的位置,或单击“浏览”以找到 start 命令。

    您可以指定属性变量。使用属性变量介绍了属性变量。

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

    您可以指定属性变量。使用属性变量介绍了属性变量。

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

    您可以指定属性变量。使用属性变量介绍了属性变量。

  4. (可选的)为 start、stop 和 probe 命令指定新的超时值。

  5. 单击“配置”。

    Agent Builder 将配置脚本。


    注 –

    Agent Builder 将供应商名称和应用程序名称组合在一起创建软件包名称。


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

    working-dir/vendor-name-application/pkg
    

    例如,/export/wdir/NETapp/pkg

  6. 在群集的每个节点上,成为超级用户或假定一个等效的角色。

  7. 在群集的每个节点上,安装完整的软件包。

    • 对于分区域环境中的 Solaris 10 OS,请以全局区域中的全局管理员身份键入以下命令:


      # cd /export/wdir/NETapp/pkg
      # pkgadd -G -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
    • 对于非区域环境中其他版本的 Solaris OS 或 Solaris 10 OS,请键入以下命令:


      # 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)。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port-and-protocol-list
    

    startapp 脚本的参数视资源类型的不同(故障转移或可伸缩)而有所变化。


    注 –

    要确定需要键入的命令行,请检查自定义的手册页或运行 startapp 脚本而不带任何参数以显示用法语句。

    若要查看手册页,需要指定手册页的路径。例如,要查看 startapp(1M) 手册页,请键入:


    # man -M /opt/NETapp/man 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]

Agent Builder 的输出

Agent Builder 将根据创建软件包时提供的输入生成三个脚本和一个配置文件。配置文件用于指定资源组和资源类型的名称。

脚本如下:

这些脚本具有相同的接口,其功能与 Agent Builder 为基于非 GDS 的数据服务生成的实用程序脚本相同。这些脚本都放在可以跨多个群集重复使用的 Solaris 软件包中。

您可以自定义配置文件为资源组或其他参数提供自定义的名称,这些名称通常是在 scrgadm 命令中作为参数出现。如果不自定义脚本,Agent Builder 将提供 scrgadm 参数的默认值。

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

本节介绍了如何将参数输入到 GDS 中。使用现有的 Sun Cluster 管理命令(例如 scrgadmscswitch)维护和管理 GDS。

如果脚本提供了足够的功能,则不必使用本节中所示的低级管理命令。但是,如果需要对基于 GDS 的资源进行较详细的控制,则可以使用低级管理命令。这些命令均由脚本执行。

Procedure如何使用 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
    

Procedure如何使用 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
    

Agent Builder 的命令行界面

Agent Builder 集成了一个命令行界面,该命令行界面与 GUI 提供的功能相同。此界面由 scdscreatescdsconfig 命令组成。请参见 scdscreate(1HA)scdsconfig(1HA) 手册页。

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

本节介绍了如何使用命令行界面执行使用 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. 在群集的每个节点上,安装完整的软件包。

    • 对于分区域环境中的 Solaris 10 OS,请以全局区域中的全局管理员身份键入以下命令:


      # cd /export/wdir/NETapp/pkg
      # pkgadd -G -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
    • 对于非区域环境中其他版本的 Solaris OS 或 Solaris 10 OS,请键入以下命令:


      # 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)。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port-and-protocol-list
    

    startapp 脚本的参数视资源类型的不同(故障转移或可伸缩)而有所变化。


    注 –

    要确定需要键入的命令行,请检查自定义的手册页或运行 startapp 脚本而不带任何参数以显示用法语句。

    若要查看手册页,需要指定手册页的路径。例如,要查看 startapp(1M) 手册页,请键入:


    # man -M /opt/NETapp/man 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]