多區域部署作業

本主題說明在 GKE、部署於地端的 Anthos GKE、Microsoft® Azure Kubernetes Service (AKS)、Amazon Elastic Kubernetes Service (EKS) 和 RedHat OpenShift 上,Apigee Hybrid 的多區域部署。在先決條件和程序中選取平台。

多區域部署的拓撲包括:

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

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

Apigee Hybrid 多區域部署架構

必要條件

為多個區域設定混合式連線前,請先完成下列必要條件:

GKE

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

      如要進一步瞭解 hostNetwork 的必要性,請參閱下方的「島嶼模式叢集和 hostNetwork」。

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

詳情請參閱 Kubernetes 說明文件。

GKE On-Prem

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

      如要進一步瞭解 hostNetwork 的必要性,請參閱下方的「島嶼模式叢集和 hostNetwork」。

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

詳情請參閱 Kubernetes 說明文件。

AKS

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

      如要進一步瞭解 hostNetwork 的必要性,請參閱下方的「島嶼模式叢集和 hostNetwork」。

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

詳情請參閱 Kubernetes 說明文件。

EKS

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

      如要進一步瞭解 hostNetwork 的必要性,請參閱下方的「島嶼模式叢集和 hostNetwork」。

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

詳情請參閱 Kubernetes 說明文件。

OpenShift

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

      如要進一步瞭解 hostNetwork 的必要性,請參閱下方的「島嶼模式叢集和 hostNetwork」。

    • 在將多區域設定擴展至新區域之前,請先在現有叢集上啟用「hostNetwork」。
    • 啟用 hostNetwork 時,請確保工作節點可以對主機名稱執行正向 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 Pod 之間建立完整網格。

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. 先將 kubectl 環境設為原始叢集,再擷取種子名稱:
    kubectl config use-context original-cluster-name
  2. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    種子主機位址可讓新的區域執行個體在首次啟動時找到原始叢集,瞭解叢集的拓撲。種子主機位址會指定為叢集中的聯絡點。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
  3. 決定要將先前指令傳回的哪個 IP 做為多區域種子主機。
  4. 在資料中心 2 中,於「Manage runtime plane components」(管理執行階段平面元件) 中設定 cassandra.multiRegionSeedHostcassandra.datacenter,其中 multiRegionSeedHost 是上一個指令傳回的 IP 之一:
    cassandra:
      multiRegionSeedHost: seed_host_IP
      datacenter: data_center_name
      rack: rack_name
      hostNetwork: false
      clusterName: cluster_name # must be the same for all regions

    例如:

    cassandra:
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      hostNetwork: false
      clusterName: my-apigee-cluster
  5. 在新的資料中心/區域中安裝 Hybrid 之前,請在 overrides.yaml 中設定與第一個區域相同的 TLS 憑證和憑證。

設定新區域

設定種子主機後,即可設定新區域。

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

  1. 將現有叢集的憑證複製到新叢集。Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:
      kubectl config use-context original-cluster-name
    2. 將目前的命名空間設定匯出至檔案:
      kubectl get namespace 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. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的「namespace」:
      kubectl apply -f apigee-namespace.yaml
    6. 將密鑰匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. 在新區域中安裝混合式服務。請務必確認 overrides-DC_name.yaml 檔案包含在第一個區域中設定的相同 TLS 憑證,如上一節所述。

    執行下列兩項指令,在新區域中安裝混合式服務:

    apigeectl init -f overrides/overrides-DC_name.yaml
    apigeectl apply -f overrides/overrides-DC_name.yaml
  3. 執行下列指令,確認混合式安裝作業是否成功:
    apigeectl check-ready -f overrides_DC_name.yaml
  4. 執行下列指令,驗證 Cassandra 叢集設定。輸出內容應顯示現有和新的資料中心。
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- 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
  5. 在新資料中心的所有 Pod 中設定 Cassandra。
    1. 使用下列指令從叢集取得 apigeeorg
      kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
      

      例如:

      Ex: kubectl get apigeeorg -n apigee -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 -o json | jq .items[].metadata.name 指令輸出的值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,cassandra 區段下的資料中心值來自來源區域覆寫的 overrides.yaml

      例如:

      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
    4. 使用下列指令驗證重建狀態。
      kubectl -n apigee 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
      }
  6. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- 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
  7. 更新種子主機。從 overrides-DC_name.yaml 移除 multiRegionSeedHost: 10.0.0.11,然後重新套用。
    apigeectl apply -f overrides/overrides-DC_name.yaml

