多區域部署作業

本主題說明在 GKE、GKE On-Prem、Microsoft® Azure Kubernetes Service (AKS)、Amazon Elastic Kubernetes Service (EKS) 和 RedHat OpenShift 上,為 Apigee hybrid 進行多區域部署。在必要條件和程序中選取平台。

多地區部署的拓撲包括:

  • Active-Active:如果您在多個地理位置部署應用程式,且需要低延遲的 API 回應,您可以選擇在距離客戶最近的多個地理區域部署混合式雲端。例如:美國西岸、美國東岸、歐洲、亞太/澳洲/紐西蘭。
  • 主動-被動:當您有主要區域和容錯或災難復原區域時。

多區域混合式部署中的區域會透過 Cassandra 進行通訊,如下圖所示:

Apigee Hybrid 多地區部署架構

必要條件

為多個區域設定混合式連線之前,您必須完成下列先決條件:

GKE

  • 在不同網路 (例如不同雲端服務供應商、不同虛擬私有雲網路、雲端和地端) 之間安裝多區域 Apigee 部署項目時,您必須在這些獨立網路之間提供內部連線,讓 Cassandra 可用於節點間的通訊。這可以透過 VPN 或雲端專屬連線解決方案完成。
  • 如果您在一個叢集中使用 Workload Identity 驗證服務帳戶,強烈建議您在每個擴展的叢集中使用 Workload Identity。請參閱「在 GKE 上啟用 Workload Identity」或「在 AKS 和 EKS 上啟用 Workload Identity Federation」。
  • 在多個區域中設定具有不同 CIDR 區塊的 Kubernetes 叢集。
  • 請確認每個叢集都已安裝 cert-manager
  • 設定跨區域通訊。
  • 請確認所有 Cassandra Pod 都能解析自己的主機名稱。如果 hostNetwork 設為 false,主機名稱就是 Cassandra Pod 名稱。如果「hostNetwork」設為「true」,主機名稱就是執行 Cassandra Pod 的 Kubernetes 節點主機名稱。
  • Cassandra 多區域規定:
    • 請確認 Pod 網路命名空間在各區域之間具有連線能力,包括防火牆、VPN、VPC 對等互連和 vNet 對等互連。大多數 GKE 安裝作業都是如此。
    • 如果 Pod 網路命名空間沒有叢集間的連線 (叢集會在「島嶼網路模式」中執行),請為 Apigee 混合式多地區安裝的所有區域,在覆寫檔案中設定 cassandra.hostNetwork: true,啟用 Kubernetes hostNetwork 功能。

      如要進一步瞭解 hostNetwork 的需求,請參閱下方的孤島模式叢集和 hostNetwork

    • 請先在現有叢集上啟用 hostNetwork,再將多區域設定擴展至新區域。
    • 啟用 hostNetwork 時,請確認 worker 節點可以針對主機名稱執行前向 DNS 查詢。Apigee Cassandra 會在啟動時使用正向 DNS 查詢來取得主機 IP。
    • 在所有區域的 Kubernetes 叢集之間開啟 TCP 通訊埠 7001,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 的通訊埠編號,請參閱「設定通訊埠」一文。

詳情請參閱 Kubernetes 說明文件。

GKE On-Prem

  • 在不同網路 (例如不同雲端服務供應商、不同虛擬私有雲網路、雲端和地端) 之間安裝多區域 Apigee 部署項目時,您必須在這些獨立網路之間提供內部連線,讓 Cassandra 可用於節點間的通訊。這可以透過 VPN 或雲端專屬連線解決方案完成。
  • 在多個區域中設定具有不同 CIDR 區塊的 Kubernetes 叢集。
  • 請確認每個叢集都已安裝 cert-manager
  • 設定跨區域通訊。
  • 請確認所有 Cassandra Pod 都能解析自己的主機名稱。如果 hostNetwork 設為 false,主機名稱就是 Cassandra Pod 名稱。如果「hostNetwork」設為「true」,主機名稱就是執行 Cassandra Pod 的 Kubernetes 節點主機名稱。
  • Cassandra 多區域規定:
    • 如果 Pod 網路命名空間沒有叢集間的連線 (叢集會在「島嶼網路模式」中執行,這是 GKE 內部安裝的預設情況),請在 Apigee 混合多區安裝的所有區域中,在覆寫檔案中設定 cassandra.hostNetwork: true,啟用 Kubernetes hostNetwork 功能。

      如要進一步瞭解 hostNetwork 的需求,請參閱下方的孤島模式叢集和 hostNetwork

    • 請先在現有叢集上啟用 hostNetwork,再將多區域設定擴展至新區域。
    • 啟用 hostNetwork 時,請確認 worker 節點可以針對主機名稱執行前向 DNS 查詢。Apigee Cassandra 會在啟動時使用正向 DNS 查詢來取得主機 IP。
    • 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

