透過 Management API 或混合型使用者介面中的實體資料不一致/找不到

您目前查看的是 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

問題

使用者透過 Apigee 混合式使用者介面 (UI) 和 Management API,間歇性地觀察到 API 產品、應用程式、開發人員、鍵值對應 (KVM) 和快取等實體資料不一致或沒有資料。

錯誤訊息

據瞭解,這種情況不會顯示任何錯誤訊息。

可能原因

原因 說明
Cassandra Pod 未連線至環狀拓撲 所有資料中心的 Cassandra Pod 可能不會連線至通用 Cassandra 環。
未執行 nodetool repair nodetool repair 指令可能未定期執行。
網路連線問題 不同資料中心內的 Cassandra Pod 之間可能發生網路連線問題。

常見的診斷步驟

  1. 使用 Management API 擷取發生問題的一或多個實體 (例如 API 產品、應用程式等) 的資訊,並驗證多次呼叫時是否會看到不同的結果。

    在指令列中,使用下列範例取得 gcloud 驗證憑證、設定環境變數,以及執行 API 指令:

    取得 API 產品:

    TOKEN=$(gcloud auth print-access-token)
    ORG=ORGANIZATION_NAME
    
    curl -i -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apiproducts"

    取得應用程式:

    TOKEN=$(gcloud auth print-access-token)
    ORG=ORGANIZATION_NAME
    
    curl -i -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/apps"

    取得開發人員:

    TOKEN=$(gcloud auth print-access-token)
    ORG=ORGANIZATION_NAME
    
    curl -i -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/developers"

    取得鍵值對應 (KVM):

    TOKEN=$(gcloud auth print-access-token)
    ORG=ORGANIZATION_NAME
    
    curl -i -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/keyvaluemaps"

    取得快取:

    TOKEN=$(gcloud auth print-access-token)
    ORG=ORGANIZATION_NAME
    ENV=ENVIRONMENT_NAME
    
    curl -i -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/caches"
  2. 如果執行上述 Management API 要求時沒有資料或資料不同,表示您遇到的問題與使用者介面相同。

原因:Cassandra Pod 未連線至所有資料中心的 Cassandra Pod

在多區域 Apigee Hybrid 部署作業中,如果所有 Cassandra Pod 未連線至同一個 Cassandra 環,資料可能不會由所有 Cassandra Pod 複製。因此,管理層不會持續收到相同查詢的相同資料集。請按照下列步驟分析這個情境:

診斷

  1. 列出 Cassandra pod:
  2. # list cassandra pods
    kubectl -n apigee get pods -l app=apigee-cassandra
  3. 執行下列指令,檢查每個資料中心的所有 Cassandra Pod 狀態。

    Apigee Hybrid 版本低於 1.4.0:

    # check cassandra cluster status
    kubectl -n apigee get pods \
    -l app=apigee-cassandra \
    --field-selector=status.phase=Running \
    -o custom-columns=name:metadata.name --no-headers \
    | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool status"

    在 Apigee Hybrid 1.4.0 以上版本:

    # check cassandra cluster status
    kubectl -n apigee get pods \
    -l app=apigee-cassandra \
    --field-selector=status.phase=Running \
    -o custom-columns=name:metadata.name --no-headers \
    | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw JMXUSER_PASSWORD status"
  4. 檢查上述指令的結果,確認所有資料中心的所有 Cassandra Pod 是否都已連線至 Cassandra 環,且處於「Up and Normal (UN)」狀態。

    運作正常的 Cassandra 環狀拓撲輸出內容範例:

    kubectl -n apigee get pods \
    -l app=apigee-cassandra \
    --field-selector=status.phase=Running \
    -o custom-columns=name:metadata.name --no-headers \
    | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status"
    
    apigee-cassandra-default-0
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    UN  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    UN  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    UN  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1
    
    apigee-cassandra-default-1
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    UN  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    UN  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    UN  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1
    
    apigee-cassandra-default-2
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    UN  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    UN  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    UN  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1

    Cassandra 環狀拓撲不正常的輸出內容範例:

    kubectl -n apigee get pods \
    -l app=apigee-cassandra \
    --field-selector=status.phase=Running \
    -o custom-columns=name:metadata.name --no-headers \
    | xargs -I{} sh -c "echo {}; kubectl -n apigee exec {} -- nodetool -u jmxuser -pw iloveapis123 status"
    
    apigee-cassandra-default-0
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    DL  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    DL  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    DL  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1
    
    apigee-cassandra-default-1
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    UN  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    UN  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    UN  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1
    
    apigee-cassandra-default-2
    Datacenter: dc-1
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.2.18  1.32 MiB   256          100.0%            2e6051fe-e3ed-4858-aed0-ac9be5270e97  ra-1
    UN  10.0.4.10  1.49 MiB   256          100.0%            2396e17f-94fd-4d7d-b55e-35f491a5c1cc  ra-1
    UN  10.0.3.14  1.38 MiB   256          100.0%            579cf76e-7d6d-46c8-8319-b7cd74ee87c8  ra-1
    Datacenter: dc-2
    ================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.8.1.12  1.31 MiB   256          100.0%            3e9f24bf-2c10-4cfd-8217-5be6245c2b9c  ra-1
    UN  10.8.2.19  1.24 MiB   256          100.0%            1d2e803d-aa31-487b-9503-1e18297efc04  ra-1
    UN  10.8.4.4   1.28 MiB   256          100.0%            d15ffeef-7929-42c2-a3b1-a3feb85a857b  ra-1

    請注意,上述輸出內容中的部分 Cassandra Pod 處於 DL (Down and Leaving) 狀態。詳情請參閱 nodetool status

    • 如果發現任何 Cassandra Pod 處於 DL 狀態 (如上述範例輸出內容所示), 這就是造成這個問題的原因。
    • 透過混合型使用者介面或 Management API 擷取任何實體資訊時,如果要求連線至任何已關閉的 Cassandra Pod,您將無法取得任何資料。

