Datastore 액세스 오류

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

Edge UI 또는 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

가능한 원인

이 문제의 일반적인 원인은 다음과 같습니다.

  1. 원인 세부정보 대상
    메시지 프로세서와 Cassandra 간의 네트워크 연결 문제 네트워크 연결 문제나 방화벽 규칙으로 인한 메시지 프로세서와 Cassandra 간의 통신 실패입니다. Edge Private Cloud 사용자
    Cassandra 다시 시작으로 인한 배포 오류 Cassandra 노드가 정기 유지보수의 일부로 다시 시작되었으므로 사용할 수 없습니다. Edge Private Cloud 사용자
    Cassandra에서 읽기 요청 지연 시간 급증 Cassandra 노드가 동시 읽기를 많이 수행하면 읽기 요청 지연 시간의 급증으로 인해 응답이 느려질 수 있습니다. Edge Private Cloud 사용자
    15MB를 초과하는 API 프록시 번들 Cassandra는 크기가 15MB를 초과하는 API 프록시 번들을 허용하지 않도록 구성되었습니다. Edge Private Cloud 사용자

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

    진단

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

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

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

    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 및 9160에서 각 Cassandra 노드에 연결할 수 있는지 확인합니다.
      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 노드는 일반적으로 일상적인 유지보수의 일환으로 주기적으로 다시 시작됩니다. 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에서 읽기 액세스가 필요한 정책이 포함된 프록시의 개별 사용 사례와 트래픽 패턴에 따라 달라집니다.

예를 들어 refresh_token 권한 유형에 대한 GET 호출이 OAuth 정책에 대해 호출되고 갱신 토큰이 여러 액세스 토큰과 연결되어 있으면 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보다 큼

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

진단

참고: 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 스크립트 파일 및 모듈, 자바스크립트 파일, JAR 파일과 같은 리소스 파일을 환경 또는 조직 수준으로 이동합니다. 리소스 파일에 대한 자세한 내용은 Edge 문서를 참조하세요.
  2. API 프록시를 배포하고 오류가 해결되었는지 확인합니다.

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

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

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

Edge에서 허용되는 API 프록시 번들의 최대 크기를 제어하는 Cassandra 속성 thrift 프레임 전송 크기의 크기를 늘리려면 다음 단계를 따르세요.

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