詳情請參閱 Kubernetes 說明文件。

AKS

  • 在不同網路 (例如不同雲端服務供應商、不同虛擬私有雲網路、雲端和地端) 之間安裝多區域 Apigee 部署項目時,您必須在這些獨立網路之間提供內部連線,讓 Cassandra 可用於節點間的通訊。這可以透過 VPN 或雲端專屬連線解決方案完成。
  • 請按照混合式安裝指南的說明,完成 Google Cloud 和機構設定等先決條件,再繼續進行叢集設定步驟。
  • 請確認每個叢集都已安裝 cert-manager
  • 請確認所有 Cassandra Pod 都能解析自己的主機名稱。如果 hostNetwork 設為 false,主機名稱就是 Cassandra Pod 名稱。如果「hostNetwork」設為「true」,主機名稱就是執行 Cassandra Pod 的 Kubernetes 節點主機名稱。
  • Cassandra 多區域規定:
    • 如果 Pod 網路命名空間沒有叢集間的連線 (叢集會在「島嶼網路模式」中執行,這是 AKS 安裝作業的預設情況),請在 Apigee 混合多地區安裝作業的所有地區中,在覆寫檔案中設定 cassandra.hostNetwork: true,以便啟用 Kubernetes hostNetwork 功能。

      如要進一步瞭解 hostNetwork 的需求,請參閱下方的孤島模式叢集和 hostNetwork

    • 請先在現有叢集上啟用 hostNetwork,再將多區域設定擴展至新區域。
    • 啟用 hostNetwork 時,請確認 worker 節點可以針對主機名稱執行前向 DNS 查詢。Apigee Cassandra 會在啟動時使用正向 DNS 查詢來取得主機 IP。
    • 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

詳情請參閱 Kubernetes 說明文件。

EKS

  • 在不同網路 (例如不同雲端服務供應商、不同虛擬私有雲網路、雲端和地端) 之間安裝多區域 Apigee 部署項目時,您必須在這些獨立網路之間提供內部連線,讓 Cassandra 可用於節點間的通訊。這可以透過 VPN 或雲端專屬連線解決方案完成。
  • 請按照混合式安裝指南的說明,完成 Google Cloud 和機構設定等先決條件,再繼續進行叢集設定步驟。
  • 請確認每個叢集都已安裝 cert-manager
  • 請確認所有 Cassandra Pod 都能解析自己的主機名稱。如果 hostNetwork 設為 false,主機名稱就是 Cassandra Pod 名稱。如果「hostNetwork」設為「true」,主機名稱就是執行 Cassandra Pod 的 Kubernetes 節點主機名稱。
  • Cassandra 多區域規定:
    • 如果 Pod 網路命名空間沒有叢集間的連線 (叢集會在「島嶼網路模式」中執行),請在 Apigee 混合式多區域安裝的所有區域中,在覆寫檔案中設定 cassandra.hostNetwork: true,以便啟用 Kubernetes hostNetwork 功能。Amazon EKS 預設會使用 完全整合的網路模型

      如要進一步瞭解 hostNetwork 的需求,請參閱下方的孤島模式叢集和 hostNetwork

    • 請先在現有叢集上啟用 hostNetwork,再將多區域設定擴展至新區域。
    • 啟用 hostNetwork 時,請確認 worker 節點可以針對主機名稱執行前向 DNS 查詢。Apigee Cassandra 會在啟動時使用正向 DNS 查詢來取得主機 IP。
    • 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

