Liberty 群體疑難排解

在進行 Liberty 疑難排解時,您可能會遇到一些常見問題。這些問題通常與群體控制器、成員或主機系統的配置有關。請瀏覽問題清單,瞭解如何解決問題。

如需其他問題的修正程式,請參閱 執行時期環境的已知問題和限制

涉及連線的問題

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 檔中檢查下列:

  1. 請確定已配置管理者角色。對映 Liberty 的管理者角色會比較 quickStartSecurity 元素設定與基本或 LDAP 登錄中的那些設定。
  2. 檢閱 SSL 配置,並視需要來更新。
    1. 檢查任何預設 SSL 配置。尋找 <sslDefault sslRef="LDAPSSLSettings"></sslDefault>,看看 server.xml 檔是否包含預設配置,以及是否需要指定一項 SSL 配置作為預設值。

      如果不需要 <sslDefault sslRef="LDAPSSLSettings"></sslDefault> 配置,請移除它,使配置有兩個以上要使用的 SSL 配置(例如,一項用於群體,一項用於 LDAP)。

      如果需要預設配置,請保留 <sslDefault sslRef="LDAPSSLSettings"></sslDefault> 字行,並繼續進行步驟 b 和 c,以便新增用戶端鑑別,並將憑證匯入至預設 SSL 配置。請參閱 在 Liberty 中配置 LDAP 使用者登錄

    2. 啟用用戶端鑑別。使用 clientAuthenticationSupported="true,為伺服器配置 HTTPS 埠。

      例如,群體控制器基於安全,而使用 LDAP SSL 預設值,在其 ssl 元素中必須設定 clientAuthenticationSupported="true,以便處理群體成員。

    3. 匯入必要的憑證。您可以使用 keytool 來匯入憑證。預設信任儲存庫必須包含 collectiveTrust.jks 中的憑證。
背景資訊:

依預設,<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...)
原因:

信任儲存庫和信任儲存庫密碼可能不正確。 請確定信任儲存庫路徑、信任儲存庫密碼及信任儲存庫的內容正確。

涉及 startstop 指令的問題

從遠端啟動或停止伺服器時,造成「找不到 Java」錯誤
訊息:

從遠端啟動或停止伺服器(例如,使用 ClusterManager.startClusterServerCommands.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 金鑰鑑別失敗:
  • 檢查下列項目許可權:
    • ~/.ssh 應該是 0700
    • ~/.ssh/authorized_keys 應該是 0600
  • 如果使用 SELinux,~/.ssh 及所有子項都必須正確。 請利用 restorecon -R 來修正許可權。
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.startClusterServerCommands.startServer 等之類的指令,從遠端啟動或停止伺服器時,可能造成錯誤。

訊息 CTGRI0001E 以及訊息 CTGRI0026E 可能指出,同時有太多 SSH 連線指向主機。可能原因:
  • 自主,例如:調整控制器
  • 在單一主機中的多部伺服器上執行 ClusterManager.startClusterServerCommands.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 與其他設定,可紓緩連線問題:
ClientAliveInterval 60
ClientAliveCountMax 3
MaxSessions 100
MaxStartups 100:30:200
LoginGraceTime 180
如需 Secure Shell (SSH) 通訊協定,以及變更 /etc/ssh/sshd_config 設定的相關資訊,請參閱設定 RXA 以執行 Liberty 群體作業
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 作業都需要存取標準使用者帳戶通常無法存取的資源。 請參閱 設定 RXA 以執行 Liberty 群體作業

涉及群體管理的問題

群體 remove 指令不會將自動調整的叢集成員從群體移除
訊息:
${wlp.install.dir}/Cluster1.zip/wlp/usr 位置找不到伺服器 Cluster1
未移除任何群體資源。找不到指定的 userDir ${wlp.install.dir}/Cluster1.zip/wlp/usr
解決方案:

標準做法是不要手動將自動調整的叢集成員從群體移除。調整控制器會自動管理群體。請參閱 配置可供應的叢集以支援 Liberty 彈性

不過,如果您需要移除調整控制器新增至群體的叢集成員,您可以設定 WLP_USER_DIRJAVA_HOME 環境變數,然後執行群體 remove 指令,將該叢集成員從群體移除。

  1. WLP_USER_DIR 設為您想移除之自動調整叢集成員的位置。
    export WLP_USER_DIR=/wlp.usr/defaultStackGroup.Cluster1/d16d298c-ea7f-4782-bef6-2e54fb80de20/Cluster1.zip/wlp/usr
  2. 如果 Java 無法從自動調整叢集成員的位置來執行,請設定 JAVA_HOME,以便執行 Liberty 指令來移除該叢集成員。
    export JAVA_HOME=/wlp.jre/jre.18.zip/
  3. 停止該叢集成員。
    /wlp/wlp.855.zip/wlp/bin/server stop Cluster1
  4. 執行 collective remove 指令,將該叢集成員從群體移除。
    /wlp/wlp.855.zip/wlp/bin/collective remove Cluster1 --host=controllerHost --port=9443 --user=admin --password=password

    請參閱 將成員從 Liberty 群體移除


指示主題類型的圖示 概念主題

檔名:cwlp_collective_trouble.html