不使用 Google Cloud 進行備份與復原

本節將說明如何使用 ssh 和檔案系統,而非 Google Cloud,設定 Cassandra 資料庫的備份和復原作業。另請參閱:

什麼是 Cassandra 備份和復原功能 (不含 Cloud 服務)

不使用 Cloud 服務的備份功能會將 Cassandra 資料庫的備份儲存至您指定伺服器的檔案系統中,並壓縮成檔案。備份作業會依據您在覆寫檔案中指定的時程進行。連線至伺服器的方式是透過安全的 SSH。

不使用 Cloud 服務設定備份

以下步驟包含完成特定工作 (例如建立 SSH 金鑰組) 的常見範例。請使用適合安裝方式的方法。

這項程序包含以下部分:

設定伺服器和 SSH

  1. 指定 Linux 或 Unix 伺服器用於備份。您必須透過 SSH 從 Apigee 混合式執行階段層存取這部伺服器。必須有足夠的儲存空間來備份資料。
  2. 在伺服器上設定 SSH 伺服器,或確保已設定安全的 SSH 伺服器。
  3. 建立安全殼層金鑰組,並將私密金鑰檔案儲存在可透過混合式執行階段平面存取的路徑中。您必須為金鑰組使用空白密碼,否則備份作業會失敗。例如:
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+
  4. 在備份伺服器上建立名為 apigee 的使用者帳戶。確認新的 apigee 使用者在 /home 下有主目錄。
  5. 在備份伺服器上,在新 /home/apigee 目錄中建立 ssh 目錄。
  6. 將公開金鑰 (上例中的 ssh_key.pub) 複製到新 /home/apigee/ssh 目錄中名為 authorized_keys 的檔案中。例如:
    cd /home/apigee
    mkdir .ssh
    cd .ssh
    vi authorized_keys
  7. 在備份伺服器上,在 /home/apigee/ 目錄中建立備份目錄。只要 apigee 使用者有存取權,備份目錄可以是任何目錄。例如:
    cd /home/apigee
    mkdir cassandra-backup
  8. 測試連線。您必須確保 Cassandra 的 pod 可以使用 SSH 連線至備份伺服器:
    1. 登入 Cassandra pod 的殼層。例如:
      kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash

      其中 APIGEE_CASSANDRA_DEFAULT_0 是 Cassandra Pod 的名稱。將此值變更為要連線的 Pod 名稱。

    2. 使用伺服器 IP 位址,透過 SSH 連線至備援伺服器:
      ssh apigee@BACKUP_SERVER_IP

設定備份時間表和目的地

您可以在 overrides.yaml 檔案中設定備份的時間表和目的地。

  1. overrides.yaml 檔案中新增下列參數:

    參數

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    範例

    cassandra:
      backup:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    其中:

    屬性 說明
    backup:enabled 備份功能預設為停用。您必須將這個屬性設為 true
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    本機檔案系統中安全殼層私密金鑰檔案的路徑 (在建立安全殼層金鑰組的步驟中命名為 ssh_key)。

    backup:server

    BACKUP_SERVER_IP

    備份伺服器的 IP 位址。

    backup:storageDirectory

    BACKUP_DIRECTORY

    備份伺服器上的備份目錄名稱。這個目錄必須位於 home/apigee 中 (在建立備份目錄的步驟中,備份目錄的名稱為 cassandra_backup)。

    backup:cloudProvider

    HYBRID

    必須使用 cloudProvider: "HYBRID" 屬性。

    backup:schedule

    SCHEDULE

    備份作業開始的時間,以 標準 crontab 語法指定。預設值:0 2 * * *

  2. 使用 apigeectl 將備份設定套用至叢集的儲存空間範圍:
    $APIGEECTL_HOME/apigeectl --datastore -f YOUR_OVERRIDES_FILE

    其中 YOUR_OVERRIDES_FILE 是指您剛剛編輯的覆寫檔案路徑。

設定還原

還原作業會從備份位置取得資料,並將資料還原至含有相同節點數量的新 Cassandra 叢集。系統不會從舊 Cassandra 叢集擷取任何資料。

以下還原操作說明適用於未使用 Google Cloud Storage 備份的單一區域部署。如需其他部署作業,請參閱以下內容:

如要還原 Cassandra 備份,請按照下列步驟操作:

  1. 在現有 Kubernetes 叢集中建立新命名空間,用於還原混合式即時應用程式部署。請勿將原始命名空間名稱用於新命名空間。 請勿使用舊命名空間還原。
  2. 在根混合安裝目錄中,建立新的 overrides-restore.yaml 檔案。
  3. 將完整的 Cassandra 設定從原始 overrides.yaml 檔案複製到新的 overrides-restore.yaml 檔案中。例如:
    cp ./overrides.yaml ./overrides-restore.yaml
    
  4. 在新的 overrides-restore.yaml 檔案中加入命名空間元素。

    參數

    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      restore:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID"  # required verbatim "HYBRID" (all caps)
        snapshotTimestamp: "TIMESTAMP"
      ...

    範例

    namespace: cassandra-restore
    cassandra:
      restore:
        enabled: true
        keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        snapshotTimestamp: "20201001183903"
  5. 其中:

    屬性 說明
    namespace

    YOUR_RESTORE_NAMESPACE

    您在步驟 1 為新 Cassandra 叢集建立的新命名空間名稱。請勿使用原始叢集的命名空間。

    restore:enabled 還原功能預設為停用。您必須將這個屬性設為 true
    restore:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    本機檔案系統中安全殼層私密金鑰檔案的路徑 (在建立安全殼層金鑰組的步驟中,這個檔案名為 ssh_key)。

    restore:server

    BACKUP_SERVER_IP

    備份伺服器的 IP 位址。

    restore:storageDirectory

    BACKUP_DIRECTORY

    備份伺服器上的備份目錄名稱。這個目錄必須位於 home/apigee 中 (在建立備份目錄的步驟中,備份目錄的名稱為 cassandra_backup)。

    restore:cloudProvider

    HYBRID

    必須使用 cloudProvider: "HYBRID" 屬性。

    restore:snapshotTimestamp

    TIMESTAMP

    要還原的備份快照時間戳記。如要查看可使用的時間戳記,請前往 dbStorageBucket,查看值區中的檔案。每個檔案名稱都包含時間戳記值,例如:

    backup_20210203213003_apigee-cassandra-default-0.tgz

    其中 20210203213003 是您要還原當時建立的備份時,會使用的 snapshotTimestamp 值。

  6. 執行下列指令,變更舊命名空間中任何 Cassandra 節點的 app 標籤:
    kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
    
  7. 建立新的混合式執行階段部署作業。這會建立新的 Cassandra 叢集,並開始將備份資料還原至叢集:
    ./apigeectl init  -f ../overrides-restore.yaml
    
    ./apigeectl apply  -f ../overrides-restore.yaml
    
  8. 還原作業完成後,流量必須切換為使用新命名空間中的 Cassandra 叢集。執行下列指令來切換流量:

    kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
    
    kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
    
  9. 流量切換完成後,您可以移除 restore 設定,並將 backup 設定新增至 overrides-restore.yaml 檔案,藉此重新設定還原叢集中的備份。將 YOUR_RESTORE_NAMESPACE 替換為在步驟 1 中建立的新命名空間名稱。
    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
      backup:
        enabled: true
        serviceAccountPath: SA_JSON_FILE_PATH
        dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
        schedule: BACKUP_SCHEDULE_CODE
      ...

    然後使用下列指令套用 backup 設定:

    ./apigeectl apply  -f ../overrides-restore.yaml