檢查 Cassandra 叢集狀態

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

kubectl exec apigee-cassandra-default-0 -n apigee  -- 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. 在原始叢集的 overrides.yaml 檔案中,確認 cassandra:hostNetwork 已設為 true。例如:
    cassandra:
      hostNetwork: true

    如要進一步瞭解何時應設定 hostNetwork: true,請參閱「必要條件」。

  2. 如果 cassandra:hostNetwork 未設為 true,請執行下列操作:
    1. cassandra.hostNetwork 變更為 true
    2. 使用下列指令套用 overrides.yaml 設定檔:
        apigeectl apply -f overrides.yaml --datastore
        
    3. 等待 Cassandra Pod 完成輪替重新啟動。
    4. 使用下列指令確認 Cassandra 叢集是否正常運作:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      確認輸出內容中的所有 Cassandra 節點都處於 UN (Up/Normal) 狀態:

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      確認輸出內容中沒有無法連線的節點。

  3. 先將 kubectl 環境設為原始叢集,再擷取種子名稱:
    kubectl config use-context original-cluster-name
  4. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    種子主機位址可讓新的區域執行個體在首次啟動時找到原始叢集,瞭解叢集的拓撲。種子主機位址會指定為叢集中的聯絡點。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
  5. 決定要將先前指令傳回的哪個 IP 做為多區域種子主機。
  6. 在資料中心 2 中,於覆寫檔案中設定 cassandra.multiRegionSeedHost,其中 multiRegionSeedHost 是先前指令傳回的其中一個 IP:
    cassandra:
      hostNetwork: true
      multiRegionSeedHost: seed_host_IP
      datacenter: data_center_name
      rack: rack_name
      clusterName: cluster_name # must be the same for all regions

    例如:

    cassandra:
      hostNetwork: true
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      clusterName: my-apigee-cluster
  7. 在新的資料中心/區域中安裝 Hybrid 之前,請在 overrides.yaml 中設定與第一個區域相同的 TLS 憑證和憑證。

設定新區域

設定種子主機後,即可設定新區域。

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

  1. 將現有叢集的憑證複製到新叢集。Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:
      kubectl config use-context original-cluster-name
    2. 將目前的命名空間設定匯出至檔案:
      kubectl get namespace 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. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的「namespace」:
      kubectl apply -f apigee-namespace.yaml
    6. 將密鑰匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. 在新區域中安裝混合式服務。請務必確認 overrides-DC_name.yaml 檔案包含在第一個區域中設定的相同 TLS 憑證,如上一節所述。

    執行下列兩項指令,在新區域中安裝混合式服務:

    apigeectl init -f overrides/overrides-DC_name.yaml
    apigeectl apply -f overrides/overrides-DC_name.yaml
  3. 執行下列指令,確認混合式安裝作業是否成功:
    apigeectl check-ready -f overrides_DC_name.yaml
  4. 執行下列指令,驗證 Cassandra 叢集設定。輸出內容應顯示現有和新的資料中心。
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- 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
  5. 在新資料中心的所有 Pod 中設定 Cassandra。
    1. 使用下列指令從叢集取得 apigeeorg
      kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
      

      例如:

      Ex: kubectl get apigeeorg -n apigee -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 -o json | jq .items[].metadata.name 指令輸出的值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,cassandra 區段下的資料中心值來自來源區域覆寫的 overrides.yaml

      例如:

      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
    4. 使用下列指令驗證重建狀態。
      kubectl -n apigee 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
      }
  6. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- 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
  7. 更新種子主機。從 overrides-DC_name.yaml 移除 multiRegionSeedHost: 10.0.0.11,然後重新套用。
    apigeectl apply -f overrides/overrides-DC_name.yaml

檢查 Cassandra 叢集狀態

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

kubectl exec apigee-cassandra-default-0 -n apigee  -- 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 中連線虛擬網路

建立多區域叢集

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

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

設定多區域種子主機