解析度

請按照下一節的步驟操作,並確保有問題的資料中心內的 Cassandra Pod 已連線至原始資料中心,如「在 GKE 和 GKE On-Prem 上進行多區域部署 | Apigee」一文所述。

原因:未執行 nodetool repair

如果沒有定期執行 nodetool repair 指令做為維護工作,Cassandra Pod 可能會出現資料不一致的情況。請按照下列步驟分析這個情境:

診斷

  1. 建立 Cassandra 用戶端容器 Pod apigee-hybrid-cassandra-client,以便進行偵錯。
  2. 列出所有 Cassandra Pod:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
  3. 使用 CQLSH 連線至其中一個 Cassandra Pod:
    cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
  4. 清單 keyspaces
    SELECT * from system_schema.keyspaces;

    輸出內容範例:

    ddl_user@cqlsh> SELECT keyspace_name from system_schema.keyspaces;
    
     keyspace_name
    -----------------------------
                     system_auth
     cache_PROJECT_ID_hybrid
                   system_schema
       kms_PROJECT_ID_hybrid
       kvm_PROJECT_ID_hybrid
       rtc_PROJECT_ID_hybrid
              system_distributed
                          system
                          perses
                   system_traces
     quota_PROJECT_ID_hybrid
    
    (11 rows)
  5. 從上述結果找出 keyspaces,然後使用 CQLSH 列出並查詢每個資料中心的所有實體。

    如果不一致的實體是 API 產品:

    select * from KMS_KEYSPACE.api_product;

    如果不一致的實體是應用程式 (app):

    select * from KMS_KEYSPACE.app;

    如果不一致的實體是 developer

    select * from KMS_KEYSPACE.developer;

    如果不一致的實體是鍵值對應:

    select * from KVM_KEYSPACE.kvm_map_entry;

    如果不一致的實體是 cache

    select * from CACHE_KEYSPACE.cache_map_entry;
  6. 記下上述各項查詢輸出內容的記錄數。
  7. 針對所有資料中心中的每個 Cassandra Pod,重複上述步驟。
  8. 比較從所有 Cassandra Pod 取得的記錄計數。
  9. 找出資料不一致的 Cassandra Pod。

解析度

  1. 列出 Cassandra Pod,並連線至資料不一致的特定 Cassandra Pod:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
    
    # connect to one cassandra pod
    kubectl -n=apigee exec -it apigee-cassandra-default-0 bash
  2. 在每個資料中心的每個 Cassandra Pod 上執行 nodetool repair 指令:

    Apigee Hybrid 版本低於 1.4.0:

    nodetool repair

    在 Apigee Hybrid 1.4.0 以上版本:

    nodetool -u JMX_USERNAME -pw JMX-PASSWORD repair
  3. 再次按照診斷專區的指示操作,確認資料是否已穩定複製到所有 Cassandra Pod。
  4. 針對資料不一致的所有 Cassandra Pod,重複上述步驟。

原因:網路連線問題

如果資料中心之間有網路連線問題,Cassandra 資料可能無法一致地複製到 Cassandra 環中的所有 Cassandra Pod。請按照下列步驟分析這個情境:

診斷

  1. 列出所有 Cassandra Pod:
    # list cassandra pods
    kubectl -n=apigee get pods -l app=apigee-cassandra
  2. 執行下列 curl 指令,並使用通訊埠 7001,從第一個資料中心 (dc-1) 的第一個 Cassandra Pod,連線至第二個資料中心 (dc-2) 的第一個 Cassandra Pod:
      kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
  3. 如果 Telnet 成功,系統會顯示類似以下的輸出內容:
    * Rebuilt URL to: telnet://10.0.4.10:7001/
    *   Trying 10.0.4.10...
    * TCP_NODELAY set
    * Connected to 10.0.4.10 (10.0.4.10) port 7001 (#0)
  4. 否則,系統會顯示類似下列內容的錯誤:
    * Rebuilt URL to: telnet://10.0.4.10:7001/
    *   Trying 10.0.4.10...
    * TCP_NODELAY set
    * connect to 10.0.4.10 port 7001 failed: Connection refused
    * Failed to connect to 10.0.4.10 port 7001: Connection refused
    * Closing connection 0
    curl: (7) Failed to connect to 10.0.4.10 port 7001: Connection refused

    如果一個資料中心內的 Cassandra Pod 無法連線至另一個資料中心內的 Cassandra Pod,表示防火牆可能設有限制,或是發生某種網路連線問題。

解析度

  1. 如果 Apigee Hybrid 部署作業是在 GKE 上進行,請檢查是否已設定任何防火牆規則,封鎖從一個資料中心到另一個資料中心的流量,並參閱「 虛擬私有雲防火牆規則總覽」分析網路連線問題。
  2. 如果這個 Apigee Hybrid 部署作業位於 GKE On-Prem,請與相關網路團隊合作,分析網路連線問題。

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:

  1. Google Cloud 專案 ID
  2. Apigee Hybrid 機構
  3. overrides.yaml 檔案,並遮蓋任何私密資訊
  4. 所有命名空間中的 Kubernetes Pod 狀態:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  5. Kubernetes cluster-info dump
    # generate kubernetes cluster-info dump
    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump
    
    # zip kubernetes cluster-info dump
    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*

參考資料