IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Grid computing  >

网格问题

以及如何避免这些问题

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Nicholas Chase (nicholas@nicholaschase.com), 总裁, Chase and Chase, Inc.

2005 年 10 月 17 日

虽然网格计算确实有很大的潜能,但是与任何稍微复杂点的系统一样,网格系统中也可能存在很多问题。尤其是在使用相对比较年轻的系统,例如 Globus Toolkit 时,这种情况尤其是如此。在没有真正了解这个工具包之前,使用它很可能会碰到问题。本文将介绍一些在安装、配置和使用 Globus Toolkit 4 时常见的问题,从而帮助您避免出现这些问题,节省时间,并帮您掌握网格计算的知识。

GT4 预安装的问题

在开始安装 Globus Toolkit 4 (GT4)之前,您需要考虑自己的操作系统的选择,用户的数量和访问级别,并且需要确保选择了适当版本的相关软件。

操作系统的考虑

仔细考虑您要安装网格所采用的平台。所有的 GT4 组件都可以在 Linux® 上使用,但是只有 Web 服务组件可以在 Windows® 上使用。但是事实上并没有这么明显。例如,WS-GRAM 可以作为一个 Web 服务使用,因此您会认为它也可以在 Windows 上使用。然而,它依赖于几个非 Web 服务的组件,因此它只能在 Linux 上使用。类似地,可靠文件传输(RFT)也有一个 Web 服务实现,因此它自己可以在 Windows 上很好地运行。但是它是在 GridFTP 基础上构建的,后者只能在 Linux 上使用。因此,按照这种配置,您就无法在 Windows 上使用 RFT。

那么您究竟可以在 Windows 上做些什么呢?您可以使用所有的 Web 服务核心组件。这意味着您可以创建 WSRF 应用程序,也可以运行容器。然后可以将 WSRF 应用程序部署到这个容器上。您甚至可以将这个容器嵌入到 Apache Tomcat 或其他应用服务器中。您只是无法使用 WS-GRAM 来提交作业。注意,您可以在 Linux 及其上使用 WS-GRAM 将作业提交到 Windows 机器上的容器中。

还有,在 Windows 上还没有移植一些安全工具,例如 OpenSSH,因此您仍然需要使用 Linux 机器来创建并使用安全证书。

用户考虑

为了正确安装 Globus Toolkit,您至少需要两个用户,其中一个需要具有 root 访问权限。您需要对 root 用户具有访问权限是由于几个原因。首先,您需要安装并配置 sudosudo 应用程序让一个用户可以当成另外一个用户来运行应用程序。通常,这都是由那些希望给予用户执行特定受限操作的能力但却不给他们提供存储密码的管理员所启用的。对于 Globus 来说,它用来允许这个工具包将进程的用户 ID 设置为客户机的用户 ID。

您可能还需要对 root 用户具有访问权限来设置某些特定的服务,例如 gatekeeper 进程。

您不应该作为 root 用户进行安装。在大部分情况下,您都需要创建第二个用户 globus,但是实际的用户名并不重要,只要它对适当的目录具有写入权限即可。这就是用来实际安装工具包的用户。您还要使用这个用户来启动 WSRF 应用程序所部署到的容器。

相关软件

在开始安装之前需要考虑的另外一个问题是您是否具有适当版本的相关软件。例如,您可能知道需要使用某个版本的 Java Development Kit(JDK)。但是到底是哪个版本呢?安装指南建议采用 V1.4.2 或更高版本。但是如果您使用 V1.5,那就只能使用一个不同版本的 Ant(普通安装需要 Ant V1.5.1 或更高版本)。使用 Java V1.5,您就需要 Ant V1.6.1 或更高版本。如果您正在使用的是某个特定的 Fedora Linux 版本,那么 Ant 版本也可能会成为问题。

如果您试图使用一个旧版本的 Java,例如 V1.3.x,就要确保还安装了 SAAJ,这通常包含在 Java V1.4 中。

最后,在开始真正安装之前,确保您知道自己要安装哪些组件。例如,如果您要安装 Replica Locator Service,就需要确保提前下载并安装 IODBC(请参阅 参考资料)。





回页首


GT4 安装问题和解决方案

现在您已经准备好安装 Globus Toolkit 了,让我们首先来了解几个可以帮助您成功安装软件的问题,包括选择单个或多个组件,如何避免某些常见的 RFT 错误,以及要成功重用安装文件的一个重要技巧。