詳情請參閱 Kubernetes 說明文件。

OpenShift

  • 在不同網路 (例如不同雲端服務供應商、不同虛擬私有雲網路、雲端和地端) 之間安裝多區域 Apigee 部署項目時,您必須在這些獨立網路之間提供內部連線,讓 Cassandra 可用於節點間的通訊。這可以透過 VPN 或雲端專屬連線解決方案完成。
  • 請按照混合式安裝指南的說明,完成 Google Cloud 和機構設定等先決條件,再繼續進行叢集設定步驟。
  • 請確認每個叢集都已安裝 cert-manager
  • 請確認所有 Cassandra Pod 都能解析自己的主機名稱。如果 hostNetwork 設為 false,主機名稱就是 Cassandra Pod 名稱。如果「hostNetwork」設為「true」,主機名稱就是執行 Cassandra Pod 的 Kubernetes 節點主機名稱。
  • Cassandra 多區域規定:
    • 如果 Pod 網路命名空間沒有叢集間的連線 (叢集會在「島嶼網路模式」中執行,這是 OpenShift 安裝作業的預設情況),請在 Apigee 混合式多區安裝作業的所有區域中,在覆寫檔案中設定 cassandra.hostNetwork: true,以便啟用 Kubernetes hostNetwork 功能。

      如要進一步瞭解 hostNetwork 的需求,請參閱下方的孤島模式叢集和 hostNetwork

    • 請先在現有叢集上啟用 hostNetwork,再將多區域設定擴展至新區域。
    • 啟用 hostNetwork 時,請確認 worker 節點可以針對主機名稱執行前向 DNS 查詢。Apigee Cassandra 會在啟動時使用正向 DNS 查詢來取得主機 IP。
    • 在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

詳情請參閱 Kubernetes 說明文件。

孤島模式叢集和 hostNetwork

Kubernetes 叢集有兩種主要的網路模型:完全整合 (或平面) 和孤島模式。Apigee 建議盡量使用平面網路模型,因為這樣可簡化跨多個區域的 Cassandra 連線。在島嶼模式中設定 Kubernetes 叢集時,Pod 網路會處於隔離狀態。Pod 無法使用 Pod IP 位址,直接與在其他叢集中執行的 Pod 通訊。如要進一步瞭解這兩種網路模型的差異,以及各自的範例,請參閱「典型的網路模型實作」。

當 Apigee Hybrid 在使用孤島模式網路模型的兩個或更多 Kubernetes 叢集中執行時,必須透過 cassandra.hostNetwork 屬性為 Cassandra 啟用 hostNetwork 設定。根據預設,Kubernetes 會將 Pod 隔離成個別的網路命名空間,以免 Pod 使用 Kubernetes 工作節點 IP。當 hostNetwork 設為 true 時,Pod 不會在其自身的網路命名空間中隔離,而是使用 Pod 排程的 Kubernetes 工作節點的 IP 位址和主機名稱。這可讓 Cassandra 原生使用 Kubernetes 工作節點 IP 做為其 IP,提供 Cassandra 在多個叢集中建立完整網狀結構的一種方式,這些叢集會以島嶼模式運作。

Cassandra 主機名稱解析

雖然 Cassandra pod 不會依主機名稱解析其他 Cassandra pod,但在啟動時,Cassandra 會檢查是否可透過 DNS 解析自身的主機名稱。hostNetwork 設為 true 時,Pod 主機名稱會與 Kubernetes 工作節點主機名稱相同,因此工作節點主機名稱必須透過叢集 DNS 服務解析為 IP 位址。如果無法解析 Kubernetes 工作站節點主機名稱,Cassandra Pod 將無法完全啟動。因此,當您將 hostNetwork 設為 true 時,請務必確保 Kubernetes 工作節點主機名稱可從叢集中的 Pod 解析。

為多區域設定 Apigee Hybrid

本節說明如何為多區域設定 Apigee Hybrid。

GKE

設定多區域種子主機

