您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
问题
通过 Edge 界面或 Edge 管理 API 调用部署 API 代理修订版本失败,并显示
错误 "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 用户 API 代理软件包大于 15MB Cassandra 已配置为不允许大小超过 15MB 的 API 代理软件包。 Edge Private Cloud 用户 消息处理器与 Cassandra 之间的网络连接问题
诊断
注意 :只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge Public Cloud,请与 Apigee Edge 支持团队联系。
- 取消部署并重新部署 API 代理。如果消息处理器与 Cassandra 之间存在临时连接问题
则错误可能会消失。
警告:如果在生产环境中看到错误,请勿取消部署。
- 如果问题仍然存在,请执行以下管理 AP 调用来检查
部署状态,并检查任何组件是否存在任何错误:
curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
部署状态输出示例,显示其中一个消息处理器上出现“Error while accessing datastore”
{ "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:
- 如果 telnet 可用,请使用 telnet:
telnet <Cassandra_IP> 9042 telnet <Cassandra_IP> 9160
- 如果 telnet 不可用,请使用 netcat 检查连接,如下所示:
nc -vz <Cassandra_IP> 9042 nc -vz <Cassandra_IP> 9160
- 如果您收到“Connection Refused”或“Connection timed out”响应,请与 您的网络运营团队联系。
- 如果 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 代理。如果消息处理器与 Cassandra 之间存在临时连接问题
则错误可能会消失。
解决方案
与您的网络运营团队协作,解决 消息处理器与 Cassandra 之间的网络连接问题。
由于 Cassandra 重启而导致的部署错误
Cassandra 节点通常会作为例行维护的一部分定期重启。如果在 Cassandra 维护工作期间部署 API 代理,则部署会因 无法访问 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 上的读取次数取决于各个用例以及包含需要从 Cassandra 读取访问权限的政策的代理上的流量模式 。
例如,如果为 OAuth 政策调用用于刷新令牌授权类型的 GET 调用,并且 刷新令牌与许多访问令牌相关联,则可能会导致从 Cassandra 进行大量 读取。这可能会导致 Cassandra 上的读取请求延迟时间增加。
诊断
注意 :只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge Public Cloud,请与 Apigee Edge 支持团队联系。

- 如果您已安装 Beta 版监控信息中心,请查看 Cassandra 信息中心,并 查看“读取请求”图表,了解问题期间的情况。另请查看“读取 请求延迟时间”图表。
- 检查读取请求和读取延迟时间的替代工具是
nodetool cfstats命令。如需详细了解如何使用此命令,请参阅 Cassandra 文档。
解决方案
注意 :只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge Public Cloud,请与 Apigee Edge 支持团队联系。
- 在 Cassandra 性能恢复正常后,再次尝试部署。确保整个 Cassandra 环正常。
- (可选)对消息处理器执行滚动重启,以确保建立连接 。
- 如需获得长期解决方案,请查看可能会导致 Cassandra 数据存储区中读取次数增加的 API 流量模式。请与 Apigee Edge 支持团队联系,以获取有关排查此问题的帮助。
- 如果现有 Cassandra 节点不足以处理传入流量,则 适当增加硬件容量或 Cassandra 数据存储区节点的数量 。
API 代理软件包大于 15MB
在 Cassandra 上,API 代理软件包的大小限制为 15MB。如果 API 代理软件包的大小超过 15MB,则在尝试部署 API 代理时,您会看到“Error while accessing datastore”。
诊断
注意 :只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge Public Cloud,请与 Apigee Edge 支持团队联系。
- 检查消息处理器日志
(
/opt/apigee/var/log/edge-message-processor/logs/system.log),查看在部署特定 API 代理期间是否发生 任何错误。 - 如果您看到类似于下图所示的错误,则表示部署错误
是因为 API 代理软件包大小超过 15MB。
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 代理软件包会很大。请使用以下 解决方案来解决此问题:
解决方案 1:将资源文件移至环境或组织级
- 将任何资源文件(例如 NodeJS 脚本文件和模块、JavaScript 文件、 JAR 文件)移至环境或组织级。如需详细了解资源文件,请参阅 Edge 文档。
- 部署 API 代理,查看错误是否消失。
如果问题仍然存在,或者您因某种原因无法将资源文件移至环境或组织 级,请应用解决方案 2。
解决方案 2:增加 Cassandra 上的 API 代理软件包大小
注意 :只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge Public Cloud,请与 Apigee Edge 支持团队联系。
请按照以下步骤增加 Cassandra 属性 thrift frame transport size 的大小,该属性用于控制 Edge 中允许的最大 API 代理软件包大小:
- 创建以下文件(如果该文件不存在):
/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 支持团队联系。