选择组件

在实际开始安装之后,您就可以选择只安装部分单独的组件(或者某几组组件)。例如,您可以选择只安装 WS-GRAM 包:

<code type="section">./configure --prefix=$GLOBUS_LOCATION
make wsgram</code>

幸运的是,这种功能意味着您可以只安装某个单独的组件,这样如果在安装时忘记了某个组件,还可以返回去修正这个问题。例如,您可以只安装 SDK 库,但是如果您希望使用与客户机有关的工具,例如 grid-proxy-init,就需要回来至少安装一个客户机包。

RFT 错误

尽管通常来说,安装手册都是按照依赖顺序进行操作的,但是有一个例外。如果您在安装 RFT 的相关软件之前安装 WS 核心组件(就像手册中说明的一样),那么在启动容器时就可能会碰到一个错误(参见清单 1)。这个错误看起来非常严重。


清单 1. 启动容器后发生的错误
				
[globus@localhost globus]$ globus-start-container
2005-08-22 23:18:47,995 ERROR service.ReliableFileTransferImpl 
[main,<init>:73] Unable to setup database driver with 
pooling.Connection refused. Check that the hostname and port are 
correct and that the postmaster is accepting TCP/IP connections.
2005-08-22 23:18:48,625 WARN  service.ReliableFileTransferHome 
[main,initialize:97] All RFT requests will fail and all GRAM jobs 
that require file staging will fail.Connection refused. Check that 
the hostname and port are correct and that the postmaster is accepting 
TCP/IP connections. 
Starting SOAP server at: https://127.0.0.1:8443/wsrf/services/
With the following services:
 
[1]: https://127.0.0.1:8443/wsrf/services/TriggerFactoryService
,,,

实际上,如果您没有使用 RFT,那么这个错误就不会造成什么影响。可以采用以下三种方法来解决这个问题:

  1. 忽略它 —— 正如上面介绍的一样,如果您不使用 RFT,这就不会造成任何损害。
  2. 关闭这个错误 —— 要关闭这个错误,请编辑 $GLOBUS_LOCATION/etc/globus_wsrf_rft/jndi-config.xml 文件,并将 mdsConfigurationreg 参数设置为 false
  3. 修正这个错误 —— 您可以通过安装并配置 RFT 数据库来修正这个错误。这通常是一个 Postgres 数据库。按照 Globus 管理员手册 的提示,并确保对 $GLOBUS_LOCATION/etc/globus_wsrf_rft/jndi-config.xml 文件配置了适当的用户名和密码。还要确保在启动 postmaster 进程时,使用了 -i 开关来告诉它接收 TCP 连接。

但是如果您需要安装 RFT 又该如何呢?好吧,如果您要传输大文件,那么显然 RFT 是需要的。但是实际上,只要您想在提交作业时使用文件分段功能,就需要使用 RFT。因此,除非您要显式地使用 GridFTP 或 globus-url-copy 来拷贝文件,否则就需要花几分钟安装 RFT 数据库。

重用安装文件

根据您正在安装的组件以及安装机器的处理能力的不同,GT4 的安装可能会需要很长时间,也许是几个小时。因此,如果您需要安装多台机器,就可能会经不住诱惑要将安装目录从一台机器拷贝到另外一台机器上。您可以这样做。但是如果这样做,就需要确保设置了适当的环境变量(GLOBUS_LOCATIONGPT_LOCATION,在版本 4 中这应该设置为与 GLOBUS_LOCATION 匹配),并且需要运行 $GLOBUS_LOCATION/sbin/gpt-postinstall 以完成安装过程。实际的安装过程会在 GLOBUS_LOCATION 目录之外放置很多文件,因此这个步骤是必不可少的。





回页首


GT4 配置问题和解决方案

现在您已经安装好软件了,接下来应该看一下一些可配置的选项了,如果没有正确设置这些选项,那么您就可能会碰到很多麻烦。现在,我们将展示如何修改 logicalHost 参数中的 IP 地址,确定 sudo 文件中的用户,并修改 Java Virtual Machine(JVM)选项。

标识主机

