级别: 中级 Andrew Tomlinson (tomlia@uk.ibm.com), I/T 专家, IBM
2007 年 9 月 24 日 本文是关于部署 IBM Lotus Connections 的系列文章(共分六部分)的第四部分,主要关注如何在安装期间进行故障诊断。描述如何诊断安装故障,如何识别导致问题的组件,以及如何解决最常见的问题。
本文描述如何诊断在安装 IBM Lotus Connections 期间遇到的故障。第一个(也是最重要的)步骤是根据 IBM Lotus Connections Information Center 中的描述全面检查 Lotus Connections 安装过程,确保严格执行了所有步骤。如果确定已经正确执行了指令,那么应该提出以下这些问题:
- 问题发生在哪里?
- 问题是什么?
- 如何解决这个问题?
本文的内容适合于 I/T 专家和架构师,他们承担部署 Lotus Connections 的任务。
本文提供从安装 Lotus Connections 的过程中收集的实践经验,描述一些常见问题及其解决方案。第一节从高层面描述如何寻找问题。后面三节主要关注特定组件,并描述如何进行故障诊断并在找到问题之后修复错误。最后一节描述如何收集更多的诊断信息。
确定问题的位置
Lotus Connections 出现问题的第一个表现是在 Web 浏览器中显示一个错误页面。本节讨论不同类型的错误显示及其意义。显示的错误页面类型决定应该采用哪些步骤来诊断问题。
HTTP 404 或 Not Found 错误页面
如果 Web 浏览器显示 HTTP 404 错误(见图 1),这就表示很可能是 Web 服务器的配置出现了问题。这可能是 Web 服务器的启动、Web 服务器插件、Lotus Connections 导航条配置或 SSL 的问题。
为了收集更多的信息,要检查位于以下位置的 Web 服务器日志:
<IHS_install_directory>\logs\access.log
<IHS_install_directory>\logs\error.log
服务器访问日志记录所有 Web 服务器活动,包括关于每个请求的以下信息:
- 请求的内容
- 请求它的用户
- 发出请求的时间
- 使用的方法
- 响应中发送的文件类型
- 返回码
错误日志包含诊断信息,并记录在处理请求时遇到的任何错误。
图 1. HTTP 404 或 Not Found 错误页面
HTTP 500 Internal Server Error
另一个常见的错误是 500 Internal Server Error(见图 2)。对于在执行任何 Lotus Connections 处理之前发生的错误,或者错误并非在 Lotus Connections 中处理,会显示这个页面。为了找到这些错误的原因,应该检查 Java Virtual Machine(JVM)日志。日志的默认名称是 SytemOut.log 和 SystemErr.log,位于:
<WAS_install_directory>\profiles\<profileName>\logs\<servername>\
图 2. HTTP 500 Internal Server Error
这些日志记录 JVM 抛出的异常。研究这些信息,判断出现问题的位置。
如果问题与数据库相关,那么可能出现与清单 1 相似的异常。进一步的故障诊断方法参见本文的 “数据库错误” 一节。
清单 1. SQLException
[30/05/07 14:53:48:941 BST] 00000025 OpenActivitie E
org.apache.commons.logging.impl.Jdk14Logger error CLFRA0091E:
internal error
com.ibatis.dao.client.DaoException: Error getting MemberProfile:
java.sql.SQLException: Error: executeQueryForObject returned
too many results.
Caused by: java.sql.SQLException: Error: executeQueryForObject
returned too many results
|
如果问题与安全性相关,那么可能出现与清单 2 相似的异常。进一步的故障诊断方法参见本文的 “WebSphere Application Server 安全问题” 一节。
清单 2. LDAPException
[29/05/07 21:19:46:315 BST] 00000026 LdapAdapter E
com.ibm.ws.wim.adapter.ldap.LdapAdapter authenticateWithPassword
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308:
LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e,
vece ]; resolved object com.sun.jndi.ldap.LdapCtx@18621862
|
在集群环境中,诊断会进一步复杂化。在这种场景中,需要检查集群中每个应用服务器的日志。问题可能在所有服务器上存在,也可能只出现在一个服务器上,还可能需要停止一些应用服务器来确定问题的位置。
Lotus Connections 错误
当在执行一个函数期间抛出一个异常时,Lotus Connections 就会显示一个错误页面(见图 3)。单击 Show Full Error Message 就会显示这个异常的详细信息。有时候,错误消息的根本原因没有传递给浏览器。如果发生这种情况,就要进一步检查 SystemOut.log 和 SystemErr.log。
图 3. Lotus Connections 错误
Page Not Found 和 Web 服务器插件问题
本节讨论与 Web 服务器、Web 服务器插件和 Page Not Found 错误相关的问题的诊断和解决步骤。这些错误常常表示为 HTTP 404 错误。
确定 Web 服务器已经启动
首先要检查 HTTP 服务器是否已经启动。
在 Microsoft Windows 中,HTTP 服务器很可能作为一个服务运行:
- 从 Start 菜单导航到 Administrative Tools - Services,打开 Services 窗口。
- 检查 IBM HTTP Server 服务是否已经启动。
- 如果这个服务没有启动,那么右键单击这个服务并单击 Start。
在 Unix 中,执行以下步骤:
- 执行命令 cd <IHS_install_directory>/bin。
- 执行命令 ./apachectrl start。
如果 HTTP 服务器成功启动了,那么再次尝试访问 Lotus Connections URL。
如果服务器没有启动,那么通过检查 HTTP 服务器日志进行进一步诊断,并参考本文后面的小节。
Web 服务器配置错误
如果 Web 服务器启动失败,那么可能是手工修改破坏了 HTTP 配置文件(对于 IBM HTTP 服务器是 httpd.conf)。请检查所有手工修改并参考 Lotus Connections Information Center。一个常见错误是忘了启用用于重写规则的模块。必须取消下面一行的注释才能使用重写规则:
LoadModule rewrite_module modules/mod_rewrite.so
在修复这个问题之后,重新启动 Web 服务器并再次尝试操作。
Web 服务器插件
如果服务器成功启动,那么直接访问 IBM WebSphere Application Server,绕开 HTTP 服务器,从而确定可以访问 Lotus Connections 组件。
为此,在访问 Lotus Connections 服务时,要使用应用服务器的主机名和端口号。这种方法可以查明应用服务器是否正在监听 HTTP 请求(常常在端口 9080 上)。例如,使用 URL http://serverhostname:9080/profiles 访问配置文件。
如果页面显示出来了,这可能说明是模块映射和 Web 服务器插件出了问题。如果是这样,就需要重新生成插件。为此,需要执行以下步骤:
- 访问 WebSphere Administrative Console,例如,http://serverhostname:9060/ibm/console。
- 导航到 Applications - Enterprise Applications - <Connection component> - Manage Modules。
- 在 Clusters 和 Servers 框中,选择应用服务器和 Web 服务器的名称,本例中选择 server1 和 webserver1。
- 选择列出的所有模块的复选框,然后单击 Apply 和 Save,见图 4。
图 4. Manage Modules 对话框
- 在 Administrative Console 中,导航到 Servers - Web servers。
- 选择 Web 服务器旁边的复选框,单击 Generate Plug-in 按钮,见图 5。
图 5. Web servers 对话框
- 再次单击 Web 服务器旁边的复选框,单击 Propagate Plug-in 按钮。
- 最后重新启动 Web 服务器,导航到 Lotus Connections 组件的 Web 地址。
Lotus Connections 导航条
单击 Lotus Connections 导航条上的链接也可能导致 404 错误。这可能是因为在安装期间输入了错误的主机名。这些主机名保存在配置文件 LotusConnections-config.xml 中。可以使用 connectionsConfig.py 脚本文件和 wasadmin 查看和修改当前的设置。关于具体操作的详细信息,参见 Lotus Connections 文档。
HTTPS 问题
在某些情况下,HTTPS 对于某个 Web 服务器插件不起作用。如果发生这种情况,可能会看到 GSK_ERROR。在使用 HTTPS 通过 IBM HTTP Server 访问 WebSphere Application Server 应用程序时,如果看到错误 500,那么要检查 Web 服务器和 WebSphere Application Server 日志。如果这些日志不包含错误,那么检查以下目录中的插件日志:
<IHS_install_directory\Plugins\logs\webserver1\http_plugin.log
如果插件不信任您的 WebSphere Application SSL 证书,那么会产生以下错误:
ERROR: lib_stream: openStream: Failed in r_gsk_secure_soc_init:
GSK_ERROR_BAD_CERT(gsk rc = 414)
修复这个错误的步骤参见 Lotus Connections 文档。
WebSphere Application Server 安全问题
在 WebSphere Application Server 中,LDAP 设置的错误可能会导致安全问题。
配置本地用户
为了访问 WebSphere Administrative Console,必须要配置一个本地管理用户。这个用户名存储在本地文件 InternalFileRepository 中,所以不需要使用 LDAP 就可以访问 Administrative Console。任何时候都可以修改或删除这些名称。
为此,需要执行以下步骤:
- 在 WebSphere Administrative Console 中,导航到 Security - Security Administration, applications, and infrastructure。
- 单击 Configure。
- 在 General Properties 屏幕上,保持 Realm 名称不变,并添加一个主管理用户名。要确保添加的名称在 LDAP 目录中不存在,因为如果有 LDAP 连接的话,在尝试登录 Administrative Console 时,这会导致问题。
- 接下来,选择 “Automatically generated server identity” 选项。
图 6. 本地管理用户
- 单击 Apply 按钮,然后单击 Save 按钮。
- 出现提示时,输入主管理用户名的密码。
检查 LDAP 设置
为了检查 LDAP 设置是否有问题,需要执行以下步骤:
- 使用 LDAP 目录中存储的管理用户名尝试访问 WebSphere Administrative Console。
- 如果登录成功,那么继续执行下一步。如果登录失败,那么使用本地管理用户名登录(参见前一节)。
- 导航到 Security Settings。
- 检查当前的领域定义是否设置为 Federated repositories。如果不是,那么在 Available realm definitions 中选择 Federated repositories 并单击 Set as current。应用并保存修改。
- 在 Available realm definitions 中选择 Federated repositories,然后单击 Configure。
- 单击 Repository Identifier 的链接,从而查看 Repository Reference 页面中的 General properties。
- 检查图 7 所示的所有 LDAP 设置是否正确,尤其是以下设置:
- 目录类型
- 主主机名和端口
- 绑定识别名
- 绑定密码
- 登录属性
图 7. LDAP General Properties 对话框
- 检查图 8 所示的 LDAP 实体类型,检查搜索基和搜索过滤器是否正确。
图 8. LDAP 实体类型
- 导航到 Secure administration, applications, and infrastructure。确保选择 Administrative security 和 Application security 复选框,见图 9。
图 9. Secure administration, applications, and infrastructure 配置
- 单击 Apply 按钮,然后单击 Save 按钮。
- 检查是否可以从应用服务器机器连接到 LDAP 目录。使用一个 LDAP 浏览器(比如 Softerra LDAP Administrator)和第 7 步所示的证书进行连接。
数据库错误
本节讨论与数据库、数据源和 IBM Tivoli Directory Integrator 相关的错误。
数据库
Lotus Connections 使用 5 个数据库,即 BLOGS、DOGEAR、PEOPLEDB(配置文件)、OPNACT(活动)和 SNCOMM(社区)。一定要创建所有数据库并确保它们正在运行。
按照以下步骤检查是否已经创建并启动了数据库。这些步骤专门针对 IBM DB2;Oracle 的步骤是相似的,所以这里不再重复介绍。
- 检查在数据库服务器机器上是否启动了数据库。
-
Windows:
选择 Start - Administrative Tools - Services。
如果服务没有启动,那么右键单击服务并单击 Start 按钮。
-
Unix:
将目录切换到 /opt/sqllib/bin/。
执行命令 ./db2start。
- 数据库启动之后,在安装数据库的系统上会打开一个 db2 命令窗口。
- 输入连接命令来连接 Lotus Connections 数据库;例如
db2 connect to peopledb user db2admin using <password>
- 如果这个命令失败,那么就说明还未创建数据库。运行数据库创建脚本(更多信息参见 Lotus Connections 文档页面)。
- 接下来,从一个命令窗口执行一个简单的 telnet 命令,从而检查应用服务器机器和数据库机器之间的连接。例如,使用以下命令:
telnet <ip_address_of_db_box> <port_number_db_listening_on>
如果出现一个空的命令窗口,其标题为 Telnet <ip address>,就说明连接是成功的。如果连接失败了,就要检查数据库系统的防火墙设置。
对于以下步骤,需要一个 DB2 客户机。Lotus Connections 只使用 JDBC type 4 驱动程序,它不要求客户机机器(应用服务器)上有本机 DB2 支持。也就是说,不需要 DB2 客户机,也不需要对数据库进行编目。但是,如果有客户机的话,这些步骤可能有助于检查远程系统到数据库的连接。
- 在安装应用服务器的系统上,打开一个 db2 命令窗口。
- 输入一个连接命令来连接 Lotus Connections 数据库:
Db2 connect to peopledb user db2admin using <password>
- 如果这个命令失败,而且使用的数据库是 DB2,那么要确保在应用服务器系统上对数据库进行编目。例如,使用以下命令:
db2 catalog database <database name> at node <node name>
关于对数据库进行编目的更多信息,参见 DB2 Database Information Center。
数据源
检查了数据库和到应用服务器的连接之后,就要测试应用服务器中的数据源。如果在安装 Lotus Connections 期间输入了错误的数据库信息,就可能导致错误。
按照以下步骤检查数据源:
- 登录 WebSphere Administrative Console。
- 选择 Resources - JDBC - Data sources。
- 选择一个数据源,然后单击 Test Connection,见图 10。
图 10. 在 WebSphere Administrative Console 中列出数据源
成功的响应是 “The test connection for data source profiles on server server1 at node uklondmvmlabp3Node01 was successful”,见图 11。
图 11. 成功的连接测试
- 如果测试失败,那么单击数据源名称,检查 data source properties 屏幕上的服务器名和端口号(见图 12),并进行相应的修改。如果修改了任何设置,那么单击 Apply 和 Save。
图 12. 数据源属性
- 接下来,选择 JAAS – J2C authentication data,见图 13。
图 13. JAAS – J2C 身份验证数据
- 选择测试的数据源所用的别名。检查用户 ID 和密码,并进行相应的修改。如果必要的话,那么单击 Apply 和 Save,见图 14。
图 14. JAAS 项配置
Tivoli Directory Integrator
Tivoli Directory Integrator 用来将数据装载进 Profiles(PEOPLEDB)数据库。许多系统要求对 Lotus Connections 提供的数据装载脚本进行定制,因为在客户之间数据源是有差异的。这里只提供基本的故障诊断步骤;对这个主题的完整讨论超出了本文的范围。
日志
在运行每个脚本之后,会在以下目录中生成 ibmdi.log:
<TDI_install_directory>/tdisol/TDI/logs/
这个日志指出脚本运行是否成功,并记录发生的任何错误。
还要检查脚本运行专用的特定日志。例如,在运行 populate_from_dn_file.bat 时会创建一个名为 populatefromdnfile.log 的日志文件。
属性
如果在运行 Tivoli Directory Integrator 脚本时发生错误,或者没有按照预期填充数据,那么应该检查以下文件。
- 检查 <TDI_install_directory>/tdisol/TDI 中的 map_dbrepos_from_source.properties,确定所需的所有字段都正确地映射了。
- 检查 profiles_tdi.properties,特别注意以下属性:
- source_ldap_url
- source_ldap_user_login
- source_ldap_user_password
- source_ldap_search_base
- source_ldap_search_filter
- dbrepos_jdbc_url
- dbrepos_jdbc_driver
- dbrepos_username
- dbrepos_password
- 检查 <TDI_install_directory>/tdisol/TDI 中的 tdienv 文件,确定路径设置为 Tivoli Directory Integrator 的安装目录。
- 确定数据库驱动程序可以访问 Tivoli Directory Integrator。例如,如果使用 DB2,那么将 db2jcc_license_cu.jar 文件从 <DB2_install_directory>/java/ 复制到 <TDI_install_directory>/jvm/jre/lib/ext/。
- 为了收集更多的调试信息,在 profiles_tdi.properties 中将 source_ldap_debug 设置为 true。这个标志会将更多的调试信息输出到日志中。它还为 Tivoli Directory Integrator 的装配线中使用的连接器设置详细日志(在数据库存储库的数据源处理过程中要使用连接器)。
服务器跟踪
本节描述如何在 WebSphere Application Server 和 IBM HTTP Server 上启用跟踪。当日志文件提供的信息不足以准确判断问题时,跟踪会有帮助。
WebSphere Application Server 跟踪
在 WebSphere Application Server 上,可以为特定的组件启用跟踪。尽管建议只有在支持人员的帮助下才能这样做,但是为了完整性,这里也讨论这种做法。
按照以下步骤启用跟踪:
- 在 WebSphere Administrative Console 中,选择 Troubleshooting - Logs and Trace。
- 从服务器列表中选择使用的应用服务器。
- 选择 Diagnostic Trace Service,然后选择 Configuration 附签(如果它还未显示的话)。
注意:可以在正在运行的服务器上启用跟踪,但是只能对于通过选择 Runtime 而确定的服务器进程运行持续时间启用跟踪,因此不需要在第 8 步中重新启动服务器。
- 选择 Enable Log 选项。
- 选择跟踪输出是写到文件,还是写到内存缓冲区。
- 选择 Change Log Detail Levels 选项(也可以通过选择 Troubleshooting - Logs and Trace - <application server name> - Change Log Detail Levels 进入这个选项的设置界面)。
- 应用服务器中的每个组件可以设置为不同的信息级别。进行手工设置的方法是在文本框中输入一个跟踪字符串,或者单击列表中的一个组件并从弹出框中选择一个日志级别,见图 15。
图 15. Change Log Detail Levels 对话框
- 单击 Apply 按钮,然后单击 Save 按钮。
- 重新启动应用服务器。
有时候,默认的日志太小,在进行诊断之前就会被覆盖。为了避免这种情况,考虑将日志大小增加到 20-30 MB 并保留大量旧日志。
按照以下步骤进行这一修改:
- 在 WebSphere Administrative Console 中,选择 Troubleshooting - Logs and Trace。
- 从服务器列表中选择使用的应用服务器。
- 单击 JVM。
- 在 System.out 和 System.err 部分中修改 Maximum Size 和 Maximum Number of Historical Log Files。
- 单击 Apply 按钮,然后单击 Save 按钮。
Web 服务器插件跟踪
可以改变 Web 服务器插件的日志级别来提供更多信息。按照重要程度从高到低的次序,可用的值是 Trace、Stats、Warn、Error(默认)。高级别包含低级别中的功能。例如,Warn 级别包含警告消息和错误消息。
按照以下步骤修改日志级别:
- 在 WebSphere Administrative Console 中,选择 Servers - Web Servers。
- 选择 Web 服务器的名称。
- 选择 Plug-in properties。
- 在 Plug-in logging 部分中,修改日志级别。
- 单击 Apply 按钮,然后单击 Save 按钮。
- 返回到 Web Servers 界面,选择 Web 服务器旁边的复选框并单击 Generate Plug-in。
- 重新启动 Web 服务器。
Web 服务器跟踪
还可以通过修改 HTTP Server 的 LogLevel,修改 Web 服务器的日志级别,步骤如下:
- 在文本编辑器中打开 <IHS_install_directory>/conf 中的 httpd.conf 文件,然后找到 LogLevel 参数。
- 将日志级别设置为以下值之一:
- emerg:紧急 —— 系统不可用
- alert:必须立即采取行动
- crit:危急情况
- error:错误情况
- warn:警告情况
- notice:正常但值得注意的情况
- info:一般信息
- debug:调试级消息
- 保存并关闭文件。
- 重新启动 Web 服务器。
结束语
在本文中,您学习了关于故障诊断的知识,了解了如何定位、诊断和解决在安装 Lotus Connections 期间可能发生的一些常见问题。了解了不同类型的错误及其诊断和修复方法。本文描述了与 Web 服务器、HTTP 插件、应用服务器安全性、数据库和 Tivoli Directory Integrator 相关的问题的解决步骤。
参考资料 学习
讨论
关于作者  | |  | Andrew Tomlinson 是 IBM Software Services for Lotus 的 I/T 专家。他从 2007 年 2 月开始从事 IBM Lotus Connections 的早期适配器客户开发。Andrew 于 2006 年 6 月从 IBM Global Business Services 转到 IBM Software Services,他在 IBM Software Services 作为 Java 开发人员参与了许多大型应用程序交付项目。可以通过 tomlia@uk.ibm.com 联系 Andew。 |
对本文的评价
|