本節說明如何將現有的 Cassandra 叢集擴展至新區域。這項設定可讓新區域啟動叢集,並加入現有的資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就不會彼此互通。

  1. 針對建立的第一個區域,取得 apigee 命名空間中的 Pod:

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. 找出這個區域中 Cassandra 的多區域種子主機位址,例如 10.0.0.11
  3. 為第二個區域準備 overrides.yaml 檔案,並新增種子主機 IP 位址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    更改下列內容:

    • SEED_HOST_IP_ADDRESS 與種子主機 IP 位址,例如 10.0.0.11
    • DATACENTER_NAME 與資料中心名稱,例如 dc-2
    • RACK_NAME 加上機架名稱,例如 ra-1
    • CLUSTER_NAME 替換為 Cassandra 叢集的名稱。根據預設,這個值為 apigeecluster。如果您使用其他叢集名稱,則必須為 cassandra.clusterName 指定值。您可以自行選擇值,但必須在所有地區都相同。

設定第二個區域

如要設定新的區域,請按照下列步驟操作:

  1. 在第二個區域中安裝 cert-manager

  2. 將憑證從現有叢集複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根目錄,用於 mTLS。因此,叢集中的憑證必須保持一致。
    1. 將內容設定為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 將結構定義設為新區域的叢集名稱:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的命名空間:

      kubectl apply -f apigee-namespace.yaml
      
    6. 將 Secret 匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. 請按照步驟 將 Apigee hybrid CRD 安裝到新區域。

  4. 接著,使用 Helm 圖表在新的區域安裝 Apigee hybrid,並執行下列 Helm 圖表指令 (如在區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  5. 請執行下列指令,驗證 Cassandra 叢集設定。輸出內容應同時顯示現有和新資料中心。
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    設定成功的範例:

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. 在新資料中心的所有 pod 上設定 Cassandra。
    1. 使用下列指令從叢集中取得 apigeeorg
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      例如:

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在以下範例中,檔案名稱為 datareplication.yaml

      檔案必須包含下列內容:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      其中:

      • REGION_EXPANSION 是您要為此中繼資料指定的名稱。您可以使用任何名稱。
      • NAMESPACEoverrides.yaml 提供的命名空間相同。通常是「apigee」。
      • APIGEEORG_VALUE 是上一個步驟中 kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" 指令的輸出值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,來源區域覆寫值.yaml 中的 cassandra 區段

      例如:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. 使用下列指令套用 CassandraDataReplication
      kubectl apply -f datareplication.yaml
  7. 使用下列指令確認重建狀態。
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. 資料複製完成並經過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新套用變更,更新 apigee 資料儲存庫 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. 請透過記錄檔確認重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    以下範例顯示記錄項目:

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

檢查 Cassandra 叢集狀態

下列指令可用於查看叢集設定是否在兩個資料中心中成功。這個指令會檢查兩個區域的 nodetool 狀態。

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

GKE On-Prem

設定多區域種子主機

本節說明如何將現有的 Cassandra 叢集擴展至新區域。這項設定可讓新區域啟動叢集,並加入現有的資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就不會彼此互通。

  1. 針對建立的第一個區域,取得 apigee 命名空間中的 Pod:

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. 找出這個區域中 Cassandra 的多區域種子主機位址,例如 10.0.0.11
  3. 為第二個區域準備 overrides.yaml 檔案,並新增種子主機 IP 位址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    更改下列內容:

    • SEED_HOST_IP_ADDRESS 與種子主機 IP 位址,例如 10.0.0.11
    • DATACENTER_NAME 與資料中心名稱,例如 dc-2
    • RACK_NAME 加上機架名稱,例如 ra-1
    • CLUSTER_NAME 替換為 Cassandra 叢集的名稱。根據預設,這個值為 apigeecluster。如果您使用其他叢集名稱,則必須為 cassandra.clusterName 指定值。您可以自行選擇值,但必須在所有地區都相同。

設定第二個區域

如要設定新的區域,請按照下列步驟操作:

  1. 在第二個區域中安裝 cert-manager

  2. 將憑證從現有叢集複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根目錄,用於 mTLS。因此,叢集中的憑證必須保持一致。
    1. 將內容設定為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 將結構定義設為新區域的叢集名稱:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的命名空間:

      kubectl apply -f apigee-namespace.yaml
      
    6. 將 Secret 匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. 請按照步驟 將 Apigee hybrid CRD 安裝到新區域。

  4. 接著,使用 Helm 圖表在新的區域安裝 Apigee hybrid,並執行下列 Helm 圖表指令 (如在區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  5. 請執行下列指令,驗證 Cassandra 叢集設定。輸出內容應同時顯示現有和新資料中心。
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    設定成功的範例:

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. 在新資料中心的所有 pod 上設定 Cassandra。
    1. 使用下列指令從叢集中取得 apigeeorg
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      例如:

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在以下範例中,檔案名稱為 datareplication.yaml

      檔案必須包含下列內容:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      其中:

      • REGION_EXPANSION 是您要為此中繼資料指定的名稱。您可以使用任何名稱。
      • NAMESPACEoverrides.yaml 提供的命名空間相同。通常是「apigee」。
      • APIGEEORG_VALUE 是上一個步驟中 kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" 指令的輸出值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,來源區域覆寫值.yaml 中的 cassandra 區段

      例如:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. 使用下列指令套用 CassandraDataReplication
      kubectl apply -f datareplication.yaml
  7. 使用下列指令確認重建狀態。
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. 資料複製完成並經過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新套用變更,更新 apigee 資料儲存庫 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. 請透過記錄檔確認重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    以下範例顯示記錄項目:

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

檢查 Cassandra 叢集狀態

下列指令可用於查看叢集設定是否在兩個資料中心中成功。這個指令會檢查兩個區域的 nodetool 狀態。

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

AKS

在各個區域中建立虛擬網路

請按照 Azure 建議的做法,建立跨區域通訊:VNet 到 VNet:在 Azure 中跨區域連線虛擬網路

建立多區域叢集

在具有不同 CIDR 區塊的多個區域中設定 Kubernetes 叢集。另請參閱「步驟 1:建立叢集」。使用先前建立的位置和虛擬網路名稱。

在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

設定多區域種子主機

本節說明如何將現有的 Cassandra 叢集擴展至新區域。這項設定可讓新區域啟動叢集,並加入現有的資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就不會彼此互通。

  1. 針對建立的第一個區域,取得 apigee 命名空間中的 Pod:

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. 找出這個區域中 Cassandra 的多區域種子主機位址,例如 10.0.0.11
  3. 為第二個區域準備 overrides.yaml 檔案,並新增種子主機 IP 位址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    更改下列內容:

    • SEED_HOST_IP_ADDRESS 與種子主機 IP 位址,例如 10.0.0.11
    • DATACENTER_NAME 與資料中心名稱,例如 dc-2
    • RACK_NAME 加上機架名稱,例如 ra-1
    • CLUSTER_NAME 替換為 Cassandra 叢集的名稱。根據預設,這個值為 apigeecluster。如果您使用其他叢集名稱,則必須為 cassandra.clusterName 指定值。您可以自行選擇值,但必須在所有地區都相同。

設定第二個區域

如要設定新的區域,請按照下列步驟操作:

  1. 在第二個區域中安裝 cert-manager

  2. 將憑證從現有叢集複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根目錄,用於 mTLS。因此,叢集中的憑證必須保持一致。
    1. 將內容設定為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 將結構定義設為新區域的叢集名稱:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的命名空間:

      kubectl apply -f apigee-namespace.yaml
      
    6. 將 Secret 匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. 請按照步驟 將 Apigee hybrid CRD 安裝到新區域。

  4. 接著,使用 Helm 圖表在新的區域安裝 Apigee hybrid,並執行下列 Helm 圖表指令 (如在區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  5. 請執行下列指令,驗證 Cassandra 叢集設定。輸出內容應同時顯示現有和新資料中心。
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    設定成功的範例:

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. 在新資料中心的所有 pod 上設定 Cassandra。
    1. 使用下列指令從叢集中取得 apigeeorg
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      例如:

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在以下範例中,檔案名稱為 datareplication.yaml

      檔案必須包含下列內容:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      其中:

      • REGION_EXPANSION 是您要為此中繼資料指定的名稱。您可以使用任何名稱。
      • NAMESPACEoverrides.yaml 提供的命名空間相同。通常是「apigee」。
      • APIGEEORG_VALUE 是上一個步驟中 kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" 指令的輸出值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,來源區域覆寫值.yaml 中的 cassandra 區段

      例如:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. 使用下列指令套用 CassandraDataReplication
      kubectl apply -f datareplication.yaml
  7. 使用下列指令確認重建狀態。
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. 資料複製完成並經過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新套用變更,更新 apigee 資料儲存庫 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. 請透過記錄檔確認重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    以下範例顯示記錄項目:

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

檢查 Cassandra 叢集狀態

下列指令可用於查看叢集設定是否在兩個資料中心中成功。這個指令會檢查兩個區域的 nodetool 狀態。

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

EKS

在各個區域中建立虛擬網路

請按照 AWS 建議建立跨區域通訊,如「 什麼是 VPC 互連?」一文所述。AWS 使用不同區域的術語是區域間虛擬私有雲對等互連

建立多區域叢集

在具有不同 CIDR 區塊的多個區域中設定 Kubernetes 叢集。另請參閱「步驟 1:建立叢集」。使用先前建立的位置和虛擬網路名稱。

在所有區域的 Kubernetes 叢集之間開啟 Cassandra 連接埠,讓各區域和資料中心的工作站節點能夠通訊。如要瞭解 Cassandra 通訊埠編號,請參閱「設定通訊埠」。

設定多區域種子主機

本節說明如何將現有的 Cassandra 叢集擴展至新區域。這項設定可讓新區域啟動叢集,並加入現有的資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就不會彼此互通。

  1. 針對建立的第一個區域,取得 apigee 命名空間中的 Pod:

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. 找出這個區域中 Cassandra 的多區域種子主機位址,例如 10.0.0.11
  3. 為第二個區域準備 overrides.yaml 檔案,並新增種子主機 IP 位址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    更改下列內容:

    • SEED_HOST_IP_ADDRESS 與種子主機 IP 位址,例如 10.0.0.11
    • DATACENTER_NAME 與資料中心名稱,例如 dc-2
    • RACK_NAME 加上機架名稱,例如 ra-1
    • CLUSTER_NAME 替換為 Cassandra 叢集的名稱。根據預設,這個值為 apigeecluster。如果您使用其他叢集名稱,則必須為 cassandra.clusterName 指定值。您可以自行選擇值,但必須在所有地區都相同。

設定第二個區域

如要設定新的區域,請按照下列步驟操作:

  1. 在第二個區域中安裝 cert-manager

  2. 將憑證從現有叢集複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根目錄,用於 mTLS。因此,叢集中的憑證必須保持一致。
    1. 將內容設定為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 將結構定義設為新區域的叢集名稱:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的命名空間:

      kubectl apply -f apigee-namespace.yaml
      
    6. 將 Secret 匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. 請按照步驟 將 Apigee hybrid CRD 安裝到新區域。

  4. 接著,使用 Helm 圖表在新的區域安裝 Apigee hybrid,並執行下列 Helm 圖表指令 (如在區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  5. 請執行下列指令,驗證 Cassandra 叢集設定。輸出內容應同時顯示現有和新資料中心。
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    設定成功的範例:

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. 在新資料中心的所有 pod 上設定 Cassandra。
    1. 使用下列指令從叢集中取得 apigeeorg
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      例如:

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在以下範例中,檔案名稱為 datareplication.yaml

      檔案必須包含下列內容:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      其中:

      • REGION_EXPANSION 是您要為此中繼資料指定的名稱。您可以使用任何名稱。
      • NAMESPACEoverrides.yaml 提供的命名空間相同。通常是「apigee」。
      • APIGEEORG_VALUE 是上一個步驟中 kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" 指令的輸出值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,來源區域覆寫值.yaml 中的 cassandra 區段

      例如:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. 使用下列指令套用 CassandraDataReplication
      kubectl apply -f datareplication.yaml
  7. 使用下列指令確認重建狀態。
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. 資料複製完成並經過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新套用變更,更新 apigee 資料儲存庫 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. 請透過記錄檔確認重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    以下範例顯示記錄項目:

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

檢查 Cassandra 叢集狀態

下列指令可用於查看叢集設定是否在兩個資料中心中成功。這個指令會檢查兩個區域的 nodetool 狀態。

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

OpenShift

設定多區域種子主機

本節說明如何將現有的 Cassandra 叢集擴展至新區域。這項設定可讓新區域啟動叢集,並加入現有的資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就不會彼此互通。

  1. 針對建立的第一個區域,取得 apigee 命名空間中的 Pod:

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. 找出這個區域中 Cassandra 的多區域種子主機位址,例如 10.0.0.11
  3. 為第二個區域準備 overrides.yaml 檔案,並新增種子主機 IP 位址,如下所示:

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    更改下列內容:

    • SEED_HOST_IP_ADDRESS 與種子主機 IP 位址,例如 10.0.0.11
    • DATACENTER_NAME 與資料中心名稱,例如 dc-2
    • RACK_NAME 加上機架名稱,例如 ra-1
    • CLUSTER_NAME 替換為 Cassandra 叢集的名稱。根據預設,這個值為 apigeecluster。如果您使用其他叢集名稱,則必須為 cassandra.clusterName 指定值。您可以自行選擇值,但必須在所有地區都相同。

設定第二個區域

如要設定新的區域,請按照下列步驟操作:

  1. 在第二個區域中安裝 cert-manager

  2. 將憑證從現有叢集複製到新叢集。 Cassandra 和其他混合式元件會使用新的 CA 根目錄,用於 mTLS。因此,叢集中的憑證必須保持一致。
    1. 將內容設定為原始命名空間:

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. 將目前的命名空間設定匯出至檔案:

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca 密鑰匯出至檔案:

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. 將結構定義設為新區域的叢集名稱:

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的命名空間:

      kubectl apply -f apigee-namespace.yaml
      
    6. 將 Secret 匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. 請按照步驟 將 Apigee hybrid CRD 安裝到新區域。

  4. 接著,使用 Helm 圖表在新的區域安裝 Apigee hybrid,並執行下列 Helm 圖表指令 (如在區域 1 所示):

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f overrides-DATACENTER_NAME.yaml
    
  5. 請執行下列指令,驗證 Cassandra 叢集設定。輸出內容應同時顯示現有和新資料中心。
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    設定成功的範例:

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. 在新資料中心的所有 pod 上設定 Cassandra。
    1. 使用下列指令從叢集中取得 apigeeorg
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      例如:

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. 建立 Cassandra 資料複製自訂資源 (YAML) 檔案。檔案名稱不限。在以下範例中,檔案名稱為 datareplication.yaml

      檔案必須包含下列內容:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      其中:

      • REGION_EXPANSION 是您要為此中繼資料指定的名稱。您可以使用任何名稱。
      • NAMESPACEoverrides.yaml 提供的命名空間相同。通常是「apigee」。
      • APIGEEORG_VALUE 是上一個步驟中 kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" 指令的輸出值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,來源區域覆寫值.yaml 中的 cassandra 區段

      例如:

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. 使用下列指令套用 CassandraDataReplication
      kubectl apply -f datareplication.yaml
  7. 使用下列指令確認重建狀態。
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    結果應如下所示:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. 資料複製完成並經過驗證後,請更新種子主機:
    1. overrides-DATACENTER_NAME.yaml 中移除 multiRegionSeedHost: 10.0.0.11
    2. 重新套用變更,更新 apigee 資料儲存庫 CR:

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. 請透過記錄檔確認重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    以下範例顯示記錄項目:

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

檢查 Cassandra 叢集狀態

下列指令可用於查看叢集設定是否在兩個資料中心中成功。這個指令會檢查兩個區域的 nodetool 狀態。

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

疑難排解

請參閱「Cassandra 資料複製作業失敗」。