調整 Cassandra 的資源配置

本主題將說明如何水平和垂直擴充 Cassandra,以及如何縮減 Cassandra。

水平擴充 Cassandra

如何水平擴充 Cassandra

  1. 請務必先確認 apigee-data 節點集區有額外的容量,再擴充 Cassandra。另請參閱「設定專屬節點集區」。
  2. 在覆寫檔案中設定 cassandra.replicaCount 設定屬性的值。replicaCount 的值必須是 3 的倍數。如要決定所需的 replicaCount 值,請考量下列事項:
    • 預估 Proxy 的流量需求。
    • 執行負載測試,並合理預測 CPU 使用率。
    • 您可以在不同的區域指定不同的 replicaCount 值。
    • 日後,您可以在覆寫檔案中擴充 replicaCount

    如要瞭解這項屬性,請參閱設定屬性參考資料。另請參閱「管理執行階段層元件」。

  3. 請套用變更,例如:
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

垂直調度 Cassandra

本節將說明如何垂直擴充 Cassandra pod,以因應更高的 CPU 和記憶體需求。

總覽

針對 Apigee 混合型實際工作環境部署作業,建議您至少建立兩個獨立的節點集區:一個用於有狀態服務 (Cassandra),另一個用於無狀態 (執行階段) 服務。例如,請參閱 GKE 實際工作環境叢集規定

對於有狀態的 Cassandra 節點集區,建議一開始使用 8 個 CPU 核心和 30 GB 記憶體。節點集區佈建後,就無法變更這些設定。另請參閱「為實際工作環境設定 Cassandra」。

如果您需要擴充 Cassandra Pod 以滿足更高的 CPU 和記憶體需求,請按照本主題所述步驟操作。

擴充 Cassandra pod

請按照下列步驟,為 Cassandra 使用的有狀態節點集區增加 CPU 和記憶體:

  1. 請按照 Kubernetes 平台的操作說明,將新的節點集區新增至叢集。安裝操作說明列出支援的平台。
  2. 確認新節點集區是否已就緒:
    kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE

    指令範例:

    kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new

    輸出內容範例:

    NAME                                                STATUS   ROLES    AGE     VERSION
    gke-apigee-data-new-441387c2-2h5n   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-6941   Ready    <none>   4m28s   v1.14.10-gke.17
    gke-apigee-data-new-441387c2-nhgc   Ready    <none>   4m29s   v1.14.10-gke.17
  3. 更新覆寫檔案,以便使用 Cassandra 的新節點集區,並將 Pod 資源更新為您要使用的 CPU 數量和記憶體大小。舉例來說,如果是 GKE 叢集,請使用類似下列的設定。如果您使用的是其他 Kubernetes 平台,請視情況調整 apigeeData.key 值:
    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "NODE_POOL_LABEL_NAME"
        value: "NODE_POOL_LABEL_VALUE"
    
    cassandra:
      resources:
        requests:
          cpu: NODE_POOL_CPU_NUMBER
          memory: NODE_POOL_MEMORY_SIZE

    例如:

    nodeSelector:
      requiredForScheduling: true
      apigeeData:
        key: "cloud.google.com/gke-nodepool"
        value: "apigee-data-new"
    
    cassandra:
      resources:
        requests:
          cpu: 14
          memory: 16Gi
  4. 將覆寫檔案套用至叢集:
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

完成這些步驟後,Cassandra Pod 就會開始遷移至新的節點集區。

縮減 Cassandra 的資源

Apigee Hybrid 會將 Cassandra 節點環用為 StatefulSet。Cassandra 會為執行階段平面上的特定 Apigee 實體提供永久儲存空間。如要進一步瞭解 Cassandra,請參閱「關於執行階段平面」。

Cassandra 是資源密集型服務,不應與任何其他混合型服務一併部署至 Pod 中。視負載而定,您可能需要調整叢集中環中 Cassandra 節點的數量。

縮減 Cassandra 環的一般程序如下:

  1. 請確認 Cassandra 叢集運作正常,且有足夠的儲存空間可支援縮減。
  2. 更新 overrides.yaml 中的 cassandra.replicaCount 屬性。
  3. 套用設定更新。
  4. 根據叢集設定,刪除永久磁碟區要求或磁碟區。

