您正在查看 Apigee 和 Apigee Hybrid 說明文件。
這個主題沒有對應的
Apigee Edge 說明文件。
本主題將說明如何排解及修正 Cassandra 資料儲存庫的問題。Cassandra 是永久性資料儲存庫,會在混合式執行階段架構的 cassandra
元件中執行。另請參閱「執行階段服務設定總覽」。
Cassandra pod 卡在「釋出」狀態
問題
嘗試更新 Cassandra Pod 後,資料儲存庫會回報卡在釋出狀態。
錯誤訊息
使用 kubectl
查看 Pod 狀態時,您會看到一或多個 Cassandra Pod 卡在釋放狀態:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Ack 57s (x7 over 24h) apigee-datastore release started
可能原因
以下情況可能會導致 Pod 卡在釋放狀態:
原因 | 說明 |
---|---|
儲存空間容量異動 |
執行步驟以變更 override.yaml 檔案中的儲存空間容量。 |
其他設定變更 |
您已更新 override.yaml 檔案中的 Cassandra 屬性,但變更並未生效。 |
儲存空間容量變更
診斷
-
使用
kubectl
查看apigee
資料儲存庫 Pod 的目前狀態:kubectl get apigeeds -n apigee
NAME STATE AGE default releasing 122d
-
檢查
override.yaml
檔案是否有任何變更: -
請使用版本控制系統,將先前版本的
override.yaml
檔案與目前版本進行比較:diff OVERRIDES_BEFORE.yaml OVERRIDES_AFTER.yaml
-
override.yaml
中的差異輸出內容可能會顯示儲存空間大小可能發生的問題。例如:# Overrides.yaml before: cassandra: storage: capacity: 500Gi # Overrides.yaml after: cassandra: storage: capacity: 100Gi
如果有 變更儲存空間容量的作業,但略過其中步驟,並直接套用新的
override.yaml
,這可能會導致資料儲存庫處於釋放狀態。 -
檢查
statefulset
,確認其中有apigee-cassandra-default
的一個:kubectl describe sts -n apigee
輸出結果看起來會與下列內容相似:
Name: apigee-cassandra-default Namespace: apigee CreationTimestamp: Tue, 18 Jul 2023 00:40:57 +0000 Selector: app=apigee-cassandra,name=default Labels: apigee.cloud.google.com.revision=v1-2cc098050836c6b4 apigee.cloud.google.com.version=v1 apigee.cloud.google.com/platform=apigee app=apigee-cassandra name=default Annotations: <none> Replicas: 3 desired | 3 total Update Strategy: RollingUpdate Partition: 0 Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: apigee.cloud.google.com/apigee_servicename=production apigee.cloud.google.com/billing_type=subscription apigee.cloud.google.com/platform=apigee app=apigee-cassandra name=default revision=v1 runtime_type=hybrid Annotations: apigee.cloud.google.com/pod-template-spec-hash: 2cc098050836c6b4 prometheus.io/path: /metrics prometheus.io/port: 7070 prometheus.io/scheme: https prometheus.io/scrape: true Containers: apigee-cassandra: Image: gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra:1.10.1 Ports: 7000/TCP, 7001/TCP, 7199/TCP, 9042/TCP, 8778/TCP Host Ports: 7000/TCP, 7001/TCP, 7199/TCP, 9042/TCP, 8778/TCP Requests: cpu: 500m memory: 1Gi Readiness: exec [/bin/bash -c /opt/apigee/ready-probe.sh] delay=0s timeout=5s period=10s #success=1 #failure=2 Environment: POD_NAME: (v1:metadata.name) POD_IP: (v1:status.podIP) MAX_HEAP_SIZE: 512M HEAP_NEWSIZE: 100M CASSANDRA_SEEDS: apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local CASSANDRA_CLUSTER_NAME: apigeecluster CASSANDRA_DC: dc-1 CASSANDRA_RACK: ra-1 CASSANDRA_OPEN_JMX: true CPS_ADMIN_USER: <set to the key 'admin.user' in secret 'apigee-datastore-default-creds'> Optional: false CPS_ADMIN_PASSWORD: <set to the key 'admin.password' in secret 'apigee-datastore-default-creds'> Optional: false APIGEE_JMX_USER: <set to the key 'jmx.user' in secret 'apigee-datastore-default-creds'> Optional: false APIGEE_JMX_PASSWORD: <set to the key 'jmx.password' in secret 'apigee-datastore-default-creds'> Optional: false CASS_PASSWORD: <set to the key 'default.password' in secret 'apigee-datastore-default-creds'> Optional: false APIGEE_JOLOKIA_USER: <set to the key 'jolokia.user' in secret 'apigee-datastore-default-creds'> Optional: false APIGEE_JOLOKIA_PASSWORD: <set to the key 'jolokia.password' in secret 'apigee-datastore-default-creds'> Optional: false Mounts: /opt/apigee/apigee-cassandra/conf from appsfs (rw) /opt/apigee/customer from cwc-volume (ro) /opt/apigee/data from cassandra-data (rw) /opt/apigee/ssl from tls-volume (ro) /var/secrets/google from apigee-cassandra-backup (rw) /var/secrets/keys from apigee-cassandra-backup-key-file (rw) Volumes: cwc-volume: Type: Secret (a volume populated by a Secret) SecretName: config-cassandra-default Optional: false tls-volume: Type: Secret (a volume populated by a Secret) SecretName: apigee-cassandra-default-tls Optional: false appsfs: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: SizeLimit: <unset> apigee-cassandra-backup: Type: Secret (a volume populated by a Secret) SecretName: apigee-cassandra-backup-svc-account Optional: true apigee-cassandra-backup-key-file: Type: Secret (a volume populated by a Secret) SecretName: apigee-cassandra-backup-key-file Optional: true Volume Claims: Name: cassandra-data StorageClass: Labels: <none> Annotations: <none> Capacity: 10Gi Access Modes: [ReadWriteOnce] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 47m statefulset-controller create Pod apigee-cassandra-default-2 in StatefulSet apigee-cassandra-default successful
-
檢查 apigee 控制器中的錯誤:
kubectl logs -f apigee-controller-manager-59cf595c77-wtwnr -n apigee-system -c manager | grep apigeedatastore
結果:
"error creating apigee-cassandra object: failed to update resource apigee/apigee-cassandra-default: StatefulSet.apps \"apigee-cassandra-default\" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbiddenerror creating apigee-cassandra object: failed to update resource apigee/apigee-cassandra-default: StatefulSet.apps \"apigee-cassandra-default\" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden"
解決方法
您可以按照下列步驟重設 Cassandra 狀態,讓 Cassandra 恢復執行狀態:
-
停用
apigee-controller
:kubectl -n apigee-system edit deployments and set --enable-controllers=true to --enable-controllers=false
-
使用
PATCH
指令將資料儲存庫還原為執行狀態:curl -XPATCH \-H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'
-
使用 Helm 重新套用原始
override.yaml
檔案:helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE \ --dry-run=server
請務必加入所有顯示的設定,包括
--atomic
,安裝圖表:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
啟用
apigee-controller
:kubectl -n apigee-system edit deployments and set --enable-controllers=false to --enable-controllers=true
-
請等待資料儲存庫恢復,然後使用下列方式進行驗證:
kubectl get apigeeds --namespace apigee
-
驗證 Apigee 部署作業和 Pod 是否處於執行狀態,且
apigeeds
不再處於發布狀態:kubectl get ad -n apigee
kubectl get pods -n apigee
kubectl get apigeeds -n apigee
NAME STATE AGE default running 24d
其他設定變更
對 override.yaml
中的 cassandra
屬性所做的更新並未生效。這可能是密碼變更,或是 override.yaml
中的資源變更。或是誤將錯誤的 override.yaml
套用至叢集。
診斷
請參閱「診斷」一節中的步驟。
解決方法
請參閱「解決方法」中的步驟。
必須收集診斷資訊
如果問題在您按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:
-
Overrides.yaml
代表安裝中的每個叢集。 -
Apigee Hybrid 安裝作業的 Kubernetes 叢集資訊傾印:
產生 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/*
Cassandra pod 卡在待處理狀態
症狀
啟動時,Cassandra 會維持在「Pending」狀態。
錯誤訊息
使用 kubectl
查看 pod 狀態時,您會發現一或多個 Cassandra pod 卡在 Pending
狀態。Pending
狀態表示 Kubernetes 無法在節點上排定 Pod:無法建立 Pod。例如:
kubectl get pods -n NAMESPACE
NAME READY STATUS RESTARTS AGE
adah-resources-install-4762w 0/4 Completed 0 10m
apigee-cassandra-default-0 0/1 Pending 0 10m
...
可能的原因
Pod 卡在待處理狀態的原因有很多。例如:
原因 | 說明 |
---|---|
資源不足 | CPU 或記憶體不足,無法建立 Pod。 |
未建立磁碟區 | Pod 正在等待建立永久磁碟區。 |
缺少 Amazon EBS CSI 驅動程式 | 對於 EKS 安裝作業,未安裝必要的 Amazon EBS CSI 驅動程式。 |
診斷
使用 kubectl
說明 Pod,以判斷錯誤來源。例如:
kubectl -n NAMESPACE describe pods POD_NAME
例如:
kubectl describe pods apigee-cassandra-default-0 -n apigee
輸出內容可能會顯示下列其中一個可能的問題:
- 如果問題是資源不足,您會看到警告訊息,指出 CPU 或記憶體不足。
- 如果錯誤訊息指出 Pod 已解除繫結的即時 PersistentVolumeClaim (PVC),表示 Pod 無法建立其 永久磁碟區。
解析度
資源不足
修改 Cassandra 節點集區,讓該集區具備足夠的 CPU 和記憶體資源。詳情請參閱「 調整節點集區大小」。
未建立永久磁碟區
如果您判斷為永久性磁碟問題,請說明 PersistentVolumeClaim (PVC),以便判斷為何無法建立:
- 列出叢集中的 PVC:
kubectl -n NAMESPACE get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-b247faae-0a2b-11ea-867b-42010a80006e 10Gi RWO standard 15m ...
- 說明失敗 Pod 的 PVC。舉例來說,下列指令會說明與 Pod
apigee-cassandra-default-0
繫結的 PVC:kubectl apigee describe pvc cassandra-data-apigee-cassandra-default-0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 3m (x143 over 5h) persistentvolume-controller storageclass.storage.k8s.io "apigee-sc" not found
請注意,在這個範例中,名為
apigee-sc
的 StorageClass 不存在。如要解決這個問題,請按照「 變更預設的 StorageClass」一節所述,在叢集中建立缺少的 StorageClass。
另請參閱「 偵錯 Pods」。
缺少 Amazon EBS CSI 驅動程式
如果混合型執行個體是在 EKS 叢集中執行,請確認 EKS 叢集使用 Amazon EBS 容器儲存空間介面 (CSI) 驅動程式。詳情請參閱 Amazon EBS CSI 遷移作業常見問題。
Cassandra pod 卡在 CrashLoopBackoff 狀態
症狀
啟動時,Cassandra pod 會維持在 CrashLoopBackoff 狀態。
錯誤訊息
使用 kubectl
查看 Pod 狀態時,您會看到一或多個 Cassandra Pod 處於 CrashLoopBackoff
狀態。這個狀態表示 Kubernetes 無法建立 pod。例如:
kubectl get pods -n NAMESPACE
NAME READY STATUS RESTARTS AGE
adah-resources-install-4762w 0/4 Completed 0 10m
apigee-cassandra-default-0 0/1 CrashLoopBackoff 0 10m
...
可能的原因
Pod 卡在 CrashLoopBackoff
狀態的原因有很多種,例如:
原因 | 說明 |
---|---|
資料中心與先前的資料中心不同 | 這則錯誤訊息表示 Cassandra Pod 具有持久性磁碟,其中含有先前叢集的資料,因此新 Pod 無法加入舊叢集。這通常是因為在同一個 Kubernetes 節點上,先前的 Cassandra 叢集仍保留了過時的永久磁碟區。如果您在叢集中刪除 Cassandra 再重新建立,就可能發生這個問題。 |
Kubernetes 升級 | Kubernetes 升級可能會影響 Cassandra 叢集。當代管 Cassandra Pod 的 Anthos worker 節點升級至新作業系統版本時,就可能發生這種情況。 |
診斷
查看 Cassandra 錯誤記錄,找出問題原因。
- 列出 Pod,取得發生錯誤的 Cassandra Pod ID:
kubectl get pods -n NAMESPACE
- 查看失敗 Pod 的記錄:
kubectl logs POD_ID -n NAMESPACE
解析度
請在 Pod 的記錄中尋找下列線索:
資料中心與先前的資料中心不同
如果您看到以下記錄訊息:
Cannot start node if snitch's data center (us-east1) differs from previous data center
- 檢查叢集中是否有任何過時或舊的 PVC,並予以刪除。
- 如果這是全新安裝,請刪除所有 PVC,然後重新嘗試設定。例如:
kubectl -n NAMESPACE get pvc
kubectl -n NAMESPACE delete pvc cassandra-data-apigee-cassandra-default-0
Anthos 升級會變更安全性設定
請查看 Cassandra 記錄檔,確認是否有以下錯誤訊息:
/opt/apigee/run.sh: line 68: ulimit: max locked memory: cannot modify limit: Operation not permitted
- 如果混合型執行個體是多區域,請停用受影響的混合型執行個體,並重新擴展至受影響的區域。
- 如果混合型執行個體是單一區域,請對混合型執行個體中的每個 Cassandra 容器執行輪轉式重新啟動。
建立用於偵錯的用戶端容器
本節將說明如何建立用戶端容器,以便存取 Cassandra 偵錯公用程式,例如 cqlsh
。這些公用程式可讓您查詢 Cassandra 資料表,並可用於偵錯。
建立用戶端容器
如要建立用戶端容器,請按照下列步驟操作:
- 容器必須使用
apigee-cassandra-user-setup
Pod 中的 TLS 憑證。並儲存為 Kubernetes 密鑰。擷取儲存此憑證的 Secret 名稱:kubectl get secrets -n apigee --field-selector type=kubernetes.io/tls | grep apigee-cassandra-user-setup | awk '{print $1}'
這個指令會傳回密鑰名稱。例如:
apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls
。您會在下方 YAML 檔案的secretName
欄位中使用這個值。 - 開啟新的檔案,並將下列 Pod 規格貼入其中:
apiVersion: v1 kind: Pod metadata: labels: name: CASSANDRA_CLIENT_NAME # For example: my-cassandra-client namespace: apigee spec: containers: - name: CASSANDRA_CLIENT_NAME image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:YOUR_APIGEE_HYBRID_VERSION" # For example, 1.10.5. imagePullPolicy: Always command: - sleep - "3600" env: - name: CASSANDRA_SEEDS value: apigee-cassandra-default.apigee.svc.cluster.local - name: APIGEE_DML_USER valueFrom: secretKeyRef: key: dml.user name: apigee-datastore-default-creds - name: APIGEE_DML_PASSWORD valueFrom: secretKeyRef: key: dml.password name: apigee-datastore-default-creds volumeMounts: - mountPath: /opt/apigee/ssl name: tls-volume readOnly: true volumes: - name: tls-volume secret: defaultMode: 420 secretName: YOUR_SECRET_NAME # For example: apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls restartPolicy: Never
- 請使用
.yaml
副檔名儲存檔案。例如:my-spec.yaml
。 - 將規格套用至叢集:
kubectl apply -f YOUR_SPEC_FILE.yaml -n apigee
- 登入容器:
kubectl exec -n apigee CASSANDRA_CLIENT_NAME -it -- bash
- 使用下列指令連線至 Cassandra
cqlsh
介面。請輸入以下指令:cqlsh ${CASSANDRA_SEEDS} -u ${APIGEE_DML_USER} -p ${APIGEE_DML_PASSWORD} --ssl
刪除用戶端 Pod
使用下列指令刪除 Cassandra 用戶端 Pod:
kubectl delete pods -n apigee cassandra-client
區域擴充功能設定錯誤:所有 Cassandra 節點皆位於同一個資料中心
這種情況會發生在 GKE 和 GKE 在地端 (Anthos) 平台的多區域擴充作業中。請盡量避免在同一個資料中心建立所有 Cassandra 節點。
症狀
無法在第二個區域的資料中心建立 Cassandra 節點。
錯誤訊息
failed to rebuild from dc-1: java.lang.RuntimeException : Error while rebuilding node: Stream failed
解析度
請按照下列步驟修復設定錯誤的地區擴展功能:
- 針對第二個資料中心,在
overrides.yaml
檔案中將 CassandrareplicaCount
更新為1
。例如:cassandra: . . . replicaCount: 1
使用 Helm 套用設定:
helm upgrade datastore apigee-datastore \ --namespace APIGEE_NAMESPACE \ --atomic \ -f 2ND_DATACENTER_OVERRIDES_FILE \ --dry-run=server
請務必加入所有顯示的設定,包括
--atomic
,安裝圖表:
helm upgrade datastore apigee-datastore \ --namespace APIGEE_NAMESPACE \ --atomic \ -f 2ND_DATACENTER_OVERRIDES_FILE
- 使用
kubectl exec
搭配下列指令存取剩餘的 Cassandra Pod:kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
- 使用下列指令停用剩餘的 Cassandra Pod:
nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD decommission
- 使用 Helm 從第二個資料中心刪除 Cassandra pod:
helm uninstall datastore -n APIGEE_NAMESPACE
- 將 Kubernetes 結構定義變更為第一個資料中心的叢集:
kubectl config use-context FIRST_DATACENTER_CLUSTER
- 確認第一個資料中心中沒有處於停機狀態的 Cassandra 節點。
nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status
- 確認已從第一個資料中心移除設定錯誤的 Cassandra 節點 (適用於第二個資料中心)。請確認 nodetool 狀態輸出內容中顯示的 IP 位址,僅為用於第一個資料中心的 Cassandra Pod 專屬 IP 位址。舉例來說,在下列輸出內容中,IP 位址
10.100.0.39
應為第一個資料中心中的 Pod。kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status
Datacenter: dc-1 ================ Status=U/D (Up/Down) | State=N/L/J/M (Normal/Leaving/Joining/Moving) -- Address Load Tokens Owns (effective) Host ID Rack UN 10.100.0.39 4.21 MiB 256 100.0% a0b1c2d3-e4f5-6a7b-8c9d-0e1f2a3b4c5d ra-1 - 確認第二個資料中心的
overrides.yaml
檔案包含 cassandra 部分下的資料中心名稱設定。例如:cassandra: datacenter: DATA_CENTER_2 rack: "RACK_NAME" # "ra-1" is the default value. . . .
- 將第二個資料中心的
overrides.yaml
檔案中的cassandra:replicaCount
設定更新為所需數字。例如:cassandra: datacenter: DATA_CENTER_2 . . . replicaCount: 3
- 使用
datastore
引數,為第二個資料中心套用overrides.yaml
檔案。例如:helm upgrade datastore apigee-datastore \ --namespace APIGEE_NAMESPACE \ --atomic \ -f 2ND_DATACENTER_OVERRIDES_FILE \ --dry-run=server
請務必加入所有顯示的設定,包括
--atomic
,安裝圖表:
helm upgrade datastore apigee-datastore \ --namespace APIGEE_NAMESPACE \ --atomic \ -f 2ND_DATACENTER_OVERRIDES_FILE
- 使用
kubectl exec
存取第二個資料中心中其中一個新的 Cassandra 吊掛叢集,並確認有兩個資料中心:"nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status"
已知問題 388608440 的解決方法
本節說明如何檢查安裝作業是否受到已知問題 388608440 的影響,以及如何解決問題。
診斷
如要確認是否受到這個已知問題的影響,請執行下列指令:
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | \ xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- \ bash -c 'echo "{}: Found $(nodetool -u cassandra -pw $CASS_PASSWORD listsnapshots | grep -c compaction_history) leftover snapshots"'
例如:
kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: Found $(nodetool -u cassandra -pw $CASS_PASSWORD listsnapshots | grep -c compaction_history) leftover snapshots"'
pod/apigee-cassandra-default-0: Found 0 leftover snapshots pod/apigee-cassandra-default-1: Found 0 leftover snapshots pod/apigee-cassandra-default-2: Found 0 leftover snapshots
如果任何 Cassandra Pod 的剩餘快照數量超過 0,表示您的安裝作業受到此問題影響。
解決方法
如要解決這個問題,請按照下列步驟操作,並選取您使用的備份類型和 Apigee Hybrid 次版本:
Cloud Storage 備份
-
請確認您使用正確的 Cloud Storage 備份設定。常見問題包括但不限於:
- 使用錯誤的 Google 服務帳戶。
- 在 cassandra.backup.dbStorageBucket 中指定錯誤的 Cloud Storage 值區名稱。
- 無法透過 Proxy 存取 Google API (如果使用 cassandra.backup.httpproxy)。
如果在設定時遇到問題,請先修正再繼續操作。
-
使用下列指令手動刪除剩餘的快照:
Apigee Hybrid 1.12
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'
例如:
kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'
Apigee Hybrid 1.11
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
例如:
kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
pod/apigee-cassandra-default-1: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots] pod/apigee-cassandra-default-2: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots] pod/apigee-cassandra-default-0: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
- 觸發手動備份工作,並驗證是否成功完成。
-
驗證手動備份工作建立的備份封存檔案是否已成功上傳至
overrides.yaml
檔案中指定的 cassandra.backup.dbStorageBucket Cloud Storage 值區。 - 使用「診斷」一節中先前提供的指令,驗證所有 Cassandra Pod 的剩餘快照數量是否為 0。
遠端伺服器備份
-
確認遠端備份伺服器運作正常,且可從 Cassandra 容器存取。請參閱「疑難排解」一節,瞭解如何確認 SSH 連線。常見問題包括但不限於:
- 網路防火牆封鎖了連線。
- 安全殼層金鑰組設定有誤。
- 無法連線至遠端備份伺服器。
- 遠端備份伺服器的儲存空間已用盡。
如果發現遠端備份伺服器有任何問題,請先修正問題再繼續操作。
-
使用下列指令手動刪除剩餘的快照:
Apigee Hybrid 1.12
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'
例如:
kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot --all)"'
Apigee Hybrid 1.11
kubectl -n APIGEE_NAMESPACE get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n APIGEE_NAMESPACE -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
例如:
kubectl -n apigee get pods -l app=apigee-cassandra -o name | xargs -i -P0 kubectl -n apigee -c apigee-cassandra exec {} -- bash -c 'echo "{}: $(nodetool -u cassandra -pw $CASS_PASSWORD clearsnapshot)"'
pod/apigee-cassandra-default-1: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots] pod/apigee-cassandra-default-2: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots] pod/apigee-cassandra-default-0: Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
- 觸發手動備份工作,並驗證是否成功完成。
- 驗證手動備份工作建立的備份封存檔案是否已成功上傳至遠端備份伺服器。
- 使用「診斷」一節中先前提供的指令,驗證所有 Cassandra 容器的剩餘快照數量是否為 0。
其他資源
請參閱「 Apigee X 和 Apigee Hybrid 教戰手冊簡介」。