Datastore 액세스 오류

Apigee Edge 문서입니다.
Go to the Apigee X documentation.
info

증상

Edge UI 또는 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 사용자
    API 프록시 번들이 15MB보다 큼 Cassandra는 크기가 15MB보다 큰 API 프록시 번들을 허용하지 않도록 구성되었습니다. Edge Private Cloud 사용자

    메시지 프로세서와 Cassandra 간의 네트워크 연결 문제

    진단

    참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

    1. API 프록시를 배포 취소하고 다시 배포합니다. 메시지 프로세서와 Cassandra 간에 일시적인 연결 문제가 있는 경우 오류가 사라질 수 있습니다.

      경고: 프로덕션 환경에서 오류가 표시되는 경우 배포 취소하지 마세요.

    2. 문제가 계속되면 아래의 Management API 호출을 실행하여 배포 상태를 확인하고 구성요소에 오류가 있는지 확인합니다.
      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 및 9160:
        에서 각 Cassandra 노드에 연결할 수 있는지 확인합니다.
      1. 텔넷을 사용할 수 있는 경우 텔넷을 사용합니다.
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
      2. 텔넷을 사용할 수 없는 경우 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 노드는 일반적으로 일상적인 유지보수의 일부로 주기적으로 다시 시작됩니다. Cassandra 유지보수 작업 중에 API 프록시가 배포되면 Cassandra 데이터 스토어에 액세스할 수 없으므로 배포가 실패합니다.

참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

진단

  1. 배포 중에 Cassandra 노드가 다시 시작되었는지 확인합니다. Cassandra 로그 또는 Cassandra 노드의 가장 최근 시작 시간 로그를 확인하여 이 작업을 수행할 수 있습니다.

    grep "shutdown" /opt/apigee/var/log/apigee-cassandra/system.log

해결 방법

  1. Cassandra가 실행 중인지 확인합니다.
  2. 메시지 프로세서가 포트 9042 및 9160에서 Cassandra 데이터 스토어에 연결할 수 있는지 확인합니다.

Cassandra의 읽기 요청 지연 시간 급증

Cassandra의 읽기 수는 Cassandra에서 읽기 액세스가 필요한 정책이 포함된 프록시의 개별 사용 사례 및 트래픽 패턴 에 따라 달라집니다.

예를 들어 OAuth 정책에 대해 refresh_token 부여 유형에 대한 GET 호출이 호출되고 갱신 토큰이 여러 액세스 토큰과 연결된 경우 Cassandra에서 많은 읽기가 발생할 수 있습니다. 이로 인해 Cassandra의 읽기 요청 지연 시간이 늘어날 수 있습니다.

진단

참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

  1. 베타 모니터링 대시보드를 설치한 경우 Cassandra 대시보드를 살펴보고 '읽기 요청' 차트를 검토하여 문제 기간을 확인합니다. '읽기 요청 지연 시간' 차트도 검토합니다.
  2. 읽기 요청 및 읽기 지연 시간을 확인하는 대체 도구는 nodetool cfstats 명령어입니다. 이 명령어 사용에 관한 자세한 내용은 Cassandra 문서를 참조하세요.

해결 방법

참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

  1. Cassandra 성능이 정상으로 돌아오면 배포를 다시 시도합니다. 전체 Cassandra 링이 정상인지 확인합니다.
  2. (선택사항) 연결이 설정되었는지 확인하기 위해 메시지 프로세서에서 순차적 재시작을 수행합니다. 설정되었습니다.
  3. 장기적인 해결 방법은 Cassandra 데이터 스토어에서 더 많은 읽기에 기여할 수 있는 API 트래픽 패턴을 검토하는 것입니다. 이 문제를 해결하는 데 도움이 필요하면 Apigee Edge 지원팀에 문의하세요.
  4. 기존 Cassandra 노드가 수신 트래픽을 처리하기에 적합하지 않은 경우 하드웨어 용량 또는 Cassandra 데이터 스토어 노드 수를 적절하게 늘립니다.

API 프록시 번들이 15MB보다 큼

API 프록시 번들의 크기는 Cassandra에서 15MB로 제한됩니다. API 프록시 번들의 크기가 15MB보다 크면 API 프록시를 배포하려고 할 때 '데이터 스토어에 액세스하는 동안 오류가 발생했습니다'가 표시됩니다.

진단

참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

  1. 메시지 프로세서 로그 (/opt/apigee/var/log/edge-message-processor/logs/system.log)를 확인하고 특정 API 프록시를 배포하는 동안 오류가 발생했는지 확인합니다.
  2. 아래 그림과 유사한 오류가 표시되면 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: 리소스 파일을 환경 또는 조직 수준으로 이동

  1. NodeJS 스크립트 파일 및 모듈, JavaScript 파일, JAR 파일과 같은 리소스 파일을 환경 또는 조직 수준으로 이동합니다. 리소스 파일에 관한 자세한 내용은 Edge 문서를 참조하세요.
  2. API 프록시를 배포하고 오류가 사라지는지 확인합니다.

문제가 계속되거나 어떤 이유로든 리소스 파일을 환경 또는 조직 수준으로 이동할 수 없는 경우 해결 방법 2를 적용합니다.

해결 방법 2: Cassandra에서 API 프록시 번들 크기 늘리기

참고: Edge Private Cloud 사용자만 다음 단계를 수행할 수 있습니다. Edge Public Cloud를 사용하는 경우 Apigee Edge 지원팀에 문의하세요.

다음 단계에 따라 Edge에서 허용되는 API 프록시 번들의 최대 크기를 제어하는 Cassandra 속성 thrift frame transport size의 크기를 늘립니다.

  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 지원팀에 문의하세요.