本節說明如何將現有 Cassandra 叢集擴展至新區域。完成這項設定後,新區域就能啟動叢集並加入現有資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就無法互相瞭解。

  1. 在原始叢集的 overrides.yaml 檔案中,確認 cassandra:hostNetwork 已設為 true。例如:
    cassandra:
      hostNetwork: true

    如要進一步瞭解何時應設定 hostNetwork: true,請參閱「必要條件」。

  2. 如果 cassandra:hostNetwork 未設為 true,請執行下列操作:
    1. cassandra.hostNetwork 變更為 true
    2. 使用下列指令套用 overrides.yaml 設定檔:
        apigeectl apply -f overrides.yaml --datastore
        
    3. 等待 Cassandra Pod 完成輪替重新啟動。
    4. 使用下列指令確認 Cassandra 叢集是否正常運作:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      確認輸出內容中的所有 Cassandra 節點都處於 UN (Up/Normal) 狀態:

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      確認輸出內容中沒有無法連線的節點。

  3. 先將 kubectl 環境設為原始叢集,再擷取種子名稱:
    kubectl config use-context original-cluster-name
  4. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    種子主機位址可讓新的區域執行個體在首次啟動時找到原始叢集,瞭解叢集的拓撲。種子主機位址會指定為叢集中的聯絡點。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    apigee-cassandra-default-0  1/1   Running   0   4d17h   120.38.1.9  aks-agentpool-21207753-vmss000000
  5. 決定要將先前指令傳回的哪個 IP 做為多區域種子主機。在本例中,只有單一節點 Cassandra 叢集正在執行,因此種子主機為 120.38.1.9
  6. 在資料中心 2 中,將覆寫檔案複製到新檔案,檔名須包含叢集名稱。例如: overrides_your_cluster_name.yaml
  7. 在資料中心 2 中,於 overrides_your_cluster_name.yaml 中設定 cassandra.multiRegionSeedHostcassandra.datacenter,其中 multiRegionSeedHost 是先前指令傳回的其中一個 IP:
    cassandra:
      multiRegionSeedHost: seed_host_IP
      datacenter: data_center_name
      rack: rack_name
      hostNetwork: true
      clusterName: cluster_name # must be the same for all regions

    例如:

    cassandra:
      multiRegionSeedHost: 120.38.1.9
      datacenter: "centralus"
      rack: "ra-1"
      hostNetwork: truev
  8. 在新的資料中心/區域中安裝 Hybrid 之前,請在 overrides_your_cluster_name.yaml 中設定與第一個區域相同的 TLS 憑證和憑證。

設定新區域

設定種子主機後,即可設定新區域。

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

  1. 將現有叢集的憑證複製到新叢集。Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:
      kubectl config use-context original-cluster-name
    2. 將目前的命名空間設定匯出至檔案:
      kubectl get namespace 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. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的「namespace」:
      kubectl apply -f apigee-namespace.yaml
    6. 將密鑰匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. 在新區域中安裝混合式服務。請務必確認 overrides_your_cluster_name.yaml 檔案包含在第一個區域中設定的相同 TLS 憑證,如上一節所述。

    執行下列兩項指令,在新區域中安裝混合式服務:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. 執行下列指令,確認混合式安裝作業是否成功:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. 執行下列指令,驗證 Cassandra 叢集設定。輸出內容應顯示現有和新的資料中心。
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- 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
  5. 在新資料中心的所有 Pod 中設定 Cassandra。
    1. 使用下列指令從叢集取得 apigeeorg
      kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
      

      例如:

      Ex: kubectl get apigeeorg -n apigee -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 -o json | jq .items[].metadata.name 指令輸出的值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,cassandra 區段下的資料中心值來自來源區域覆寫的 overrides.yaml

      例如:

      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
    4. 使用下列指令驗證重建狀態。
      kubectl -n apigee 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
      }
  6. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- 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
  7. 更新種子主機。從 overrides-DC_name.yaml 移除 multiRegionSeedHost: 10.0.0.11,然後重新套用。
    apigeectl apply -f overrides/overrides-DC_name.yaml

檢查 Cassandra 叢集狀態

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

kubectl exec apigee-cassandra-default-0 -n apigee  -- 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 術語是跨區域 VPC 對等互連

建立多區域叢集

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

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

設定多區域種子主機

