Cassandra 疑難排解指南

您目前正在查看 ApigeeApigee 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 屬性已更新,但變更未生效。

儲存空間容量變更

診斷

  1. 使用 kubectl 查看 apigee 資料存放區 Pod 的目前狀態:
    kubectl get apigeeds -n apigee
    NAME STATE AGE
    default releasing 122d
  2. 檢查 override.yaml 檔案是否有任何變更:
    1. 使用版本控管系統,比較 override.yaml 檔案的先前版本與目前版本:
      diff OVERRIDES_BEFORE.yaml OVERRIDES_AFTER.yaml
    2. override.yaml 中的差異輸出內容可能會顯示儲存空間大小可能存在的問題。例如:
      # Overrides.yaml  before:
      cassandra:
         storage:
            capacity: 500Gi
      
      # Overrides.yaml after:
      cassandra:
         storage:
            capacity: 100Gi

      如果曾 變更儲存空間容量,並略過部分步驟,直接套用新的 override.yaml,可能會導致資料儲存庫處於釋出狀態。

  3. 檢查 statefulset,確認 apigee-cassandra-default 中有 statefulset
    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
  4. 檢查 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 恢復執行狀態:

  1. 停用 apigee-controller
    kubectl -n apigee-system edit deployments and set --enable-controllers=true to --enable-controllers=false
    
  2. 使用 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'
    
  3. 使用 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
  4. 啟用 apigee-controller
    kubectl -n apigee-system edit deployments and set --enable-controllers=false to --enable-controllers=true
    
  5. 等待資料儲存庫恢復運作,並使用下列項目進行驗證:
    kubectl get apigeeds --namespace apigee
    
  6. 確認 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 停滯在「Pending」狀態

症狀

啟動時,Cassandra Pod 會維持在「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 無法建立 PersistentVolume

解決方法

資源不足

修改 Cassandra 節點集區,確保有足夠的 CPU 和記憶體資源。 詳情請參閱「 調整節點集區大小」。

未建立永久磁碟區

如果判斷是永久磁碟區問題,請說明 PersistentVolumeClaim (PVC),判斷為何未建立:

  1. 列出叢集中的 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
    ...
  2. 說明發生故障的 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」。

另請參閱「 偵錯 Pod」。

缺少 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 無法加入舊叢集。如果先前 Cassandra 叢集在同一個 Kubernetes 節點上保留過時的永久磁碟區,通常就會發生這種情況。如果您刪除並重新建立叢集中的 Cassandra,就可能發生這個問題。
Kubernetes 升級 Kubernetes 升級可能會影響 Cassandra 叢集。如果裝載 Cassandra Pod 的 Anthos 工作人員節點升級至新版作業系統,就可能發生這種情況。

診斷

查看 Cassandra 錯誤記錄,判斷問題原因。

  1. 列出 Pod,取得發生故障的 Cassandra Pod ID:
    kubectl get pods -n NAMESPACE
  2. 檢查失敗的 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 偵錯公用程式,例如 cqlsh:CQL Shell。這些公用程式可讓您查詢 Cassandra 資料表,有助於偵錯。

建立用戶端容器

如要建立用戶端容器,請按照下列步驟操作:

  1. 容器必須使用 apigee-cassandra-user-setup Pod 中的 TLS 憑證。這會儲存為 Kubernetes Secret。擷取儲存這個憑證的 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 欄位。

  2. 開啟新檔案,並將下列 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
  3. 使用 .yaml 副檔名儲存檔案。例如:my-spec.yaml
  4. 將規格套用至叢集:
    kubectl apply -f YOUR_SPEC_FILE.yaml -n apigee
  5. 登入容器:
    kubectl exec -n apigee CASSANDRA_CLIENT_NAME -it -- bash
  6. 使用下列指令連線至 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 On-Prem (Anthos) 平台的多區域擴充作業中。請盡量避免在同一個資料中心建立所有 Cassandra 節點。

症狀

Cassandra 節點無法在第二個區域的資料中心建立。

錯誤訊息

failed to rebuild from dc-1: java.lang.RuntimeException : Error while rebuilding node: Stream failed

解決方法

如要修正設定錯誤的區域擴展功能,請按照下列步驟操作:

  1. 在第二個資料中心的 overrides.yaml 檔案中,將 Cassandra replicaCount 更新為 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
  2. 使用 kubectl exec 透過下列指令存取其餘 Cassandra Pod:
    kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
  3. 使用下列指令停用其餘 Cassandra Pod:
    nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD decommission
  4. 使用 Helm 從第二個資料中心刪除 Cassandra Pod:

    helm uninstall datastore -n APIGEE_NAMESPACE
  5. 將 Kubernetes 內容切換至第一個資料中心的叢集:
    kubectl config use-context FIRST_DATACENTER_CLUSTER
  6. 確認第一個資料中心沒有處於停機狀態的 Cassandra 節點。
    nodetool -u CASSANDRA_DB_USER -pw CASSANDRA_DB_PASSWORD status
  7. 確認已從第一個資料中心移除設定錯誤的 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
  8. 確認第二個資料中心的 overrides.yaml 檔案包含 cassandra 區段下的資料中心名稱設定。例如:
    cassandra:
      datacenter: DATA_CENTER_2
      rack: "RACK_NAME" # "ra-1" is the default value.
      . . .
  9. 將第二個資料中心的 overrides.yaml 檔案中 cassandra:replicaCount 設定更新為所需數字。例如:
    cassandra:
      datacenter: DATA_CENTER_2
      . . .
      replicaCount: 3
  10. 使用 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
  11. 使用 kubectl exec 存取第二個資料中心的新 Cassandra Pod,並確認有兩個資料中心:
     "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 備份

  1. 請務必正確設定 Cloud Storage 備份。常見問題包括但不限於:

    如果設定有任何問題,請先修正再繼續操作。

  2. 使用下列指令手動刪除剩餘的快照:

    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]
                
  3. 觸發手動備份工作,並驗證工作是否成功完成。
  4. 確認手動備份工作建立的備份封存檔已成功上傳至 overrides.yaml 檔案中指定的 cassandra.backup.dbStorageBucket Cloud Storage bucket。
  5. 使用「診斷」一節中稍早提供的指令,確認所有 Cassandra Pod 的剩餘快照數量為 0。

遠端伺服器備份

  1. 確認遠端備份伺服器運作正常,且可從 Cassandra Pod 連線。 請參閱疑難排解一節,瞭解如何驗證 SSH 連線。常見問題包括但不限於:
    • 網路防火牆封鎖連線。
    • 安全殼層 (SSH) 金鑰組設定有誤。
    • 無法連線至遠端備份伺服器。
    • 遠端備份伺服器的可用儲存空間不足。

    如果發現遠端備份伺服器有任何問題,請先修正問題再繼續操作。

  2. 使用下列指令手動刪除剩餘的快照:

    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]
                
  3. 觸發手動備份工作,並驗證工作是否成功完成。
  4. 確認手動備份作業建立的備份封存檔已成功上傳至遠端備份伺服器。
  5. 使用「診斷」一節中稍早提供的指令,確認所有 Cassandra Pod 的剩餘快照數量為 0。

其他資源

請參閱「 Apigee X 和 Apigee Hybrid 教戰手冊簡介」。