您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
問題
透過 Edge UI 或 Edge Management API 呼叫來部署 API Proxy 修訂版本會失敗,並顯示錯誤 "Error while accessing datastore"
。
錯誤訊息
Error in deployment for environment qa. The revision is deployed, but traffic cannot flow. Error while accessing datastore;Please retry later
可能原因
這個問題的常見原因如下:
-
原因 詳細資料 訊息處理器與 Cassandra 之間的網路連線問題 網路連線問題或防火牆規則導致訊息處理器與 Cassandra 之間的通訊失敗。 Edge Private Cloud 使用者 因 Cassandra 重新啟動而導致的部署錯誤 Cassandra 節點為例行維護作業而重新啟動,因此無法使用。 Edge Private Cloud 使用者 Cassandra 讀取要求延遲時間遽增 如果 Cassandra 節點執行大量並行讀取作業,可能會因為讀取要求延遲時間遽增而回應緩慢。 Edge Private Cloud 使用者 大於 15 MB 的 API Proxy 套件 Cassandra 已設為不允許大小超過 15 MB 的 API Proxy 套裝組合。 Edge Private Cloud 使用者 訊息處理器與 Cassandra 之間的網路連線問題
診斷
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 取消部署並重新部署 API Proxy。如果訊息處理器和 Cassandra 之間發生暫時性連線問題,錯誤可能消失。
警告:如果在實際工作環境中看到錯誤,請勿取消部署。
- 如果問題仍未解決,請執行以下管理 AP 呼叫,檢查部署狀態並檢查是否有任何元件發生錯誤:
curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
部署狀態輸出範例,顯示在任一訊息處理器存取資料儲存庫時發生錯誤
{ "environment" : [ { "aPIProxy" : [ { "name" : "simple-python", "revision" : [ { "configuration" : { "basePath" : "/", "steps" : [ ] }, "name" : "1", "server" : [ { "status" : "deployed", "type" : [ "message-processor" ], "uUID" : "2acdd9b2-17de-4fbb-8827-8a2d4f3d7ada" }, { "error" : "Error while accessing datastore;Please retry later", "errorCode" : "datastore.ErrorWhileAccessingDataStore", "status" : "error", "type" : [ "message-processor" ], "uUID" : "42772085-ca67-49bf-a9f1-c04f2dc1fce3" } "state" : "error" }
- 重新啟動顯示部署錯誤的訊息處理器。如果發生暫時性網路問題,系統應不會再顯示這個錯誤:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 重複步驟 #2,確認部署作業在重新啟動的訊息處理器中是否成功。如果沒有發現錯誤,表示問題已解決。
- 確認訊息處理工具是否能連線至通訊埠 9042 和 9160 上的每個 Cassandra 節點:
- 如果可以使用 telnet,請使用 telnet:
telnet <Cassandra_IP> 9042 telnet <Cassandra_IP> 9160
- 如果無法使用 telnet,請按照下列步驟使用 netcat 檢查連線:
nc -vz <Cassandra_IP> 9042 nc -vz <Cassandra_IP> 9160
- 如果您收到「連線遭拒」或「連線逾時」回應,請與網路作業團隊聯絡。
- 如果可以使用 telnet,請使用 telnet:
- 如果問題持續發生,請確認每個 Cassandra 節點是否監聽通訊埠 9042 和通訊埠 9160:
netstat -an | grep LISTEN | grep 9042 netstat -an | grep LISTEN | grep 9160
- 如果 Cassandra 節點未監聽通訊埠 9042 或 9160,請重新啟動特定的 Cassandra 節點:
/opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
- 如果問題持續發生,請與您的網路營運團隊聯絡。
- 取消部署並重新部署 API Proxy。如果訊息處理器和 Cassandra 之間發生暫時性連線問題,錯誤可能消失。
解析度
與網路作業團隊合作,修正訊息處理器和 Cassandra 之間的網路連線問題。
因 Cassandra 重新啟動而導致部署錯誤
Cassandra 節點通常會在例行維護過程中定期重新啟動。如果在 Cassandra 維護作業期間部署 API Proxy,部署就會因 Cassandra 資料儲存庫無法存取而失敗。
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
診斷
- 檢查 Cassandra 節點在部署期間是否重新啟動。只要查看 Cassandra 記錄或 Cassandra 節點的最新啟動時間記錄檔,就能完成這項操作:
grep
「shutdown
」/opt/apigee/var/log/apigee-cassandra/system.log
解析度
- 確保 Cassandra 已啟動且正在執行。
- 檢查訊息處理器是否能透過通訊埠 9042 和 9160 連線至 Cassandra 資料儲存庫。
Cassandra 讀取要求延遲時間遽增
在 Cassandra 上,大量讀取作業取決於個別用途和流量模式,而 Proxy 是否包含需要從 Cassandra 讀取存取權的政策。
舉例來說,如果針對 OAuth 政策呼叫了 Refresh_token 授權類型的 GET 呼叫,而重新整理權杖與許多存取權杖相關聯,則這可能會導致 Cassandra 發出的大量讀取作業。這可能會導致 Cassandra 上的讀取要求延遲時間增加。
診斷方式
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 如果您已安裝 Beta 版 Monitoring 資訊主頁,請查看 Cassandra 資訊主頁,然後查看問題發生期間的「讀取要求」圖表。另請查看「讀取要求的延遲時間」圖表。
- 如要查看讀取要求和讀取延遲時間的替代工具,請使用
nodetool cfstats
指令。如要進一步瞭解如何使用這個指令,請參閱 Cassandra 說明文件。
解析度
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 待 Cassandra 效能恢復正常後,再重新嘗試部署。確認整個 Cassandra 環均正常。
- (選用) 對訊息處理器執行滾動式重新啟動,確認已建立連線。
- 針對長期解決方案,查看可能導致 Cassandra 資料儲存庫中讀取較高的 API 流量模式。如要排解這個問題,請向 Apigee Edge 支援團隊尋求協助。
- 如果現有的 Cassandra 節點不足以處理傳入流量,請視情況增加硬體容量或 Cassandra 資料儲存庫節點的數量。
大於 15 MB 的 API Proxy 套件
在 Cassandra 上,API Proxy 套件的大小上限為 15 MB。如果 API Proxy 組合的大小超過 15 MB,當您嘗試部署 API Proxy 時,就會看到「存取資料儲存庫時發生錯誤」。
診斷
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 查看訊息處理器記錄檔 (
/opt/apigee/var/log/edge-message-processor/logs/system.log
),確認部署特定 API Proxy 期間是否發生錯誤。 - 如果您看見類似下圖的錯誤,則表示 API Proxy 組合大小超過 15 MB,導致部署錯誤。
2016-03-23 18:42:18,517 main ERROR DATASTORE.CASSANDRA - AstyanaxCassandraClient.fetchDynamicCompositeColumns() : Error while querying columnfamily : [api_proxy_revisions_r21, adevegowdat@v1-node-js] for rowkey:{} com.netflix.astyanax.connectionpool.exceptions.TransportException: TransportException: [host=None(0.0.0.0):0, latency=159(486), attempts=3]org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)! at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:197) ~[astyanax-thrift-1.56.43.jar:na] at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65) ~[astyanax-thrift-1.56.43.jar:na] ...<snipped> Caused by: org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)! at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:137) ~[libthrift-0.9.1.jar:0.9.1] at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) ~[libthrift-0.9.1.jar:0.9.1] at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) ~[libthrift-0.9.1.jar:0.9.1] ...<snipped>
解析度
如果資源檔案過多,API Proxy 套裝組合就會比較大。請使用下列解決方案來解決這個問題:
解決方案 #1:將資源檔案移至環境或機構層級
- 將任何資源檔案 (例如 NodeJS Script 檔案和模組、JavaScript 檔案、JAR 檔案) 移至環境或機構層級。如要進一步瞭解資源檔案,請參閱 Edge 說明文件。
- 部署 API Proxy,檢查錯誤是否不再發生。
如果問題持續發生,或是因某些原因而無法將資源檔案移至環境或機構層級,請套用解決方案 #2。
解決方案 #2:在 Cassandra 上提高 API Proxy 組合大小
注意:只有 Edge Private Cloud 使用者可以執行下列步驟。如果您使用的是 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
如要控制 Edge 中允許 API Proxy 組合的大小上限,請按照下列步驟增加 Cassandra 屬性「擲回影格傳輸大小」的大小:
- 如果檔案不存在,請建立下列檔案:
/opt/apigee/customer/application/cassandra.properties
- 在檔案中加入下列程式碼,並將 <size> 替換為大型套件所需的大小設定:
conf_cassandra_thrift_framed_transport_size_in_mb=<size>
- 重新啟動 Cassandra:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 針對叢集中的所有 Cassandra 節點重複步驟 #1 到 #3。
如果問題持續發生,請與 Apigee Edge 支援團隊聯絡。