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

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

Symptom

Развертывание версий прокси-сервера 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. Cause Подробнее… Для
    Проблема с сетевым подключением между Message Processor и Cassandra Сбой связи между Message Processor и Cassandra из-за проблем с сетевым подключением или правил брандмауэра. Пользователи Edge Private Cloud
    Ошибки развертывания из-за перезапусков Cassandra Узел Cassandra был недоступен, поскольку был перезапущен в рамках планового технического обслуживания. Пользователи Edge Private Cloud
    Резкое увеличение задержки при обработке запросов на чтение в Cassandra Если узел Cassandra выполняет большое количество одновременных операций чтения, он может медленно отвечать из-за скачка задержки запроса на чтение. Пользователи Edge Private Cloud
    Размер пакета прокси API превышает 15 МБ В Cassandra настроено ограничение на размер пакетов прокси-серверов API – не более 15 МБ. Пользователи Edge Private Cloud

    Проблема с подключением к сети между процессором сообщений и Cassandra

    диагностика;

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

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

      ВНИМАНИЕ! Не отменяйте развертывание, если ошибки наблюдаются в рабочей среде.

    2. Если проблема не исчезнет, выполните приведенный ниже вызов 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. Перезапустите Message Processor(s), в которых возникла ошибка развертывания. Если проблема с сетью была временной, ошибка должна исчезнуть:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    4. Повторите шаг 2, чтобы проверить, удалось ли развертывание на перезапущенном Message Processor. Если ошибок нет, значит проблема решена.
    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 Private Cloud. Если вы используете общедоступное облако 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 Private Cloud. Если вы используете общедоступное облако Edge, обратитесь в службу поддержки Apigee Edge.

  1. Если вы установили бета-версию панели мониторинга, откройте панель Cassandra и изучите график "Запросы на чтение" за период, когда возникла проблема. Также изучите диаграмму "Задержки запросов на чтение".
  2. Другой инструмент для проверки запросов на чтение и задержек чтения – команда nodetool cfstats. Подробную информацию об использовании этой команды можно найти в документации по Cassandra.

Разрешение

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

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

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

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

диагностика;

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

  1. Проверьте журналы Message Processor (/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 Private Cloud. Если вы используете общедоступное облако Edge, обратитесь в службу поддержки Apigee Edge.

Чтобы увеличить размер свойства Cassandra thrift frame transport size, которое определяет максимальный размер набора прокси-серверов 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.