本節說明如何將現有 Cassandra 叢集擴展至新區域。完成這項設定後,新區域就能啟動叢集並加入現有資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就無法互相瞭解。

  1. 在原始叢集的 overrides.yaml 檔案中,確認 cassandra:hostNetwork 已設為 true。例如:
    cassandra:
      hostNetwork: true

    如要進一步瞭解何時應設定 hostNetwork: true,請參閱「必要條件」。

  2. 如果 cassandra:hostNetwork 未設為 true,請執行下列操作:
    1. cassandra.hostNetwork 變更為 true
    2. 使用下列指令套用 overrides.yaml 設定檔:
        apigeectl apply -f overrides.yaml --datastore
        
    3. 等待 Cassandra Pod 完成輪替重新啟動。
    4. 使用下列指令確認 Cassandra 叢集是否正常運作:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
        

      確認輸出內容中的所有 Cassandra 節點都處於 UN (Up/Normal) 狀態:

        nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD describecluster
        

      確認輸出內容中沒有無法連線的節點。

  3. 先將 kubectl 環境設為原始叢集,再擷取種子名稱:
    kubectl config use-context original-cluster-name
  4. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    種子主機位址可讓新的區域執行個體在首次啟動時找到原始叢集,瞭解叢集的拓撲。種子主機位址會指定為叢集中的聯絡點。

    kubectl get pods -o wide -n apigee | grep apigee-cassandra
    apigee-cassandra-default-0  1/1   Running   0   4d17h   120.38.1.9  aks-agentpool-21207753-vmss000000
  5. 決定要將先前指令傳回的哪個 IP 做為多區域種子主機。在本例中,只有單一節點 Cassandra 叢集正在執行,因此種子主機為 120.38.1.9
  6. 在資料中心 2 中,將覆寫檔案複製到新檔案,檔名須包含叢集名稱。例如: overrides_your_cluster_name.yaml
  7. 在資料中心 2 中,於 overrides_your_cluster_name.yaml 中設定 cassandra.multiRegionSeedHostcassandra.datacenter,其中 multiRegionSeedHost 是先前指令傳回的其中一個 IP:
    cassandra:
         multiRegionSeedHost: seed_host_IP
         datacenter: data_center_name
         rack: rack_name
         hostNetwork: true
         clusterName: cluster_name # must be the same for all regions

    例如:

    cassandra:
      multiRegionSeedHost: 120.38.1.9
      datacenter: "centralus"
      rack: "ra-1"
      hostNetwork: true
      clusterName: my-apigee-cluster
  8. 在新的資料中心/區域中安裝 Hybrid 之前,請在 overrides_your_cluster_name.yaml 中設定與第一個區域相同的 TLS 憑證和憑證。

設定新區域

設定種子主機後,即可設定新區域。

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

  1. 將現有叢集的憑證複製到新叢集。Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:
      kubectl config use-context original-cluster-name
    2. 將目前的命名空間設定匯出至檔案:
      kubectl get namespace 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. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的「namespace」:
      kubectl apply -f apigee-namespace.yaml
    6. 將密鑰匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. 在新區域中安裝混合式服務。請務必確認 overrides_your_cluster_name.yaml 檔案包含在第一個區域中設定的相同 TLS 憑證,如上一節所述。

    執行下列兩項指令,在新區域中安裝混合式服務:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. 執行下列指令,確認混合式安裝作業是否成功:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. 執行下列指令,驗證 Cassandra 叢集設定。輸出內容應顯示現有和新的資料中心。
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- nodetool -u JMX_user -pw 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
  5. 在新資料中心的所有 Pod 中設定 Cassandra。
    1. 使用下列指令從叢集取得 apigeeorg
      kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
      

      例如:

      Ex: kubectl get apigeeorg -n apigee -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 -o json | jq .items[].metadata.name 指令輸出的值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,cassandra 區段下的資料中心值來自來源區域覆寫的 overrides.yaml

      例如:

      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
    4. 使用下列指令驗證重建狀態。
      kubectl -n apigee 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
      }
  6. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小:
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw 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
  7. 更新種子主機。從 overrides-DC_name.yaml 移除 multiRegionSeedHost: 10.0.0.11,然後重新套用。
    apigeectl apply -f overrides/overrides-DC_name.yaml

檢查 Cassandra 叢集狀態

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

kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw 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          0.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          0.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          0.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

OpenShift

設定多區域種子主機

