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 bản sửa đổi proxy API thông qua giao diện người dùng Edge hoặc lệnh gọi API quản lý Edge với 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

Dưới đây là những nguyên nhân điển hình dẫn đến vấn đề này:

  1. Nguyên nhân Chi tiết Dành cho
    Sự cố kết nối mạng giữa Message Processor (Trình xử lý tin nhắn) và Cassandra Lỗi kết nối giữa Bộ xử lý tin nhắn và Cassandra do mạng vấn đề kết nối 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 (Các) nút Cassandra không hoạt động vì đã khởi động lại theo quy trình bảo trì. 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ì 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 lớn hơn 15MB trong kích thước. Người dùng Edge Private Cloud

    Sự cố kết nối mạng giữa các thư Bộ xử lý 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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge.

    1. Huỷ triển khai và triển khai lại proxy API. Nếu có vấn đề tạm thời về khả năng kết nối giữa Trình xử lý thư và Cassandra thì lỗi có thể biến mất.

      CẢNH BÁO: Đừng huỷ triển khai nếu xuất hiện lỗi trong Phiên bản phát hành công khai môi trường.

    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 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
      

      Ví dụ về kết quả trạng thái triển khai cho biết Lỗi khi truy cập vào kho dữ liệu trên một thiết bị của Bên xử lý tin nhắn

      {
      "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ư cho thấy lỗi triển khai. Nếu có sự cố tạm thời về mạng, 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 triển khai có thành công trên Bộ xử lý thư đã khởi động lại. Nếu không tìm thấy lỗi nào thì 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 hay không và 9160:
      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 sử 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 "Kết nối bị từ chối" hoặc "Kết nối đã hết thời gian chờ", sau đó hãy tương tác đội ngũ vận hành mạng.
    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:
      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 vận hành mạng của bạn.

Độ phân giải

Hãy 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 trong khoảng thời gian 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 theo định kỳ trong quá trình bảo trì định kỳ. Nếu API Các proxy được triển khai trong quá trình bảo trì Cassandra, sau đó không triển khai được 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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận 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.Điều này có thể là 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 Bộ 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.

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

Số lượt đọc cao 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 chứa chính sách yêu cầu quyền đọc của Cassandra.

Ví dụ: nếu lệnh gọi GET đến loại cấp update_token được gọi cho chính sách OAuth và phương thức 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 lượng lớn đọ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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge.

  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à hãy xem lại phần "Yêu cầu đọc" biểu đồ cho khoảng thời gian xảy ra sự cố. Đồng thời xem biểu đồ cho "Đọc Độ trễ yêu cầu".
  2. Công cụ thay thế để kiểm tra yêu cầu đọc và đọc độ trễ là lệnh nodetool cfstats. Xem Cassandra để biết thêm thông tin chi tiết về việc 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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge.

  1. Hãy thử triển khai lại khi hiệu suất Cassandra trở lại bình thường. Hãy đảm bảo toàn bộ Vòng Cassandra bình thường.
  2. (Không bắt buộc) Khởi động lại luân phiên trên Trình xử lý thư để đảm bảo kết nối thiết lập.
  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 số lượt đọc cao hơn trong kho dữ liệu Cassandra. Hãy liên hệ với Bộ phận hỗ trợ Apigee Edge để được trợ giúp khắc phục sự cố này.
  4. Nếu(các) nút Cassandra hiện tại không đủ để xử lý lưu lượng truy cập đến, thì tăng dung lượng phần cứng hoặc số lượng nút Cassandra datastore một cách phù hợp.

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

Giới hạn kích thước của gói proxy API ở mức 15 MB trên Cassandra. Nếu quy mô của API gói proxy lớn hơn 15 MB, thì bạn sẽ thấy thông báo "Lỗi khi truy cập kho dữ liệu" khi bạn 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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge.

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

Giải pháp 1: Di chuyển các 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 NodeJS Script, tệp JavaScript, Tệp JAR theo 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 proxy API và xem lỗi có biến mất hay 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 môi trường hoặc tổ chức vì lý do nào đó, sau đó á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 đây. Nếu bạn đang sử dụng Edge Public Cloud, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge.

Hãy làm theo các bước sau để tăng kích thước của khung tiết kiệm của thuộc tính Cassandra kích thước truyền tải, giúp kiểm soát kích thước tối đa của gói proxy API được cho phép trong Cạnh:

  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ợ Apigee Edge.