在启动容器之后,您立即会注意到的是所有的服务都被识别为 127.0.0.1。如果您需要使用另外一个 IP 地址来识别服务,这就会成为一个问题了。幸运的是,我们可以通过设置 $GLOBUS_LOCATION/etc/globus_wsrf_core/*server_config.wsdd 文件中的 logicalHost 参数来解决这个问题,如清单 2 所示。


清单 2. 设置 logicalHost 参数
				
...
    <globalConfiguration>
        <parameter name="usageStatisticsTargets"
                   value="usage-stats.globus.org:4810"/>

        <parameter name="sendXsiTypes" value="true"/>

        <parameter name="containerSecDesc" 
            value="etc/globus_wsrf_core/global_security_descriptor.xml"/>

        <parameter name="logicalHost" value="209.165.107.2" />
...

您也可以将 logicalHost 参数设置为一个完整的域名。

sudoers 文件

在配置 sudo 应用程序时,您实际要做的是确定 globus 用户(或者是您所使用的任何用户名)可以具有的用户清单。例如,如果我要使用以下 3 个用户来运行客户机应用程序,就应该将它们全部添加到 sudoers 文件中(参见清单 3)。


清单 3. 设置 logicalHost 参数
				
# Globus GRAM entries
   globus  ALL=(roadnick,sarah,pookie) 
       NOPASSWD: /home/globus/GT4/libexec/globus-gridmap-and-execute 
       -g /etc/grid-security/grid-mapfile
       /home/globus/GT4/libexec/globus-job-manager-script.pl *
   globus  ALL=(roadnick,sarah,pookie) 
       NOPASSWD: /home/globus/GT4/libexec/globus-gridmap-and-execute 
       -g /etc/grid-security/grid-mapfile
       /home/globus/GT4/libexec/globus-gram-local-proxy-tool *

记住要使用 visudo,而不是使用一个普通的文本编辑器来编译 sudoers 文件。visudo 应用程序不会让您将这个如此重要的文件修改成无效的格式。

JVM 选项

在某些情况下,您会发现自己处于这样一种境地:网格环境使您做事非常困难。例如,如果应用程序通常需要您在一个虚拟机上设置某个特定的参数会是什么结果呢?在通常情况下,您可以在运行应用程序时在命令行中指定这个参数。但是在网格环境中,当您并不总是显式地运行应用程序时会是怎样呢?

幸运的是,您还有一种选择。您可以通过调整 GLOBUS_OPTIONS 环境变量来为容器设置这些参数,这个变量由 globus-start-container 脚本引用。考虑管理员手册中的这个例子,将堆大小设置为 512M:

$ setenv GLOBUS_OPTIONS -Xmx512M
$ $GLOBUS_LOCATION/bin/globus-start-container

但是要记住:您并不是只为自己的应用程序设置了这些参数。对这个脚本进行任何修改都会影响到整个容器。





回页首


GT4 安全性问题解决方案

安全性在网格环境中非常关键,了解能够使系统更加安全的方法也非常重要。本节将介绍一些重要的安全性主题,包括证书、认证、权限和代理。

在 GT4 中设置安全性

Globus 环境中的安全性是基于证书概念的。证书来源于证书权威(CA)。例如,您要提交一个作业,工具包会对您的证书进行检查。让证书有效的方式就是让证书权威对其进行签名。对于要对证书进行验证的工具包来说,它需要有一个 CA 的公钥。这就意味着为了要接受特定 CA 的证书,您需要确保已经安装了这个证书权威所提供的安装包。详细指南请参阅 管理员手册

默认证书权威

在安装好 CA 提供的安装包之后,您就不但可以接收这个证书权威所提供的证书,而且可以请求来自这个证书权威的证书。但是如果由于您想接受这些权威的证书而安装了多个 CA 的安装包,会发生什么情况呢?

您可以指定 CA 作为命令行请求的一部分,但是这更有效也更简单的方法是使用 grid-default-ca 命令指定一个默认的证书权威,这让您可以从已经安装的证书权威中选择一个作为默认的证书权威。

认证与授权

证书只是意味着简单地标识您的身份,而不是授权您去做某些事情,理解这一点非常重要。授权是与用户名关联在一起的,因此您需要确保用户名被正确地映射到证书中所列出的标识名上了。这可以在 gridmap 文件中进行。例如,我可以将标识名和证书映射为我自己的用户名 roadnick:

"/O=Grid/OU=GlobusTest/OU=simpleCA-grid.backstopmedia.com/
OU=backstopmedia.com/CN=Globus Account" roadnick

此处的关键是要确保在您要运行代码的所有机器上都要进行这种映射。可以使用 grid-mapfile-add-entry 来添加这种映射,如下所示:


清单 4. 使用 grid-mapfile-add-entry 添加映射
				
$GLOBUS_LOCATION/sbin/grid-mapfile-add-entry 
    -dn "/O=Grid/OU=GlobusTest/OU=simpleCA-grid.backstopmedia.com
	/OU=backstopmedia.com/CN=Globus Account"
    -ln roadnick

证书不匹配

当您希望使用某个证书,而您的环境却期望使用另外一个证书时,会出现一个常见的问题。在这种情况下,您就会看到下面这种错误:


清单 5. 证书错误
				
(Mechanism level: Authorization failed. Expected
"/CN=host/grid.backstopmedia.com" target but received
"/O=Grid/OU=GlobusTest/OU=simpleCA-grid.backstopmedia.com/
OU=backstopmedia.com/CN=Globus Account")

要解决这个问题,您可以显式地声明想要使用的证书的标识名:


清单 6. 声明证书名
				
globusrun-ws -submit -f ./simplejob.xml 
     -F http://localhost/wsrf/services/ManagedJobFactoryService 
     -subject
 "/O=Grid/OU=GlobusTest/OU=simpleCA-grid.backstopmedia.com/
 OU=backstopmedia.com/CN=Globus Account"
 

证书权限

另外一个需要考虑的问题是对于实际与证书有关的文件的访问权限。私钥应该只能由其所有者读取,而且是不可执行的,其他人都应该不能访问它。其他有关证书的文件也必须是不可执行的和只读的。当前本地用户必须是这个文件的所有者。而且,证书必须由 CA 进行签名。仅仅请求一个证书是不够的,您还必须将其提交到 CA 进行签名,并在返回之后安装签名过的版本。

证书过期

有关证书及其在网格环境中的使用还有一点需要注意:在开始运行网格客户机之前,您需要使用证书来创建一个网格代理,用来处理安全需求。

但是就像 savvy 管理员要求您尽快修改密码一样,代理也必须周期性地进行更新。(默认情况下,代理的有效期是 6 个小时。)当您试图提交并运行一个作业时,系统会对代理进行检查,您会看到一个错误报告说您没有有效代理,或者您的证书已经过期了。

如果您的代理已经存在一段时间了,那么原因就可能是因为代理过期了。有时这会是一个过期的代理。但是有时问题却不这么明显。如果您一直不能在机器上执行作业,那么就需要确保它被配置为信任您的 CA。如果您正在将作业提交到一台远程机器上,那就要确保您的主机也被配置为相信这个主机的 CA。

另外一个不太直观的原因与时间有关。如果本地主机和远程主机的时钟不同步,那么您可能会碰到远程机器上的时钟被设置为证书已经过期的时间 —— 或者更为常见的情况是,还没有生效。在后一种情况中,您可以简单地等待一段时间,但是更好的解决方案是确保所有的主机都使用网络时间协议进行了同步。





回页首


解决提交和执行的问题

好,您现在已经安装、配置并正确运行了 GT4。现在已经准备好真正提交作业了。让我们来查看一下环境变量,如何处理连接错误,以及在 GT4 中应该怎样运行 pre-Web 服务和 Web 服务。

环境变量

在实际开始运行作业之前,您需要能找到提交作业所必需的应用程序。确保所有必需的工具都已经包含到路径设置中,最简单的方法就是执行 globus-user-env 脚本,这是启动程序的一部分。例如,您可以将其添加到 profile 中,如清单 7 所示。


清单 7. 将 globus-user=env 脚本添加到 profile 中
				
...
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi

JAVA_HOME=/home/globus/jdk1.5.0_02
ANT_HOME=/home/globus/apache-ant-1.6.2
GLOBUS_LOCATION=/home/globus/gt4
POSTGRES_HOME=/usr/local/pgsql
GPT_LOCATION=$GLOBUS_LOCATION
GLOBUS_HOSTNAME=grid.backstopmedia.com

#RLS installation parameters
GLOBUS_IODBC_PATH=$GLOBUS_LOCATION
ODBCINI=$GLOBUS_LOCATION/var/odbc.ini
IODBCSRC=/home/globus/libiodbc-3.52.2
ODBCINIDIR=$GLOBUS_LOCATION/var
PSQLODBCSRC=/home/globus/psqlodbc-7.2.5
export GLOBUS_IODBC_PATH ODBCINI IODBCSRC ODBCINIDIR PSQLODBCSRC

PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$GLOBUS_LOCATION/bin:
 $POSTGRES_HOME/bin:$PATH

export PATH=/usr/local/mysql/bin:$PATH

export JAVA_HOME ANT_HOME GLOBUS_LOCATION 
 POSTGRES_HOME GPT_LOCATION GLOBUS_HOSTNAME

. $GLOBUS_LOCATION/etc/globus-user-env.sh

...

连接被拒绝

提交作业时一个常见的问题是经典的连接被拒绝错误。希望管理员已经确保容器不会被阻隔在防火墙之外,但是您仍然需要确保自己正在使用合适的协议(和端口)。例如,在大部分情况下,容器都会被配置来使用网格安全基础设施(GSI),所有的服务都会使用 SSL,通常是使用 8443 端口。这意味着您必须使用 HTTPS 协议来提交作业,如下所示:

globusrun-ws -submit -f ./simplejob.xml -F 
 https://localhost:8443/wsrf/services/ManagedJobFactoryService

然而,如果您使用 HTTP 协议提交作业,如下所示:

globusrun-ws -submit -f ./simplejob.xml -F 
 http://localhost/wsrf/services/ManagedJobFactoryService

那么您实际上是将作业提交到了 80 端口上,因此就不能建立连接。如果您必须使用 HTTP 来建立连接,就需要确保是使用 -nosec 开关来启动容器的,例如: globus-start-container -nosec

这样可以在启动容器时不使用安全性和 SSL,这让您可以使用 HTTP 来访问服务。(当然,这意味着您无法使用 HTTPS 来建立连接,并且丧失了安全性的优点。如果您的应用程序依赖于使用证书进行认证,那么这种方法就不适合您的情况。)

使用正确的工具来处理正确的作业

您还需要确保自己正在使用正确的脚本来实际提交作业。在 GT4 中,pre-Web 服务和 Web 服务的版本会同时存在,但是特定的工具只能与另外一个特定的工具协同工作。例如,globus-job-submit 脚本只能与 gatekeeper pre-WS-GRAM 一起使用。要将作业提交到 WS-GRAM 上,您需要使用 globusrun-ws 脚本。(最后,在当前的开发版本中,您可以使用 globus-job-submit-ws。)





回页首


结束语

正如我们所展示的一样,由于 GT4 非常复杂,系统中可能存在各种问题,使您在安装、配置和使用这个功能强大的网格工具包时会经历很多痛苦。这些问题,尤其是本文中介绍的对这些问题的解决方案,可以节省您大量的时间,并帮您避免出现这些常见的问题。现在您所实现的网格计算表面上看起来就没什么问题了,这对于采用一种系统的方法来说是非常有效的。



参考资料

学习
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

  • 通过阅读 GT4 Admin Guide 来学习如何安装 Globus Toolkit。您还可以参考 Globus Toolkit 4.0 Release Manuals 的其他部分。

  • 要接受某个特定 CA 的证书,您需要确保已经安装了这个 CA 提供的安装包。有关如何从正确的 CA 来安装这个安装包的详细信息请参阅 GT4.0 SimpleCA: Admin Guide

  • 有关 GSI、证书和 GT4 安全性的更多信息,请阅读“GT4 安全性简介”。

  • 有关 GT4 安全性所涉及的概念的概述,请参阅 Travis Van 撰写的“网格进展: 安全报告”,Travis Van 是 Globus Consortium 的 PR 主席。

  • 请访问 developerWorks 中国网格计算专区 中丰富的网格信息。


获得产品和技术

讨论


关于作者

Nicholas Chase 的照片

Nicholas Chase 是 Studio B 的作者,他参与了 Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers 等公司的 Web 站点的开发。Nick 曾当过高中物理教师、低放射性废弃物设备管理员、在线科幻小说杂志编辑、多媒体工程师和 Oracle 讲师。最近,他成为 Site Dynamics Interactive Communications(位于佛罗里达州克利尔沃特市)的首席技术官,而且还是三本有关 Web 开发的书籍的作者,包括 XML Primer Plus(Sams)。他乐于听取读者的意见,您可以通过 nicholas@nicholaschase.com 与他联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款