本節說明如何將現有 Cassandra 叢集擴展至新區域。完成這項設定後,新區域就能啟動叢集並加入現有資料中心。如果沒有這項設定,多區域 Kubernetes 叢集就無法互相瞭解。

  1. 在原始叢集的 overrides.yaml 檔案中,確認 cassandra:hostNetwork 已設為 true。例如:
    cassandra:
      hostNetwork: true

    如要進一步瞭解何時應設定 hostNetwork: true,請參閱「必要條件」。

  2. 如果 cassandra:hostNetwork 未設為 true,請執行下列操作:
    1. cassandra.hostNetwork 變更為 true
    2. 使用下列指令套用 overrides.yaml 設定檔:
        apigeectl apply -f overrides.yaml --datastore
        
    3. 等待 Cassandra Pod 完成輪替重新啟動。
    4. 使用下列指令確認 Cassandra 叢集是否正常運作:

        kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
        
        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
        

      確認輸出內容中的所有 Cassandra 節點都處於 UN (Up/Normal) 狀態:

        nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
        

      確認輸出內容中沒有無法連線的節點。

  3. 先將 kubectl 環境設為原始叢集,再擷取種子名稱:
    kubectl config use-context original-cluster-name
  4. 執行下列 kubectl 指令,找出目前區域中 Cassandra 的種子主機位址。

    種子主機位址可讓新的區域執行個體在首次啟動時找到原始叢集,瞭解叢集的拓撲。種子主機位址會指定為叢集中的聯絡點。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
  5. 選取來源 Cassandra 主機的 IP 位址,做為多區域種子主機。在本範例中,這是執行叢集,種子主機為 10.0.0.11apigee-cassandra-default-0
  6. 在資料中心 2 中,將覆寫檔案複製到新檔案,檔名須包含叢集名稱。例如: overrides_your_cluster_name.yaml
  7. 在資料中心 2 中,於 overrides_your_cluster_name.yaml 中設定 cassandra.multiRegionSeedHostcassandra.datacenter,其中 multiRegionSeedHost 是先前指令傳回的其中一個 IP:
    cassandra:
      hostNetwork: true
      multiRegionSeedHost: seed_host_IP # Cassandra pod IP address from the source region.
      datacenter: data_center_name
      rack: rack_name
      clusterName: cluster_name # must be the same for all regions

    例如:

    cassandra:
      hostNetwork: true
      multiRegionSeedHost: 10.0.0.11
      datacenter: "dc-2"
      rack: "ra-1"
      clusterName: my-apigee-cluster
  8. 在新的資料中心/區域中安裝 Hybrid 之前,請在 overrides_your_cluster_name.yaml 中設定與第一個區域相同的 TLS 憑證和憑證。

設定新區域

設定種子主機後,即可設定新區域。

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

  1. 將現有叢集的憑證複製到新叢集。Cassandra 和其他混合式元件會使用新的 CA 根憑證進行 mTLS。因此,叢集中的憑證必須一致。
    1. 將環境定義設為原始命名空間:
      kubectl config use-context original-cluster-name
    2. 將目前的命名空間設定匯出至檔案:
      kubectl get namespace 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. 將命名空間設定匯入新叢集。如果您在新區域中使用其他命名空間,請務必更新檔案中的「namespace」:
      kubectl apply -f apigee-namespace.yaml
    6. 將密鑰匯入新叢集:

      kubectl -n cert-manager apply -f apigee-ca.yaml
  2. 在新區域中安裝混合式服務。請務必確認 overrides_your_cluster_name.yaml 檔案包含在第一個區域中設定的相同 TLS 憑證,如上一節所述。

    執行下列兩項指令,在新區域中安裝混合式服務:

    apigeectl init -f overrides_your_cluster_name.yaml
    apigeectl apply -f overrides_your_cluster_name.yaml
  3. 執行下列指令,確認混合式安裝作業是否成功:
    apigeectl check-ready -f overrides_your_cluster_name.yaml
  4. 執行下列指令,驗證 Cassandra 叢集設定。輸出內容應顯示現有和新的資料中心。
    kubectl exec apigee-cassandra-default-0 -n apigee  \
      -- 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
  5. 在新資料中心的所有 Pod 中設定 Cassandra。
    1. 使用下列指令從叢集取得 apigeeorg
      kubectl get apigeeorg -n apigee -o json | jq .items[].metadata.name
      

      例如:

      Ex: kubectl get apigeeorg -n apigee -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 -o json | jq .items[].metadata.name 指令輸出的值。例如:rg-hybrid-b7d3b9c
      • SOURCE_REGION 是來源區域,cassandra 區段下的資料中心值來自來源區域覆寫的 overrides.yaml

      例如:

      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
    4. 使用下列指令驗證重建狀態。
      kubectl -n apigee 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
      }
  6. 從記錄檔驗證重建程序。此外,請使用 nodetool status 指令驗證資料大小。
    kubectl logs apigee-cassandra-default-0 -f -n apigee
    kubectl exec apigee-cassandra-default-0 -n apigee  -- 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
  7. 更新種子主機。從 overrides-DC_name.yaml 移除 multiRegionSeedHost: 10.0.0.11,然後重新套用。
    apigeectl apply -f overrides/overrides-DC_name.yaml

檢查 Cassandra 叢集狀態

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

kubectl exec apigee-cassandra-default-0 -n apigee  -- 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 資料複寫失敗」。