您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
問題
透過 Edge UI 或 Management API 部署 API Proxy 修訂版本失敗,並顯示逾時錯誤。
錯誤訊息
Click to change deployment status. The revision is deployed and traffic can flow, but flow may be impaired. Error: Call timed out; either server is down or server is not reachable
可能原因
這個問題的常見原因如下:
原因 | 詳細資料 | |
網路連線問題 | 網路連線問題或防火牆規則導致管理伺服器與訊息處理器之間的通訊失敗。 | 僅限私有雲使用者 |
大型 API Proxy 套裝組合 | 如果 API Proxy 組合的大小很大,訊息處理器可能需要較長的時間才能啟用,進而導致遠端程序呼叫 (RPC) 逾時。 | 私人和公有雲使用者 |
網路連線問題
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
診斷
- 請使用下列管理 API 呼叫,取得顯示錯誤的特定 API 部署狀態:
curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>
顯示錯誤的輸出內容示例:
{ "error": "Call timed out; either server is down or server is not reachable", "status": "error", "type": [ "message-processor" ], "uUID": "ebbc1078-cbde-4a00-a7db-66a3c1b2b748" }, { "status": "deployed", "type": [ "message-processor" ], "uUID": "204e2b7e-52f7-46d9-b458-20f9bfb51e6d" }, { "status": "deployed", "type": [ "router" ], "uUID": "967e63c6-ee95-47c0-9608-f4a32638fb1e" }, { "status": "deployed", "type": [ "router" ], "state" : "error" }
上方的範例輸出顯示發生錯誤,其中一個具有 UUID「
ebbc1078-cbde-4a00-a7db-66a3c1b2b748
」的訊息處理器發生了。 - 根據 API Proxy 的部署狀態輸出內容,請使用會顯示錯誤的對應 UUID 登入各個訊息處理器,然後執行下列步驟:
- 檢查訊息處理器是否正在監聽通訊埠 4528:
netstat -an | grep LISTEN | grep 4528
如果訊息處理器未監聽通訊埠 4528,請重新啟動訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 使用上方步驟 1 所示的 Management API 呼叫,重新檢查 API Proxy 的部署狀態。如果沒有錯誤,表示問題已解決。
- 檢查訊息處理器是否正在監聽通訊埠 4528:
- 如果問題仍未解決,請使用下列步驟測試從管理伺服器連線至通訊埠 4528 的訊息處理器連線:
- 如果可以使用 telnet,請使用 telnet:
telnet <MessageProcessor_IP> 4528
- 如果無法使用 telnet,請按照下列步驟使用 netcat 檢查連線:
nc -vz <MessageProcessor_IP> 4528
- 如果您收到「連線遭拒」或「連線逾時」回應,請與網路作業團隊聯絡。
- 如果可以使用 telnet,請使用 telnet:
- 請執行下列步驟,測試從通訊埠 4526 收發訊息處理器與管理伺服器的連線:
- 如果可以使用 telnet,請使用 telnet:
telnet <management-server-IP> 4526
- 如果無法使用 telnet,請按照下列步驟使用 netcat 檢查連線:
nc -vz <management-server-IP> 4526
- 如果您收到「連線遭拒」或「連線逾時」回應,請與網路作業團隊聯絡。
- 如果可以使用 telnet,請使用 telnet:
- 與您的網路營運團隊合作,執行下列操作:
- 確保管理伺服器和訊息處理器允許使用遠端程序呼叫 (RPC) 通訊協定。
- 移除管理伺服器與訊息處理器之間的任何防火牆限製或安全性規則設定,以允許連線至管理伺服器上的通訊埠 4526,以及從管理伺服器連線至通訊埠 4528 的訊息處理器。
- 重新檢查部署狀態 (請參閱上方的步驟 1)。如果沒有看到任何錯誤,則表示已解決錯誤。
- 如果問題持續發生,請檢查訊息處理器是否發生網路問題。如果網路發生問題,重新啟動顯示逾時錯誤的特定「訊息處理器」(如部署狀態輸出內容所示) 或許可以解決問題:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 如果問題仍未解決,請前往以下位置查看管理伺服器記錄:
(
/opt/apigee/var/log/edge-management-server/logs/system.log
)。管理伺服器記錄中的呼叫逾時錯誤
2016-05-17 09:29:56,448 org:myorg env:prod qtp281969267-360792 ERROR DISTRIBUTION - RemoteServicesConfigEventHandler.configureServers() : exception for server with uuid e1381db7-d83b-4752-ae04-2de33f07e555 : cause = RPC Error 504: Call timed out communication error = true com.apigee.rpc.RPCException: Call timed out at com.apigee.rpc.impl.AbstractCallerImpl.handleTimeout(AbstractCallerImpl.java:64) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.handleTimeout(RPCMachineImpl.java:483) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.access$000(RPCMachineImpl.java:402) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall$1.run(RPCMachineImpl.java:437) ~[rpc-1.0.0.jar:na] at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:532) ~[netty-all-4.0.0.CR1.jar:na] at io.netty.util.HashedWheelTimer$Worker.notifyExpiredTimeouts(HashedWheelTimer.java:430) ~[netty-all-4.0.0.CR1.jar:na] at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:371) ~[netty-all-4.0.0.CR1.jar:na] at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_79]
如果您觀察到與上述範例所示的類似錯誤,請提高管理伺服器的遠端程序呼叫 (RPC) 逾時時間,以便在發生網路速度變慢時,讓管理伺服器有時間連線至訊息處理器。
解析度
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 請執行下列步驟,增加遠端程序呼叫 (RPC) 逾時時間:
- 如果管理伺服器機器還沒有檔案,請建立
/opt/apigee/customer/application/management-server.properties
檔案。 - 在這個檔案中新增下列程式碼:
conf_cluster_rpc.connect.timeout=<time in seconds>
預設的遠端程序呼叫 (RPC) 逾時值為 10,建議提高為 40 秒。設定方式如下:
conf_cluster_rpc.connect.timeout=40
- 確保這個檔案的擁有者為 Apigee:
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- 重新啟動管理伺服器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 如果您有多個管理伺服器,請在所有管理伺服器中重複上述步驟。
- 在 Edge UI 中或透過 Edge Management API 呼叫部署 API Proxy。如果部署 API Proxy 沒有出現任何問題,就表示問題已解決。
- 如果管理伺服器機器還沒有檔案,請建立
- 如果問題持續發生,請從管理伺服器和訊息處理器收集
tcpdump 指令。在每個伺服器上啟用 tcpdump 指令,然後透過使用者介面或管理 API 啟動 API Proxy 的部署作業:
- 透過管理伺服器執行下列 tcpdump 指令:
tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
- 透過訊息處理器執行下列 tcpdump 指令:
tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
- 與 Apigee Edge 支援團隊聯絡,取得分析 tcpdumps 的相關協助,並協助您進一步排解問題。
- 透過管理伺服器執行下列 tcpdump 指令:
大型 API Proxy 套裝組合
診斷
- 檢查觀察到的部署錯誤 API Proxy 組合大小。
- 如果大小相當大 (10 MB 以上),則訊息處理器很有可能需要更多時間才能啟用 API Proxy。
- 如果 API Proxy 組合大小超過 15 MB,請繼續使用 大於 15 MB 的 API Proxy 套裝組合。
解析度
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
增加管理伺服器的遠端程序呼叫 (RPC) 逾時,讓訊息處理器有足夠時間啟用大型 API Proxy 套裝組合。請執行下列步驟,提高遠端程序呼叫 (RPC) 逾時值:
- 如果沒有
/opt/apigee/customer/application/management-server.properties
檔案,請在管理伺服器機器上建立該檔案。 - 在這個檔案中新增下列程式碼:
conf_cluster_rpc.connect.timeout=<time in seconds>
預設的遠端程序呼叫 (RPC) 逾時值為 10,建議提高為 40 秒。設定方式如下:
conf_cluster_rpc.connect.timeout=40
- 確保這個檔案的擁有者為 Apigee:
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- 重新啟動管理伺服器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 如果您擁有多個管理伺服器,請在所有管理伺服器中重複上述步驟。
如果問題仍未解決,請與 Apigee Edge 支援團隊聯絡,尋求進一步協助。