注意事項

  • 如果除了要停用的節點以外的任何節點皆處於不健康狀態,請勿繼續操作。Kubernetes 將無法從叢集中縮減 Pod。
  • 請務必以三個節點為單位進行縮放。

縮減 Cassandra

  1. 請驗證叢集是否正常運作,且所有節點都已啟動並運作,如以下範例所示:
    kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
    NAME                 READY   STATUS    RESTARTS   AGE
    apigee-cassandra-default-0   1/1     Running   0          2h
    apigee-cassandra-default-1   1/1     Running   0          2h
    apigee-cassandra-default-2   1/1     Running   0          2h
    apigee-cassandra-default-3   1/1     Running   0          16m
    apigee-cassandra-default-4   1/1     Running   0          14m
    apigee-cassandra-default-5   1/1     Running   0          13m
    apigee-cassandra-default-6   1/1     Running   0          9m
    apigee-cassandra-default-7   1/1     Running   0          9m
    apigee-cassandra-default-8   1/1     Running   0          8m
    kubectl -n APIGEE_NAMESPACE exec -it apigee-cassandra-default-0 nodetool status
    
    Datacenter: dc-us-east1
    ==================== 狀態=上線/下線 |/ 狀態=正常/離開/加入/移動 -- 位址 負載 符記 擁有 (有效) 主機 ID 機架 UN 10.16.2.6 690.17 KiB 256 48.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 705.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 674.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 697.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 703.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 700.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1 UN 10.16.11.3 697.03 KiB 256 49.8% dad221ff-dad1-de33-2cd3-f1.672367e6f ra-1 UN 10.16.14.16 704.04 KiB 256 50.9% 1feed042-a4b6-24ab-49a1-24d4cef95473 ra-1 UN 10.16.16.1 699.82 KiB 256 50.6% beef93af-fee0-8e9d-8bbf-efc22d653596 ra-1
  2. 判斷 Cassandra 叢集是否有足夠的儲存空間,可支援縮減規模。縮減後,Cassandra 節點的儲存空間用量應不超過 75%。

    舉例來說,如果叢集有 6 個 Cassandra 節點,且這些節點都已使用約 50%,則縮減為 3 個節點會讓 3 個節點都達到 100%,因此無法繼續運作。

    不過,如果您有 9 個 Cassandra 節點,且每個節點都已使用約 50%,則縮減至 6 個節點,每個節點的使用率約為 75%。您可以縮小尺寸。

  3. overrides.yaml 檔案中更新或新增 cassandra.replicaCount 屬性。例如,如果目前的節點數為 9,請將其改為 6:
    cassandra:
      replicaCount: 6 # 
  4. 將設定變更套用至叢集:
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
  5. 確認所有剩餘的 Cassandra 節點皆在執行:
    kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra
    NAME                 READY   STATUS    RESTARTS   AGE
    apigee-cassandra-default-0   1/1     Running   0          3h
    apigee-cassandra-default-1   1/1     Running   0          3h
    apigee-cassandra-default-2   1/1     Running   0          2h
    apigee-cassandra-default-3   1/1     Running   0          25m
    apigee-cassandra-default-4   1/1     Running   0          24m
    apigee-cassandra-default-5   1/1     Running   0          23m
    
    
  6. 確認 cassandra.replicaCount 值等於 nodetool status 指令傳回的節點數量。

    舉例來說,如果您將 Cassandra 縮減為六個節點:

    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE -- nodetool -u JMX_USER -pw JMX_PASSWORD status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address      Load         Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6    1009.17 KiB  256          73.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6    1.65.55 KiB  256          75.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
    UN  10.16.11.11  999.36 KiB   256          72.8%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
    UN  10.16.1.11   1017.03 KiB  256          74.2%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13   1061.64 KiB  256          75.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15   1049.42 KiB  256          74.9%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
    
  7. 在 Cassandra 叢集縮減後,請確認 pvcs (PersistentVolumeClaim) 對應至剩餘的 Cassandra 節點。

    取得 PV 名稱:

    kubectl get pvc -n APIGEE_NAMESPACE
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-default-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-default-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-default-5   Bound    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h

    在這個範例中,您應該不會看到與三個縮減節點相對應的 PVC:

    • cassandra-data-apigee-cassandra-8
    • cassandra-data-apigee-cassandra-7
    • cassandra-data-apigee-cassandra-6