本節說明如何使用 ssh 和檔案系統,而非 Google Cloud,設定 Cassandra 資料庫的備份和復原作業。另請參閱:
什麼是使用自訂儲存空間進行 Cassandra 備份與復原?
使用自訂儲存空間備份時,系統會將 Cassandra 資料庫備份到您指定伺服器檔案系統中的壓縮檔。備份作業會按照您在覆寫檔案中指定的時程進行。 與伺服器的連線是透過安全的 SSH。
設定備份 (不使用雲端服務)
下列步驟包含完成特定工作的常見範例,例如建立 SSH 金鑰組。請使用適合安裝作業的方法。
這項程序包含下列部分:
設定伺服器和 SSH
- 為備份作業指定 Linux 或 Unix 伺服器。Apigee Hybrid 執行階段層必須能透過 SSH 連線至這個伺服器。儲存空間必須足以容納備份項目。
- 在伺服器上設定 SSH 伺服器,或確保伺服器已設定安全的 SSH 伺服器。
- 建立 SSH 金鑰組,並將私密金鑰檔案儲存在可從混合式執行階段平面存取的路徑中。您必須為金鑰組使用空白密碼,否則備份作業會失敗。例如:
ssh-keygen -t rsa -b 4096 -C exampleuser@example.comEnter 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]-----+ - 在備份伺服器上建立名為
apigee的使用者帳戶。確認新apigee使用者在/home下有主目錄。 - 在備份伺服器上,於新的
/home/apigee目錄中建立ssh目錄。 - 將公開金鑰 (上一個範例中的
ssh_key.pub) 複製到新/home/apigee/ssh目錄中名為authorized_keys的檔案。例如:cd /home/apigee
mkdir .sshcd .sshvi authorized_keys - 在備份伺服器上,於
/home/apigee/目錄中建立備份目錄。只要apigee使用者有權存取,備份目錄可以是任何目錄。例如:cd /home/apigee
mkdir cassandra-backup - 測試連線。請務必確認 Cassandra Pod 可以透過 SSH 連線至備份伺服器:
- 登入 Cassandra Pod 的殼層。例如:
kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash
其中 APIGEE_CASSANDRA_DEFAULT_0 是 Cassandra Pod 的名稱。將此值變更為要從中連線的 Pod 名稱。
- 使用伺服器 IP 位址,透過 SSH 連線至備份伺服器:
ssh apigee@BACKUP_SERVER_IP
- 登入 Cassandra Pod 的殼層。例如:
設定備份時間表和目的地
您可以在 overrides.yaml 檔案中設定備份作業的排程和目的地。
- 在
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:keyFilePATH_TO_PRIVATE_KEY_FILE
本機檔案系統中安全殼層私密金鑰檔案的路徑 (在建立安全殼層金鑰組的步驟中,該檔案名為
ssh_key)。backup:serverBACKUP_SERVER_IP
備份伺服器的 IP 位址。
backup:storageDirectoryBACKUP_DIRECTORY
備份伺服器上的備份目錄名稱。這必須是
home/apigee內的目錄 (備份目錄在建立備份目錄的步驟中命名為cassandra_backup)。backup:cloudProviderHYBRIDcloudProvider: "HYBRID"屬性為必填欄位。backup:scheduleSCHEDULE
備份開始時間,以標準 crontab 語法指定。預設值:
0 2 * * * - 使用
apigeectl將備份設定套用至叢集的儲存空間範圍:$APIGEECTL_HOME/apigeectl --datastore -f YOUR_OVERRIDES_FILE
其中 YOUR_OVERRIDES_FILE 是指您剛編輯的覆寫檔案路徑。
設定還原
還原作業會從備份位置提取資料,並將資料還原至節點數量相同的新 Cassandra 叢集。系統不會從舊的 Cassandra 叢集擷取任何資料。
下方的還原說明適用於單一區域部署,且備份作業未使用 Google Cloud Storage。如要瞭解其他部署作業,請參閱下列文章:
- 如要瞭解如何使用 Google Cloud Storage 備份單一區域部署作業,請參閱 Cassandra 備份與復原。
- 如要瞭解多區域部署,請參閱「 GKE 和 GKE On-Prem 的多區域部署」。
如要還原 Cassandra 備份,請按照下列步驟操作:
- 在現有 Kubernetes 叢集中建立新命名空間,用於還原混合式執行階段部署作業。請勿使用原始命名空間名稱做為新命名空間的名稱。 請勿使用舊命名空間還原。
-
在根混合式安裝目錄中,建立新的
overrides-restore.yaml檔案。 -
將原始
overrides.yaml檔案中的完整 Cassandra 設定複製到新的overrides-restore.yaml檔案。例如:cp ./overrides.yaml ./overrides-restore.yaml
- 在新
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: "BACKUP_TO_RESTORE" ...
範例
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"
- 在舊命名空間中,對任何 Cassandra 節點執行下列指令,變更
app標籤:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- 建立新的混合式執行階段部署作業。這會建立新的 Cassandra 叢集,並開始將備份資料還原到叢集:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
還原完成後,必須切換流量,才能使用新命名空間中的 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}}' - 流量切換完成後,您可以移除
restore設定,並在overrides-restore.yaml檔案中新增backup設定,重新設定還原叢集的備份。將 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
其中:
| 屬性 | 說明 |
|---|---|
namespace |
YOUR_RESTORE_NAMESPACE 您在步驟 1 中為新的 Cassandra 叢集建立的命名空間名稱。請勿使用原始叢集所用的命名空間。 |
restore:enabled |
還原功能預設為停用。您必須將這個屬性設為 true。 |
restore:keyFile |
PATH_TO_PRIVATE_KEY_FILE 本機檔案系統上安全殼層私密金鑰檔案的路徑 (在建立安全殼層金鑰組的步驟中,該檔案名為 |
restore:server |
BACKUP_SERVER_IP 備份伺服器的 IP 位址。 |
restore:storageDirectory |
BACKUP_DIRECTORY 備份伺服器上的備份目錄名稱。
這必須是 |
restore:cloudProvider |
|
restore:snapshotTimestamp |
BACKUP_TO_RESTORE 要還原的特定備份,以標準 crontab 語法指定 (不允許使用萬用字元)。 |