Lỗi khi truy cập Datastore

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Dấu hiệu

Việc triển khai các bản sửa đổi của proxy API thông qua giao diện người dùng Edge hoặc lệnh gọi API quản lý Edge không thành công 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ể dẫn đến vấn đề này

Các nguyên nhân thường gặp dẫn đến vấn đề này là:

  1. Nguyên nhân Chi tiết Trong khoảng
    Sự cố về khả năng kết nối mạng giữa Trình xử lý thông báo và Cassandra Lỗi giao tiếp giữa Trình xử lý tin nhắn và Cassandra do các vấn đề về khả năng kết nối mạng hoặc 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 Không truy cập được(các) nút Cassandra vì nút này đã được khởi động lại trong quá trình bảo trì định kỳ. Người dùng Edge Private Cloud
    Độ trễ của yêu cầu đọc tăng đột biến trên Cassandra Nếu(các) nút Cassandra đang thực hiện một số lượng lớn các lượt đọc đồng thời, thì nút đó có thể phản hồi chậm do độ trễ của 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

    Sự cố về khả năng kết nối mạng giữa Trình 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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

    1. Huỷ triển khai rồi triển khai lại API proxy. Nếu có vấn đề tạm thời về kết nối giữa Trình xử lý thông báo và Cassandra, thì lỗi có thể 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 vấn đề vẫn tiếp diễn, hãy thực thi lệnh gọi API 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 bất kỳ thành phần nào hay không:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments

      Đầu ra trạng thái triển khai mẫu cho thấy Lỗi khi truy cập vào kho dữ liệu trên một trong các Trình 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) Trình xử lý thông báo cho thấy lỗi triển khai. Nếu xảy ra sự cố mạng tạm thời, thì lỗi 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 liệu quá trình triển khai có thành công trên Trình xử lý thông báo đã khởi động lại hay không. Nếu không có lỗi nào, tức là 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ó 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 khả năng 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 "Connection Refused" (Kết nối bị từ chối) hoặc "Connection timed out" (Đã hết thời gian chờ kết nối), hãy liên hệ với nhóm vận hành mạng của bạn.
    6. Nếu vấn đề 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 vấn đề vẫn tiếp diễn, hãy liên hệ với nhóm vận hành mạng.

Độ 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 vấn đề về kết nối mạng giữa Message Processor 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 các proxy API được triển khai trong quá trình bảo trì Cassandra, thì các hoạt động triển khai sẽ không thành công do không truy cập được 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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

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 đang hoạt động.
  2. Kiểm tra xem Trình xử lý tin nhắn có thể kết nối với kho dữ liệu Cassandra trên cổng 9042 và 9160 hay không.

Độ trễ của yêu cầu đọc tăng đột biến trên Cassandra

Số lượng lượt đọc lớn 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 các proxy có 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 đến loại cấp refresh_token đượ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 số lượng lớn lượt đọc từ Cassandra. Điều 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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

  1. Nếu bạn đã cài đặt trang tổng quan Giám sát phiên bản thử nghiệm, hãy xem trang tổng quan Cassandra và xem xét biểu đồ "Yêu cầu đọc" trong khoảng thời gian xảy ra vấn đề. Ngoài ra, hãy xem biểu đồ "Độ trễ của 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ề Cassandra để 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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

  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 hoạt động bình thường.
  2. (Không bắt buộc) Khởi động lại từng phần trên Bộ xử lý tin nhắn để đảm bảo thiết lập được kết nối.
  3. Để có 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 làm tăng số lượt đọc trong kho dữ liệu Cassandra. Hãy liên hệ với Nhóm hỗ trợ Apigee Edge để được trợ giúp khắc phục vấn đề 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, thì 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 bị 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 "Error while accessing datastore" (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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

  1. Kiểm tra nhật ký Message Processor (/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 API Proxy cụ thể hay không.
  2. Nếu bạn thấy lỗi tương tự như lỗi trong hình bên dưới, thì lỗi triển khai là do kích thước gói proxy API lớn hơn 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 bất kỳ tệp tài nguyên nào, chẳng hạn như tệp và mô-đun tập lệnh NodeJS, tệp JavaScript, tệp JAR sang cấp môi trường hoặc cấp tổ chức. Để biết thêm thông tin về tệp tài nguyên, hãy xem tài liệu Edge.
  2. Triển khai API proxy và xem lỗi có biến mất hay không.

Nếu vấn đề 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ì một lý do nào đó, hãy áp dụng giải pháp số 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 Đám mây công khai Edge, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.

Hãy làm theo các bước sau để tăng kích thước của thuộc tính Cassandra thrift frame transport size (kích thước truyền khung thrift), 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 vấn đề vẫn tiếp diễn, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.