访问 Datastore 时出错

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

问题

通过 Edge 界面或 Edge Management 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

可能的原因

导致此问题的常见原因包括:

  1. 原因 详细信息 针对
    网络连接问题 消息处理器与 Cassandra 之间的通信 由于网络,消息处理器和 Cassandra 之间的通信失败 连接问题或防火墙规则。 Edge Private Cloud 用户
    由于 Cassandra 导致的部署错误 重启次数 Cassandra 节点不可用,因为它在日常安排中重启了 维护。 Edge Private Cloud 用户
    Cassandra 上的读取请求延迟时间急剧增加 如果 Cassandra 节点正在执行大量并发读取, 因为读取请求延迟时间急剧增加,所以可能响应缓慢。 Edge Private Cloud 用户
    超过 15MB 的 API 代理软件包 Cassandra 已配置为不允许在 。 Edge Private Cloud 用户

    邮件之间的网络连接问题 处理器和 Cassandra

    诊断

    注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果 如果您使用的是 Edge 公有云,请联系 Apigee Edge 支持

    1. 取消部署 API 代理,然后重新部署。如果出现临时连接问题 则错误可能会消失。

      警告:如果生产环境中出现错误,请勿取消部署 环境

    2. 如果问题仍然存在,请执行以下管理 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"
      } 
      
    3. 重启显示部署错误的消息处理器。如果存在 临时网络问题,那么错误应该会消失:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. 重复第 2 步,看看在之前运行的 已重新启动。如果系统没有发现任何错误,则表示问题已解决。
    5. 检查消息处理器是否能够连接到端口 9042 上的每个 Cassandra 节点 和 9160: <ph type="x-smartling-placeholder">
        </ph>
      1. 如果 telnet 可用,则使用 telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. 如果 telnet 不可用,请使用 netcat 检查连接,如下所示:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. 如果您收到“连接遭拒”的响应或“连接超时”, 您的网络运营团队
    6. 如果问题依然存在,则检查每个 Cassandra 节点是否 端口 9042 和端口 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. 如果 Cassandra 节点未监听端口 9042 或 9160,请重启 特定 Cassandra 节点:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. 如果问题仍然存在,请与您的网络运营团队联系。

分辨率

请与您的网络运营团队合作,解决 消息处理器和 Cassandra。

由于 Cassandra 重启而导致的部署错误

Cassandra 节点通常会在日常维护期间定期重启。如果 API 在 Cassandra 维护工作期间部署了代理,则部署会由于以下原因而失败: 无法访问 Cassandra 数据存储区。

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您 位于 Edge 公有云上,请与 Apigee Edge 支持联系。

诊断

  1. 检查 Cassandra 节点是否在部署期间重启。 检查 Cassandra 节点的 Cassandra 日志或最近的启动时间日志即可:

    grepshutdown/opt/apigee/var/log/apigee-cassandra/system.log

分辨率

  1. 确保 Cassandra 已启动并正常运行。
  2. 检查消息处理器是否能够通过端口 9042 连接到 Cassandra 数据存储区,以及 9160。

Cassandra 上的读取请求延迟时间急剧增加

Cassandra 上的大量读取取决于具体的用例和流量模式 对包含需要 Cassandra 读取访问权限的政策的代理发出权限请求。

例如,如果针对 OAuth 策略调用 refresh_token 授权类型的 GET 调用,并且 刷新令牌与许多访问令牌相关联,这可能会导致出现大量 从 Cassandra 读取。这可能会导致 Cassandra 上的读取请求延迟时间增加。

诊断

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您 位于 Edge 公有云上,请与 Apigee Edge 支持联系。

  1. 如果您已安装 Beta 版 Monitoring 信息中心,请查看 Cassandra 信息中心 请查看“读取请求”问题发生期间的图表。另请查看“阅读”图表 请求延迟时间”。
  2. nodetool cfstats 命令是检查读取请求和读取延迟时间的替代工具。请参阅 Cassandra 文档,详细了解如何使用此命令。

分辨率

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您 位于 Edge 公有云上,请与 Apigee Edge 支持联系。

  1. 待 Cassandra 性能恢复正常后,再次尝试部署。确保整个 Cassandra 环很正常。
  2. (可选)对消息处理器执行滚动重启,以确保连接 。
  3. 有关长期解决方案,请查看 API 流量模式,这些模式可能导致 提高 Cassandra 数据存储区中的读取权限。如需排查此问题方面的帮助,请与 Apigee Edge 支持团队联系。
  4. 如果现有 Cassandra 节点不足以处理传入流量,则 增加硬件容量或增加 Cassandra 数据存储区节点数 。

API 代理捆绑包大于 15MB

在 Cassandra 上,API 代理软件包的大小上限为 15MB。如果 API 的大小 代理软件包的大小超过 15 MB,那么您会看到“访问数据存储区时出错”当你 尝试部署 API 代理。

诊断

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您 位于 Edge 公有云上,请与 Apigee Edge 支持联系。

  1. 检查消息处理器日志 (/opt/apigee/var/log/edge-message-processor/logs/system.log),看看是否有 在部署特定 API 代理期间发生的任何错误。
  2. 如果您看到下图所示的错误,则表示部署错误。 是因为 API 代理软件包的大小大于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 代理软件包将很大。请使用以下 解决方案:

解决方案 1:将资源文件移至环境或组织级层

  1. 将任何资源文件(例如 NodeJS 脚本文件和模块、JavaScript 文件 将 JAR 文件复制到环境或组织级别。如需详细了解资源文件,请参阅 Edge 文档
  2. 部署 API 代理,看看错误是否消失。

如果问题仍然存在,或者您无法将资源文件移至环境或组织 出于某种原因考虑,然后再采用解决方案 2。

解决方案 2:增加 Cassandra 上的 API 代理软件包大小

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您 位于 Edge 公有云上,请与 Apigee Edge 支持联系。

按照以下步骤来增加 Cassandra 属性 thrift frame 的大小 传输大小,用于控制 边缘:

  1. 如果以下文件不存在,请创建:
    /opt/apigee/customer/application/cassandra.properties
    
  2. 将以下代码行添加到文件中,以替换 <size>并采用所需的尺寸设置 大软件包:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. 重启 Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. 在集群中的所有 Cassandra 节点上重复执行第 1 步到第 3 步。

如果问题仍然存在,请与 Apigee Edge 支持团队联系。