Lỗi khi truy cập Datastore

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Triệu chứng

Không triển khai được các bản sửa đổi proxy API thông qua lệnh gọi API Quản lý Edge hoặc Giao diện người dùng Edge, kèm theo lỗi "Error while accessing datastore".

Thông báo lỗi

Error in deployment for environment qa.

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

Nguyên nhân có thể xảy ra

Nguyên nhân điển hình dẫn đến vấn đề này là:

  1. Nguyên nhân Chi tiết Đối với
    Vấn đề về kết nối mạng giữa Bộ xử lý thông báo và Cassandra Lỗi giao tiếp giữa Trình xử lý thư và Cassandra do vấn đề về kết nối mạng hoặc do quy tắc tường lửa. Người dùng Edge Private Cloud
    Lỗi triển khai do Cassandra khởi động lại (Các) nút Cassandra không hoạt động do đã khởi động lại trong quá trình bảo trì định kỳ. Người dùng Edge Private Cloud
    Tăng độ trễ của yêu cầu đọc trên Cassandra Nếu(các) nút Cassandra đang thực hiện một số lượng lớn lượt đọc đồng thời, thì nút đó có thể phản hồi chậm do độ trễ yêu cầu đọc tăng đột biến. Người dùng Edge Private Cloud
    Gói proxy API lớn hơn 15 MB Cassandra đã được định cấu hình để không cho phép các gói proxy API có kích thước lớn hơn 15 MB. Người dùng Edge Private Cloud

    Vấn đề về kết nối mạng giữa Bộ xử lý thông báo và Cassandra

    Chẩn đoán

    Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

    1. Huỷ triển khai và triển khai lại proxy API. Nếu xảy ra sự cố kết nối tạm thời giữa Bộ xử lý thông báo và Cassandra thì lỗi này có thể sẽ biến mất.

      CẢNH BÁO: Đừng huỷ triển khai nếu bạn thấy lỗi trong môi trường Phát hành công khai.

    2. Nếu sự cố vẫn tiếp diễn, hãy thực thi lệnh gọi AP quản lý bên dưới để kiểm tra trạng thái triển khai và kiểm tra xem có lỗi nào trên thành phần nào không:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Kết quả trạng thái triển khai mẫu hiển thị Lỗi khi truy cập vào kho dữ liệu trên một trong các Bộ xử lý thông báo

      {
      "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. Khởi động lại(các) Bộ xử lý thư hiển thị lỗi triển khai. Nếu xảy ra sự cố tạm thời về mạng, thì lỗi này sẽ biến mất:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Lặp lại bước 2 để xem quá trình triển khai có thành công trên Bộ xử lý tin nhắn mà bạn đã khởi động lại hay không. Nếu không tìm thấy lỗi nào, thì điều đó cho thấy vấn đề đã được giải quyết.
    5. Kiểm tra xem trình xử lý thông báo có thể kết nối với từng nút Cassandra trên cổng 9042 và 9160 hay không:
      1. Nếu có thể dùng telnet, hãy dùng telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Nếu không có telnet, hãy dùng netcat để kiểm tra kết nối như sau:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Nếu bạn nhận được phản hồi "Kết nối bị từ chối" hoặc "Kết nối đã hết thời gian chờ", hãy liên hệ với nhóm điều hành mạng của bạn.
    6. Nếu sự cố vẫn tiếp diễn, hãy kiểm tra xem từng nút Cassandra có đang nghe trên cổng 9042 và cổng 9160 hay không:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Nếu các nút Cassandra không nghe trên cổng 9042 hoặc 9160, hãy khởi động lại(các) nút Cassandra cụ thể:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. Nếu sự cố vẫn tiếp diễn, hãy liên hệ với nhóm điều hành mạng của bạn.

Độ phân giải

Làm việc với nhóm vận hành mạng của bạn và khắc phục sự cố kết nối mạng giữa Bộ xử lý tin nhắn và Cassandra.

Lỗi triển khai do Cassandra khởi động lại

Các nút Cassandra thường được khởi động lại định kỳ trong quá trình bảo trì định kỳ. Nếu bạn triển khai proxy API trong quá trình bảo trì Cassandra, thì các lượt triển khai sẽ không thành công do không thể truy cập vào kho dữ liệu Cassandra.

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

Chẩn đoán

  1. Kiểm tra xem các nút Cassandra có được khởi động lại trong thời gian triển khai hay không.Bạn có thể thực hiện việc này bằng cách kiểm tra nhật ký Cassandra hoặc nhật ký thời gian khởi động gần đây nhất của nút Cassandra:

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

Độ phân giải

  1. Đảm bảo Cassandra đã được thiết lập và chạy.
  2. Kiểm tra xem Bộ xử lý thông báo có thể kết nối với kho dữ liệu Cassandra trên cổng 9042 và 9160 hay không.

Tăng độ trễ của yêu cầu đọc trên Cassandra

Một lượng lớn lượt đọc trên Cassandra phụ thuộc vào từng trường hợp sử dụng và mẫu lưu lượng truy cập trên những proxy chứa những chính sách yêu cầu quyền đọc từ Cassandra.

Ví dụ: nếu một lệnh gọi GET để làm mới_token loại cấp quyền được gọi cho các chính sách OAuth và mã làm mới được liên kết với nhiều mã truy cập, thì điều này có thể dẫn đến một lượng lớn lượt đọc từ Cassandra. Việc này có thể làm tăng độ trễ của yêu cầu đọc trên Cassandra.

Chẩn đoán

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

  1. Nếu bạn đã cài đặt trang tổng quan Giám sát Beta, hãy xem trang tổng quan Cassandra và xem lại biểu đồ "Yêu cầu đã đọc" trong khoảng thời gian xảy ra sự cố. Ngoài ra, hãy xem biểu đồ về "Thời gian chờ yêu cầu đọc".
  2. Công cụ thay thế để kiểm tra các yêu cầu đọc và độ trễ đọc là lệnh nodetool cfstats. Hãy xem tài liệu về Clang để biết thêm thông tin chi tiết về cách sử dụng lệnh này.

Độ phân giải

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

  1. Hãy thử triển khai lại sau khi hiệu suất của Cassandra trở lại bình thường. Đảm bảo toàn bộ vòng Cassandra ở chế độ bình thường.
  2. (Không bắt buộc) Khởi động lại luân phiên trên Bộ xử lý thông báo để đảm bảo đã thiết lập kết nối.
  3. Để tìm giải pháp lâu dài, hãy xem xét các mẫu lưu lượng truy cập API có thể góp phần mang lại số lượt đọc cao hơn trong kho dữ liệu Cassandra. Liên hệ với Bộ phận hỗ trợ Apigee để được hỗ trợ khắc phục sự cố này.
  4. Nếu(các) nút Cassandra hiện có không đủ để xử lý lưu lượng truy cập đến, hãy tăng dung lượng phần cứng hoặc số lượng nút kho dữ liệu Cassandra một cách thích hợp.

Gói proxy API lớn hơn 15 MB

Kích thước của các gói proxy API được giới hạn ở mức 15 MB trên Cassandra. Nếu kích thước của gói proxy API lớn hơn 15 MB, thì bạn sẽ thấy thông báo "Lỗi khi truy cập vào kho dữ liệu" khi cố gắng triển khai proxy API.

Chẩn đoán

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

  1. Kiểm tra nhật ký Trình xử lý thông báo (/opt/apigee/var/log/edge-message-processor/logs/system.log) và xem có lỗi nào xảy ra trong quá trình triển khai Proxy API cụ thể hay không.
  2. Nếu bạn thấy lỗi tương tự như lỗi hiển thị trong hình bên dưới, thì lỗi triển khai là do kích thước gói proxy API > 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>
    

Độ phân giải

Gói proxy API sẽ lớn nếu có quá nhiều tệp tài nguyên. Hãy sử dụng các giải pháp sau để giải quyết vấn đề này:

Giải pháp 1: Di chuyển tệp tài nguyên sang cấp Môi trường hoặc Tổ chức

  1. Di chuyển mọi tệp tài nguyên (chẳng hạn như tệp và mô-đun NodeJS Script, tệp JavaScript, tệp JAR) sang cấp môi trường hoặc tổ chức. Để biết thêm thông tin về tệp tài nguyên, hãy xem tài liệu về Edge.
  2. Triển khai proxy API và xem lỗi có biến mất không.

Nếu sự cố vẫn tiếp diễn hoặc bạn không thể di chuyển các tệp tài nguyên sang cấp môi trường hoặc tổ chức vì lý do nào đó, hãy áp dụng giải pháp #2.

Giải pháp 2: Tăng kích thước gói proxy API trên Cassandra

Lưu ý: Chỉ người dùng Edge Private Cloud mới có thể thực hiện các bước sau. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Apigee Edge Support.

Làm theo các bước sau để tăng kích thước của kích thước truyền tải khung tiết kiệm thuộc tính Cassandra. Kích thước này kiểm soát kích thước tối đa của gói proxy API được phép trong Edge:

  1. Tạo tệp sau đây, nếu chưa có:
    /opt/apigee/customer/application/cassandra.properties
    
  2. Thêm dòng sau vào tệp, thay thế <size> bằng chế độ cài đặt kích thước cần thiết cho gói lớn:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. Khởi động lại Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. Lặp lại các bước từ #1 đến #3 trên tất cả các nút Cassandra trong cụm.

Nếu sự cố vẫn tiếp diễn, hãy liên hệ với Bộ phận hỗ trợ của Apigee.