Ошибка доступа к хранилищу данных

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Симптом

Развертывание изменений API-прокси через пользовательский интерфейс Edge или вызов API управления Edge завершается ошибкой "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-прокси превышает 15 МБ. В настройках Cassandra запрещено использование пакетов API-прокси размером более 15 МБ. Пользователи Edge Private Cloud

    Проблема сетевого соединения между обработчиком сообщений и Cassandra.

    Диагноз

    Примечание: Следующие действия могут выполнять только пользователи частного облака Edge. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

    1. Удалите и повторно разверните API-прокси. Если возникла временная проблема с подключением между обработчиком сообщений и Cassandra, то ошибка может исчезнуть.

      ВНИМАНИЕ: Не удаляйте развертывание, если ошибки обнаружены в производственной среде.

    2. Если проблема сохраняется, выполните указанный ниже вызов управляющей точки доступа, чтобы проверить состояние развертывания и наличие ошибок в каких-либо компонентах:
      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. Проверьте, может ли обработчик сообщений подключиться к каждому узлу Cassandra через порты 9042 и 9160:
      1. Если доступен 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. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

Диагноз

  1. Проверьте, были ли перезапущены узлы Cassandra во время развертывания. Это можно сделать, проверив журнал Cassandra или журналы последнего запуска узла Cassandra:

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

Разрешение

  1. Убедитесь, что Cassandra запущена и работает.
  2. Проверьте, могут ли обработчики сообщений подключаться к хранилищу данных Cassandra через порты 9042 и 9160.

Резкое увеличение задержки запросов на чтение в Cassandra.

Большое количество операций чтения из Cassandra зависит от конкретных сценариев использования и характера трафика на прокси-серверах, содержащих политики, требующие доступа на чтение из Cassandra.

Например, если для политик OAuth выполняется GET-запрос к типу предоставления refresh_token, и токен обновления связан со многими токенами доступа, это может привести к большому объему операций чтения из Cassandra. Это может вызвать увеличение задержки запросов на чтение в Cassandra.

Диагноз

Примечание: Следующие действия могут выполнять только пользователи частного облака Edge. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

  1. Если вы установили панель мониторинга Beta, посмотрите на панель мониторинга Cassandra и изучите график «Запросы на чтение» за период возникновения проблемы. Также изучите график «Задержки запросов на чтение».
  2. Альтернативным инструментом для проверки запросов на чтение и задержек чтения является команда ` nodetool cfstats . Более подробную информацию об использовании этой команды см. в документации Cassandra .

Разрешение

Примечание: Следующие действия могут выполнять только пользователи частного облака Edge. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

  1. Попробуйте выполнить развертывание еще раз, когда производительность Cassandra вернется в норму. Убедитесь, что вся сеть Cassandra работает нормально.
  2. (Необязательно) Выполните поэтапный перезапуск обработчиков сообщений, чтобы убедиться в установлении соединения.
  3. Для долгосрочного решения проблемы проанализируйте закономерности трафика API, которые могут приводить к увеличению количества операций чтения из хранилища данных Cassandra. Обратитесь в службу поддержки Apigee Edge за помощью в устранении этой проблемы.
  4. Если имеющихся узлов Cassandra недостаточно для обработки входящего трафика, то следует либо увеличить аппаратную мощность, либо соответствующее количество узлов хранилища данных Cassandra.

Размер пакета API-прокси превышает 15 МБ.

В Cassandra размер пакетов API-прокси ограничен 15 МБ. Если размер пакета API-прокси превышает 15 МБ, при попытке развертывания API-прокси вы увидите сообщение «Ошибка при доступе к хранилищу данных».

Диагноз

Примечание: Следующие действия могут выполнять только пользователи частного облака Edge. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

  1. Проверьте журналы обработчика сообщений ( /opt/apigee/var/log/edge-message-processor/logs/system.log ) и посмотрите, не возникли ли какие-либо ошибки во время развертывания конкретного API-прокси.
  2. Если вы видите ошибку, похожую на показанную на рисунке ниже, то ошибка развертывания связана с тем, что размер пакета API-прокси превышает 15 МБ.
    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: Увеличьте размер пакета API-прокси в Cassandra.

Примечание: Следующие действия могут выполнять только пользователи частного облака Edge. Если вы используете публичное облако Edge, обратитесь в службу поддержки Apigee Edge .

Выполните следующие действия, чтобы увеличить размер параметра `thrift frame transport size` в настройках Cassandra, который контролирует максимальный размер пакета API-прокси, разрешенного в Edge:

  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. Повторите шаги с 1 по 3 на всех узлах Cassandra в кластере.

Если проблема не исчезнет, ​​обратитесь в службу поддержки Apigee Edge .