Liberty 群體疑難排解
在進行 Liberty 疑難排解時,您可能會遇到一些常見問題。這些問題通常與群體控制器、成員或主機系統的配置有關。請瀏覽問題清單,瞭解如何解決問題。
- 涉及連線的問題
- 涉及 start 和 stop 指令的問題
- 涉及群體管理的問題
如需其他問題的修正程式,請參閱 執行時期環境已知的問題和限制。
使用 REST 連接器的 CLI、Jython 或 MBean 連線所涉及的問題
- CWWKX0217E: 目前沒有 MBean 向給定 object_name 登錄
- 訊息:
原因:Error: CWWKX0217E: No MBean is currently registered with the given ObjectName 'WebSphere:feature=collectiveController,type=CollectiveRegistration,name=CollectiveRegistration'
可能是這個 MBean 還無法使用。 請檢查伺服器日誌,以查看這個 MBean 是否已報告為備妥。
群體儲存庫可能不在執行中。請檢查群體儲存庫是否已啟動。
如果目標是群體控制器,請確認抄本集在作用中。 如果大部分群體控制器抄本都沒有啟動,就會顯示這則訊息。請啟動其餘抄本。
伺服器配置可能不完整。請確定已適當配置伺服器。
- CWWKX0215E: 所提供的使用者名稱或密碼有問題。
- 訊息:
原因:錯誤:CWWKX0215E: 所提供的使用者名稱或密碼有問題。伺服器以 401 代碼做出回應,訊息是「未獲授權」
使用者名稱與密碼可能不正確。請確定目標伺服器的使用者名稱與密碼正確。
使用者可能未獲授與「管理者」角色。 請確定使用者已獲授與「管理者」角色,或選擇另一位使用者。
目標伺服器的安全配置可能不完整。 請確定已定義安全配置,且安全服務報告為已備妥 (CWWKS0008I)。
- CWWKX8057I: 群體成員無法建立對任何「群體控制器」的連線。所配置的控制器:[host_name:port_number]
- 訊息:
原因:CWWKX8057I: 群體成員無法建立對任何「群體控制器」的連線。所配置的控制器:[test.ibm.com:8889]
伺服器可能不在執行中。請驗證群體控制器和成員伺服器正在執行。
如果伺服器正在執行,請判斷控制器或成員之 server.xml 中的 SSL 配置最近是否已變更。如果此 CWWKX8057I 訊息發生在成員中,很可能是控制器的 SSL 配置不正確。如果此 CWWKX8057I 訊息發生在控制器中,很可能是成員的 SSL 配置不正確。當配置沒有使用 quickStartSecurity 元素時,就可能發生問題。
如果要修正 SSL 配置問題,請在 server.xml 檔中檢查下列:
依預設,<sslDefault sslRef> 會指向 defaultSSLSettings。如果將群體控制器配置中的 <sslDefault sslRef> 變更成不是指向 defaultSSLSettings,例如,改成指向 <sslDefault sslRef="LDAPSSLSettings"/>,除非配置具有 clientAuthenticationSupported="true",且 Liberty 伺服器信任具有用戶端憑證的任何 SSL 同層級,否則會發生 CWWKX8057I 錯誤。
HTTPS 的 SSL 設定必須信任群體憑證。如果將 <sslDefault sslRef> 變更成不是指向 defaultSSLSettings,且又沒有指定 clientAuthenticationSupported="true",則可能解除 defaultSSLSettings 與其 HTTPS 配置的連結。群體 SSL 設定是預設配置的一部分。
如需相關資訊,請參閱對映 Liberty 的管理者角色、在 Liberty 中配置 LDAP 使用者登錄和配置 httpEndpoint 使用非預設 SSL 配置。
- 錯誤:連線遭到拒絕:connect
- 訊息:
原因:錯誤:連線遭到拒絕:connect
主機和埠可能不正確。請確定目標伺服器的主機和埠正確。
伺服器可能不在執行中。 請確定伺服器在執行中。
- java.net.SocketException 錯誤
- 訊息:
原因:java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)(possibly others...)
信任儲存庫和信任儲存庫密碼可能不正確。 請確定信任儲存庫路徑、信任儲存庫密碼及信任儲存庫的內容正確。
涉及 start 和 stop 指令的問題
- 從遠端啟動或停止伺服器時,造成「找不到 Java」錯誤
- 訊息:
從遠端啟動或停止伺服器(例如,使用 ClusterManager.startCluster 或 ServerCommands.startServer)發生下列錯誤:
解決方案:{stderr=java: javaCmd 14: serverCmd 32: ./server 873: FSUM7351 not found, stdout=,returnCode=127}
成員伺服器需要 server.env 檔,且其中指定 JAVA_HOME 變數。
- CTGRI0000E: 使用所提供的授權認證無法建立指向目標機器的連線。
- 訊息:
原因:CTGRI0000E 使用所提供的授權認證無法建立指向目標機器的連線。
使用使用者名稱或密碼鑑別失敗:- 確定在目標伺服器的 server.xml <hostAuthConfig> 元素中,使用者名稱和密碼正確。
- 利用群體 updateHost 指令來更新主機鑑別配置。
利用 ssh 金鑰鑑別失敗: - CTGRI0001E: 應用程式無法建立指向 host_name 的連線
- 訊息:
原因:{ExceptionMessage=ConnectException caught while performing stopCluster operation on member webp1a.ibm.com,/P1A/WebSphere_LP/usr,memberA1: java.net.ConnectException: CTGRI0001E 應用程式無法建立指向 webp1a.ibm.com 的連線,Exception=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) 條未經鑑別的連線,當可能性是 rate/100 (30%),sshd(8) 會拒絕連線嘗試。可能性呈線性增加,一旦未經鑑別的連線數抵達 full (60),就會拒絕所有的連線嘗試。下列範例 SSH 配置檔設定指定 MaxStartups 與其他設定,可紓緩連線問題:
如需 Secure Shell (SSH) 通訊協定,以及變更 /etc/ssh/sshd_config 設定的相關資訊,請參閱設定 Liberty 群體作業的 RXA。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 的 Socket 連結不成功。該埠可能已在使用中,或是主機不符合系統配置。
- 訊息:
解決方案:CWWKX6027E: 群體控制器起始設定不成功。主機 * 和埠 10,010 的 Socket 連結不成功。該埠可能已在使用中,或是主機不符合系統配置。
請確定群體控制器配置中指定的主機值正確。舉例來說,如果群體控制器位於 myhost.com 上,請檢查控制器的 server.xml 檔,確定主機值正確:
<variable name="defaultHostName" value="myhost.com" />
範例訊息顯示星號 (*) 來代表主機,這是暗示主機值可能未造成問題。可能的問題原因是埠衝突。
請確定訊息中的埠號不在使用中。請在群體控制器所在主機的指令行上執行 netstat -a,以查看埠號清單和連線狀態。如果該埠號為使用中,清單會包含一個項目,以下列 port 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 operation resulted in an Exception: ConnectException caught while performing stopCluster operation on member localhost,C:/wlp,member1: java.net.ConnectException: CWWKX7204E: 使用所提供的認證無法連接主機 localhost。
請確定已正確設定叢集成員鑑別資訊,且符合所有 Remote Execution and Access (RXA) 需求。 許多 RXA 作業都需要存取標準使用者帳戶通常無法存取的資源。 請參閱設定 Liberty 群體作業的 RXA。
涉及群體管理的問題
- 群體 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
請參閱 將成員從 Liberty 群體移除。
- 將 WLP_USER_DIR 設為您想移除之自動調整叢集成員的位置。