您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
問題
在多區域擴充期間複製資料時,CassandraDataReplication
狀態可能會顯示錯誤狀態,且資料複製作業可能會失敗。
錯誤訊息
使用
kubectl
查看重建狀態時:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
您會看到一或多個 Cassandra Pod 顯示錯誤狀態,以及指出重建作業失敗的訊息。例如:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "message": "failed to rebuild from us-west1: java.lang.IllegalStateException : Unable to find sufficient sources for streaming range (-8567285182390470134,-8567154549835592965] in keyspace system_distributed", "state": "error", "updated": 1641581899 }, … } }
可能原因
原因 | 說明 | 適用於以下裝置的疑難排解操作說明: |
---|---|---|
來源區域不正確 | 在 Cassandra 資料複製 YAML 檔案中,source.region 指定的值不正確。 |
Apigee Hybrid |
網路連線問題 | 不同資料中心的 Cassandra 吊掛叢集之間可能會發生網路連線問題。 | Apigee Hybrid |
常見的診斷步驟
- 擷取資料複製作業的狀態:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - 如果您看到的錯誤訊息與「錯誤訊息」一節中指定的訊息類似,表示您正在觀察這個問題。
原因:來源區域不正確
如果您在資料複製 YAML 檔案中指定的來源區域 (datacenter
) 與實際來源 datacenter
不同,資料複製作業就會失敗。請按照「診斷」一節的步驟分析此情況,然後按照「解決方法」一節的步驟進行修正。
診斷
- 列出來源區域中的所有 Cassandra pod:
kubectl -n apigee get pods -l app=apigee-cassandra
- 從步驟 1中傳回的任一 Cassandra pod 取得實際
datacenter
值:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- 在您在
多區部署中建立的 Cassandra 資料複製自訂資源 (YAML) 檔案中,取得
source.region
使用的值。如果您使用多區域部署文件中的範例檔案名稱,則檔案名稱應為datareplication.yaml
。cat datareplication.yaml
結果範例:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "us-west1"
檢查
nodetool status
輸出的結果,並確認datacenter
值是否與source.region
值相符:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
結果範例:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.104.13.2 491.84 KiB 256 100.0% 7254711c-fe0a-4b34-b50f-861109f97936 ra-1 UN 10.104.11.3 527.36 KiB 256 100.0% 5ec389f0-fd67-4de6-9f21-172d5899ff78 ra-1 UN 10.104.12.7 838.46 KiB 256 100.0% 7a88be82-1f81-4117-86e3-2cda434c0878 ra-1
- 請注意,
datareplication.yaml
檔案中的source.region
(us-west1
) 與nodetool
狀態輸出內容中的實際datacenter
值 (dc-1
) 不符。請按照解決方法中的步驟修正設定。
解決方法
如要修正資料複製作業,您必須刪除資料複製工作,並使用正確的 datacenter
名稱建立該工作。請執行下列步驟:
- 刪除目前的資料複製程序。如果您使用
多區域部署說明文件中的範例檔案名稱,檔案名稱應為
datareplication.yaml
。kubectl delete -f datareplication.yaml
- 將 YAML 檔案中的區域名稱更新為正確的
datacenter
值,例如dc-1
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "dc-1"
- 套用更新後的資料複製功能:
kubectl apply -f datareplication.yaml
- 使用下列指令檢查重建狀態,並確認不再顯示先前回報的錯誤狀態:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
- 如果問題仍未解決,請參閱「原因:網路連線問題」一節。
原因:網路連線問題
資料複製錯誤也可能是 Cassandra 節點之間的連線問題所致。
診斷
請按照下列步驟分析這個情境:
- 列出所有 Cassandra Pod:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- 執行以下
curl
指令,並使用7001
連線至第一個資料中心 (dc-1
) 的第一個 Cassandra 容器,再透過該容器連線至第二個資料中心 (dc-2
) 的第一個 Cassandra 容器:kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- 如果 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)
- 否則,系統會顯示類似以下內容的錯誤訊息:
* 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 失敗,表示防火牆有限制,或有某種網路連線問題。
解決方法
- 如果這個 Apigee 混合式部署是在 GKE 上執行,請檢查是否設定了任何防火牆規則,以便封鎖從一個資料中心傳送至另一個資料中心的流量,並參閱 VPC 防火牆規則總覽,分析網路連線問題。
- 如果這個 Apigee 混合式部署作業是在 GKE 地端上執行,請與相關網路團隊合作,並分析網路連線問題。
如果問題仍未解決,請參閱「必須收集診斷資訊」一節。
必須收集診斷資訊
如果問題在按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:
- Google Cloud 專案 ID。
- Apigee Hybrid 機構。
- 來源和新區域的
overrides.yaml
檔案,會遮蓋任何機密資訊。 CassandraDataReplication
YAML 檔案。- Cassandra
nodetool status
輸出內容:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Cassandra
nodetool describecluster
輸出內容:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster