Podczas uzyskiwania dostępu do Datastore wystąpił błąd

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Krótki opis problemu

Nie udało się wdrożyć wersji serwera proxy interfejsu API za pomocą interfejsu Edge lub interfejsu Edge Management API. Wystąpił błąd "Error while accessing datastore".

Komunikaty o błędach

Error in deployment for environment qa.

The revision is deployed, but traffic cannot flow. Error while accessing datastore;Please retry later

Możliwe przyczyny

Oto typowe przyczyny:

  1. Przyczyna Szczegóły Dla:
    Problem z połączeniem sieciowym między procesorem wiadomości a Cassandra Błąd komunikacji między procesorem wiadomości a Cassandra z powodu problemów z połączeniem sieciowym lub regułami zapory sieciowej. Użytkownicy chmury Private Cloud
    Błędy wdrożenia spowodowane ponownymi uruchomieniami Cassandra Węzły Cassandra były niedostępne, ponieważ zostały ponownie uruchomione w ramach rutynowej konserwacji. Użytkownicy chmury Private Cloud
    Nagły wzrost czasu oczekiwania na żądanie odczytu w systemie Cassandra Jeśli węzły Cassandra wykonują dużą liczbę jednoczesnych odczytów, może odpowiadać powoli z powodu nagłego zwiększenia czasu oczekiwania na żądania odczytu. Użytkownicy chmury Private Cloud
    Pakiet proxy API większy niż 15 MB Usługa Cassandra została skonfigurowana w taki sposób, aby nie zezwalać na pakiety proxy interfejsu API o rozmiarze przekraczającym 15 MB. Użytkownicy chmury Private Cloud

    Problem z połączeniem sieciowym między procesorem wiadomości a Cassandra

    Diagnostyka

    Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

    1. Wycofaj wdrożenie serwera proxy interfejsu API i ponownie wdróż go. Jeśli wystąpił tymczasowy problem z połączeniem między procesorem wiadomości a Cassandra, błąd może zniknąć.

      OSTRZEŻENIE: nie wycofuj wdrożenia, jeśli błędy wystąpią w środowisku produkcyjnym.

    2. Jeśli problem będzie się powtarzał, wykonaj poniższe wywołanie punktu dostępu do zarządzania, aby sprawdzić stan wdrożenia i ewentualne błędy dotyczące jakichkolwiek komponentów:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Przykładowe dane wyjściowe stanu wdrożenia pokazujące błąd podczas uzyskiwania dostępu do magazynu danych w jednym z procesorów wiadomości

      {
      "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. Ponownie uruchom procesory wiadomości, które wyświetlają błąd wdrożenia. Jeśli wystąpił tymczasowy problem z siecią, powinien on zniknąć:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Powtórz krok 2, aby sprawdzić, czy wdrożenie udało się ponownie uruchomić w procesorze wiadomości. Jeśli nie znaleziono błędów, oznacza to, że problem został rozwiązany.
    5. Sprawdź, czy procesor wiadomości może połączyć się z każdym węzłem Cassandra na porcie 9042 i 9160:
      1. Jeśli dostępny jest protokół Telnet, użyj go:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Jeśli protokół telnet jest niedostępny, użyj narzędzia netcat, aby sprawdzić połączenie w następujący sposób:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Jeśli wyświetli się odpowiedź „Odmowa połączenia” lub „Upłynął limit czasu połączenia”, zaangażuj zespół ds. operacji sieciowych.
    6. Jeśli problem będzie się powtarzać, sprawdź, czy każdy z węzłów Cassandra nasłuchuje na porcie 9042 i 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Jeśli węzły Cassandra nie nasłuchują na porcie 9042 lub 9160, uruchom ponownie określone węzły Cassandra:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. Jeśli problem nie ustąpi, skontaktuj się z zespołem obsługi sieci.

Rozdzielczość

Skontaktuj się ze swoim zespołem ds. operacji sieciowych i rozwiąż problem z połączeniem sieciowym między procesorem wiadomości a Cassandra.

Błędy wdrażania spowodowane restartami Cassandra

Węzły Cassandra są zwykle okresowo uruchamiane ponownie w ramach rutynowej konserwacji. Jeśli serwery proxy interfejsów API są wdrażane podczas konserwacji Cassandra, wdrożenia kończą się niepowodzeniem z powodu braku dostępu do magazynu danych Cassandra.

Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

Diagnostyka

  1. Sprawdź, czy węzły Cassandra zostały ponownie uruchomione podczas wdrażania.Aby to zrobić, sprawdź log Cassandra lub najnowsze logi czasu uruchamiania węzła Cassandra:

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

Rozdzielczość

  1. Sprawdź, czy Cassandra działa.
  2. Sprawdź, czy procesory wiadomości mogą połączyć się z magazynem danych Cassandra przez port 9042 i 9160.

Nagły wzrost czasu oczekiwania na żądanie odczytu w systemie Cassandra

Duża liczba odczytów w systemie Cassandra zależy od indywidualnych przypadków użycia i wzorców ruchu na serwerach proxy, które zawierają zasady wymagające dostępu do odczytu z Cassandra.

Jeśli na przykład w przypadku zasad OAuth wywoływane jest wywołanie GET do typu uwierzytelnianiarefresh_token, a token odświeżania jest powiązany z wieloma tokenami dostępu, może to skutkować dużą liczbą odczytów z Cassandry. Może to zwiększyć czas oczekiwania na żądanie odczytu w systemie Cassandra.

Diagnoza

Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

  1. Jeśli masz zainstalowany panel monitorowania wersji beta, otwórz panel Cassandra i sprawdź wykres „Odczyt żądań” dotyczący okresu występowania problemu. Zapoznaj się też z wykresem „Opóźnienia odczytu żądań”.
  2. Alternatywne narzędzie do sprawdzania żądań odczytu i opóźnień odczytu to polecenie nodetool cfstats. Więcej informacji o korzystaniu z tego polecenia znajdziesz w dokumentacji Cassandra.

Rozdzielczość

Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

  1. Spróbuj wdrożyć ponownie, gdy wydajność Cassandra wróci do normalnego poziomu. Sprawdź, czy cały pierścień Cassandra jest normalny.
  2. (Opcjonalnie) Wykonaj kroczące ponowne uruchomienie procesorów wiadomości, aby upewnić się, że połączenie zostało nawiązane.
  3. Aby uzyskać długoterminowe rozwiązanie, przejrzyj wzorce ruchu API, które mogłyby przyczynić się do zwiększenia liczby odczytów w magazynie danych Cassandra. Aby uzyskać pomoc w rozwiązaniu tego problemu, skontaktuj się z zespołem pomocy Apigee Edge.
  4. Jeśli istniejące węzły Cassandra nie są wystarczające do obsługi ruchu przychodzącego, zwiększ możliwości sprzętowe lub liczbę węzłów magazynu danych Cassandra.

Pakiet proxy interfejsu API większy niż 15 MB

Rozmiar pakietów proxy interfejsu API w systemie Cassandra jest ograniczony do 15 MB. Jeśli rozmiar pakietu proxy interfejsu API przekracza 15 MB, przy próbie wdrożenia serwera proxy interfejsu API zobaczysz komunikat „Błąd podczas uzyskiwania dostępu do magazynu danych”.

Diagnostyka

Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

  1. Sprawdź logi procesora wiadomości (/opt/apigee/var/log/edge-message-processor/logs/system.log) i zobacz, czy podczas wdrażania określonego serwera proxy interfejsu API nie wystąpiły jakieś błędy.
  2. Jeśli widzisz błąd podobny do pokazanego na poniższym ilustracji, oznacza to, że błąd wdrożenia wynika z tego, że rozmiar pakietu proxy interfejsu API przekracza 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>
    

Rozdzielczość

Pakiet proxy interfejsu API będzie duży, jeśli plików zasobów jest zbyt wiele. Aby rozwiązać ten problem, skorzystaj z tych rozwiązań:

Rozwiązanie 1. Przenieś pliki zasobów na poziom środowiska lub organizacji

  1. Przenieś dowolne pliki zasobów, takie jak pliki i moduły NodeJS Script, pliki JavaScript i pliki JAR, do poziomu środowiska lub organizacji. Więcej informacji o plikach zasobów znajdziesz w dokumentacji Edge.
  2. Wdróż serwer proxy interfejsu API i sprawdź, czy błąd zniknął.

Jeśli problem będzie się powtarzać albo z jakiegoś powodu nie możesz przenieść plików zasobów na poziom środowiska lub organizacji, zastosuj rozwiązanie nr 2.

Rozwiązanie nr 2. Zwiększ rozmiar pakietu proxy API w systemie Cassandra

Uwaga: poniższe czynności mogą wykonywać tylko użytkownicy Private Cloud Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

Wykonaj te czynności, aby zwiększyć rozmiar rozmiaru transportu klatek używanych ramek we właściwości Cassandra, który kontroluje maksymalny rozmiar pakietu proxy interfejsu API dozwolony w Edge:

  1. Utwórz plik
    /opt/apigee/customer/application/cassandra.properties
    
    , jeśli nie istnieje:
  2. Dodaj do pliku ten wiersz, zastępując <size> ustawieniem rozmiaru wymaganym w przypadku dużego pakietu:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. Uruchom ponownie Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. Powtórz kroki od 1 do 3 we wszystkich węzłach Cassandra w klastrze.

Jeśli problem będzie nadal występował, skontaktuj się z zespołem pomocy Apigee Edge.