Liberty 集合体故障诊断
在对 Liberty 进行故障诊断时,可能会遇到一些常见问题。这些问题通常与集合体控制器、成员或主机系统的配置有关。浏览问题列表以了解如何解决这些问题。
- 涉及连接的问题
- 涉及 start 和 stop 命令的问题
- 涉及集合体管理的问题
对于其他问题的修订,请参阅运行时环境已知问题和限制。
涉及连接的问题
- CWWKX0217E: 当前未向给定 object_name 注册 MBean
- 消息:
原因:错误:CWWKX0217E: 当前未向给定 ObjectName 'WebSphere:feature=collectiveController,type=CollectiveRegistration,name=CollectiveRegistration' 注册 MBean
MBean 可能尚不可用。请在服务器日志中检查 MBean 是否报告已就绪。
集合体存储库可能未在运行。请检查集合体存储库是否已启动。
如果目标是集合体控制器,请验证副本集是否处于活动状态。如果大部分集合体控制器副本均未启动,那么将会显示此消息。启动剩余的副本。
服务器配置可能未完成。请确保已正确地配置服务器。
- CWWKX0215E: 提供的用户名或密码存在问题。
- 消息:
原因:错误:CWWKX0215E: 所提供用户名或密码存在问题。服务器以代码 401 和消息“未授权”作为响应
用户名和密码可能不正确。请确保用户名和密码对于目标服务器来说是正确的。
可能未向用户授予管理员角色。请确保向用户授予管理角色,或者选择不同的用户。
目标服务器的安全性配置可能未完成。请确保已定义安全性配置,并且安全服务报告已就绪 (CWWKS0008I)。
- CWWKX8057I: 集合体成员无法建立与任何一个集合体控制器的连接。已配置控制器:[host_name:port_number]
- 消息:
原因:CWWKX8057I: 集合体成员无法建立与任何一个集合体控制器的连接。已配置控制器:[test.ibm.com:8889]
服务器可能未在运行。请验证集合体控制器和成员服务器是否正在运行。
如果服务器正在运行,请确定控制器或成员的 server.xml 中的 SSL 配置最近是否更改。如果成员中出现此 CWWKX8057I 消息,那么控制器更有可能存在错误 SSL 配置。如果控制器中出现此消息,那么成员更有可能存在错误 SSL 配置。配置未使用 quickStartSecurity 元素时,可能发生此问题。
要修正 SSL 配置问题,请检查 server.xml 文件中的以下项:
缺省情况下,<sslDefault sslRef> 指向 defaultSSLSettings。将集合体控制器配置中的 <sslDefault sslRef> 更改为指向 defaultSSLSettings 以外的对象(例如,<sslDefault sslRef="LDAPSSLSettings"/>)会导致 CWWKX8057I 错误,除非该配置具有 clientAuthenticationSupported="true" 并且 Liberty 服务器信任具有客户机证书的所有 SSL 同级。
HTTPS 的 SSL 设置必须信任这些集合体证书。将 <sslDefault sslRef> 更改为指向 defaultSSLSettings 以外的对象并且没有 clientAuthenticationSupported="true"会导致 defaultSSLSettings 与其 HTTPS 配置取消绑定。集合体 SSL 设置包含在缺省配置中。
有关更多信息,请参阅映射 Liberty 的管理员角色、在 Liberty 中配置 LDAP 用户注册表和配置 httpEndpoint 以使用非缺省 SSL 配置。
- 错误:连接被拒绝:连接
- 消息:
原因:错误:连接被拒绝:连接
主机和端口可能不正确。请确保主机和端口对于目标服务器来说是正确的。
服务器可能未运行。请确保服务器正在运行。
- java.net.SocketException 错误
- 消息:
原因:java.net.SocketException:java.security.NoSuchAlgorithmException:构造实现时出错(算法:缺省,提供者:SunJSSE,类:sun.security.ssl.SSLContextImpl$DefaultSSLContext)(可能其他...)
信任库和信任库密码可能不正确。请确保信任库路径、信任库密码和信任库内容是正确的。
涉及 start 和 stop 命令的问题
- 远程启动或停止服务器导致“找不到 Java”错误
- 消息:
远程启动或停止服务器(例如,使用 ClusterManager.startCluster 或 ServerCommands.startServer)时遇到了以下错误:
解决方案:{stderr=java: javaCmd 14: serverCmd 32: ./server 873: FSUM7351 not found, stdout=, returnCode=127}
成员服务器需要用于指定 JAVA_HOME 变量的 server.env 文件。
- CTGRI0000E: 无法使用所提供授权凭证建立与目标机器的连接。
- 消息:
原因:CTGRI0000E: 无法使用所提供授权凭证建立与目标机器的连接。
使用用户名或密码进行认证失败:- 确保用户名和密码在目标服务器的 server.xml <hostAuthConfig> 元素中是正确的。
- 使用集合体 updateHost 命令来更新主机认证配置。
使用 SSH 密钥进行认证失败: - CTGRI0001E: 应用程序无法建立与 host_name 的连接。
- 消息:
原因:{异常消息:对成员 webp1a.ibm.com,/P1A/WebSphere_LP/usr,memberA1 执行 stopCluster 操作时捕获到 ConnectException:java.net.ConnectException: CTGRI0001E 应用程序无法建立与 webp1a.ibm.com 的连接,异常:java.net.ConnectException:CTGRI0001E 应用程序无法建立与 webp1a.ibm.com 的连接。}
使用 ClusterManager.startCluster 或 ServerCommands.startServer 之类的命令远程启动或停止服务器可能导致错误。
消息 CTGRI0001E 与消息 CTGRI0026E 可指示对主机建立了太多并行 SSH 连接。可能的原因是:- 自动控制,例如,缩放控制器
- 对单个主机上的多个服务器运行 ClusterManager.startCluster、ServerCommands.startServer 或其他系统管理命令,该主机与 SSH 守护程序建立的并行未认证连接数超过最大数目。
解决方案:
确认已启动 RPC 机制(例如,SSH)。还应确认所配置设置(例如,主机和端口)是正确的。
如果您的环境使用 SSH,请更改 SSH 配置文件中的设置。SSH 配置 MaxStartups 设置具有缺省并行未认证连接数(10 个)。在 SSH 配置文件 /etc/ssh/sshd_config 中更改 MaxStartups 设置可解决此问题。MaxStartups 设置指定与 SSH 守护程序的并行未认证连接的最大数目。直到认证成功或连接的 LoginGraceTime 到期,其他连接才会被删除。可通过指定三个冒号分隔值 start:rate:full(例如,10:30:60)来启用随机提早删除。如果当前有 start (10) 个未认证连接,那么 sshd(8) 拒绝连接尝试的可能性为 rate/100 (30%)。可能性以线性方式增加,如果未认证连接数达到 full (60),那么所有连接尝试被拒绝。以下样本 SSH 配置文件设置指定 MaxStartups 及可缓解连接问题的其他设置:
有关安全 Shell (SSH) 协议及更改 /etc/ssh/sshd_config 设置的更多信息,请参阅设置 RXA 以执行 Liberty 集合体操作。ClientAliveInterval 60 ClientAliveCountMax 3 MaxSessions 100 MaxStartups 100:30:200 LoginGraceTime 180
- CTGRI0026E 无法在指定超时时间间隔内完成与 host_name 的连接。
- 消息:
原因:CTGRI0026E 无法在指定超时时间间隔内完成与 webp1a.ibm.com 的连接。
与主机的并行 SSH 连接过多可能导致此错误。
解决方案:请参阅消息 CTGRI0001E 的解决方案。
- CWWKX6027E: 集合体控制器初始化未成功。主机 host_name 和端口 port_number 的套接字绑定未成功。该端口可能已在使用中,或者主机与系统配置不匹配。
- 消息:
解决方案:CWWKX6027E: 集合体控制器初始化未成功。主机 * 和端口 10,010 的套接字绑定不成功。该端口可能已在使用中,或者主机与系统配置不匹配。
确保集合体控制器配置中指定的主机值正确。例如,如果集合体控制器驻留在 myhost.com 上,请检查控制器的 server.xml 文件以确保主机值正确:
<variable name="defaultHostName" value="myhost.com" />
示例消息对主机显示星号 (*),即表明主机值可能未导致此问题。此问题的可能原因为端口冲突。
确保消息中的端口号已未在使用中。在集合体控制器所在的主机的命令行中,运行 netstat -a 以查看端口号列表及连接状态。如果该端口号已在使用中,那么对于端口 10,010,该列表包含类似以下的条目:
TCP 127.0.0.1:10010 myhost:0 LISTENING
要修正此端口冲突,请对集合体控制器的 server.xml 文件打开编辑器,并添加将 replicaPort 设置为计算机上未使用的端口号的语句。任何以下语句都可设置 replicaPort 值:
- <collectiveController replicaPort="10011"/>
- <collectiveController replicaHost="myhost.com" replicaPort="10011"/>
- <collectiveController replicaPort="${prop.controller_1.replica}"/>
在 bootstrap.properties 文件或 <variable name="name" value="value"/> XML 标记中,对端口号设置变量,该变量在此语句中具有名称 prop.controller_1.replica,但可具有您选择的任意变量名。
- CWWKX7204E: 无法使用所提供凭证连接至主机 host_name。
- 消息:
解决方案:localhost,C:/wlp,member1 stop 操作导致异常:对成员 localhost,C:/wlp,member1 执行 stopCluster 操作时捕获到 ConnectException:java.net.ConnectException: CWWKX7204E: 无法使用所提供凭证连接至主机 localhost。
请确保已正确设置集群成员认证信息并且满足所有远程执行和访问 (RXA) 要求。许多 RXA 操作需要访问标准用户帐户通常不可访问的资源。请参阅设置 RXA 以执行 Liberty 集合体操作。
涉及集合体管理的问题
- 集合体 remove 命令未从集合体移除自动扩展的集群成员
- 消息:
解决方案:未在位置 ${wlp.install.dir}/Cluster1.zip/wlp/usr 中找到指定服务器 Cluster1 未移除任何集合体资源。 未找到指定 userDir ${wlp.install.dir}/Cluster1.zip/wlp/usr
标准实践是,不手动从集合体移除自动扩展的集群成员。扩展控制器自主地管理集合体。请参阅配置可供应集群以实现 Liberty 弹性。
但是,如果需要移除扩展控制器添加到集合体的集群成员,那么可设置 WLP_USER_DIR 和 JAVA_HOME 环境变量,然后运行集合体 remove 命令以从集合体移除集群成员。
- 将 WLP_USER_DIR 设置为要移除的自动扩展集群成员的位置。
export WLP_USER_DIR=/wlp.usr/defaultStackGroup.Cluster1/d16d298c-ea7f-4782-bef6-2e54fb80de20/Cluster1.zip/wlp/usr
- 如果无法从自动缩放的集群成员位置运行 Java,请设置 JAVA_HOME 以便可运行 Liberty 命令以移除此集群成员。
export JAVA_HOME=/wlp.jre/jre.18.zip/
- 停止集群成员。
/wlp/wlp.855.zip/wlp/bin/server stop Cluster1
- 运行 collective remove 命令以从集合体移除集群成员。
/wlp/wlp.855.zip/wlp/bin/collective remove Cluster1 --host=controllerHost --port=9443 --user=admin --password=password
- 将 WLP_USER_DIR 设置为要移除的自动扩展集群成员的位置。