輕鬆整合系列二:如何在 KubeBlocks 中建立備份並恢復?以 Oracle MySQL 為例
本文以 Oracle MySQL 為例,介紹如何在 KubeBlocks 中建立備份並恢復。
根據不同的分類方式,我們可以將備份分為多種型別。從方式上,可以分為卷快照備份和檔案備份;從內容上,可以分為資料備份和日誌備份;從量上,可分為全量備份和增量備份;從時間上,可以分為定時備份和按需備份等等。
本文將介紹如何在 KubeBlocks 上實現最常見的全量快照備份和檔案備份。
前提條件
-
瞭解 K8s 基本概念,例如 Pod、PVC、PV、VolumeSnapshot 等
-
完成 Tutorial 1
-
瞭解 KubeBlocks 中備份相關的常見概念
Table 1. Terminology
Name | Description | Scope |
---|---|---|
Backup | 備份物件:備份物件的實體。 | Namespace |
BackupPolicy | 備份策略:BackupPolicy 定義了各種備份型別的相關策略, 比如排程、備份保留時間、使用哪種備份工具。 | Namespace |
BackupTool | 備份工具:BackupTool 是 KB 中備份工具的載體,每個 BackupTool 都應該實現對應備份工具的備份邏輯和恢復邏輯。 | Cluster |
BackupPolicyTemplate | 備份策略模版:BackupPolicyTemplate 是備份跟 ClusterDefinition 結合的橋樑。當建立 Cluster 的時候,KubeBlocks 會根據 BackupPolicyTemplate 自動為每個 Cluster 物件生成一個預設的備份策略。 | Cluster |
Table 1. 展示了 KubeBlocks 中備份相關的常見概念,之後我們會透過示例說明它們的作用和使用方法。
配置環境
首先,明確兩個前提:
-
快照備份依賴 Kubernetes 的卷快照能力。
-
檔案備份依賴各個資料庫引擎的備份工具。
1. 安裝CSI Driver
因為卷快照只支援 CSI Driver,確保你的 Kubernetes 已經正確配置。 如果在本地環境,你可以透過 KubeBlocks Addon 功能快速安裝 csi-host-driver:
kbcli addon enable csi-hostpath-driver
如果是雲環境, 需要根據各個雲環境配置相應的 CSI Driver。
2. 將該 storeclass 設定為預設值,方便後續建立 cluster
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-hostpath-sc (default) hostpath.csi.k8s.io Delete WaitForFirstConsumer true 35s
指定卷型別
在 ClusterDefinition 中指定卷型別 [必須配置]。
componentDefs:
- name: mysql-compdef
characterType: mysql
workloadType: Stateful
service:
ports:
- name: mysql
port: 3306
targetPort: mysql
volumeTypes:
- name: data
type: data
volumeTypes
用於說明卷型別和卷名稱。 卷型別(volumeTypes.type)分為兩種:
-
Data: 資料資訊
-
Log: 日誌資訊
KubeBlocks 支援對資料和日誌的不同備份方式。在這裡,我們只配置了資料卷的資訊。
新增備份配置
我們需要準備兩個檔案
BackupPolicyTemplate
和
BackupTool
。
BackupPolicy Template
這是備份策略的模版,主要描述:
-
為 Cluster 的哪個元件備份
-
是否定時備份
-
快照備份怎麼設定
-
檔案備份怎麼設定
apiVersion: apps.kubeblocks.io/v1alpha1
kind: BackupPolicyTemplate
metadata:
name: oracle-mysql-backup-policy-template
labels:
clusterdefinition.kubeblocks.io/name: oracle-mysql # 透過 label 指定作用域,必須填
spec:
clusterDefinitionRef: oracle-mysql # 指定作用域,是哪個 ClusterDef 生成的叢集
backupPolicies:
- componentDefRef: mysql-compdef # 指定作用域,是哪一個元件相關的
schedule: # schedule 用於指定定時備份時間和啟動情況
snapshot:
enable: true # 啟動定時快照備份
cronExpression: "0 18 * * *"
datafile: # 禁用定時檔案備份
enable: false
cronExpression: "0 18 * * *"
snapshot: # 快照備份,預設保留最新的 5 個版本
backupsHistoryLimit: 5
datafile: # 資料檔案備份,依賴備份工具
backupToolName: oracle-mysql-xtrabackup
如果啟用了定時任務,KubeBlocks 會在後臺建立一個 CronJob。
當一個新的叢集建立後,會透過
clusterdefinition.kubeblocks.io/name
標籤來查詢對應的 template 名,並建立相應的 BackupPolicy。
如果你成功新增了 BackupPolicyTemplate,但是新建的 Cluster 沒有預設的 BackupPolicy,請檢查:
ClusterDefinionRef 是否正確
BackupPolicyTempte 的 lable 是否正確
是否有多個關聯的 BackupPolicyTemplate
如果是,需要透過annotation標記其中一個為預設模板
annotations: dataprotection.kubeblocks.io/is-default-policy-template:"true"
BackupTool
描述備份工具的具體執行邏輯,主要服務於檔案備份(datafile),包括:
-
備份工具 image
-
backup 的指令碼
-
restore 的指令碼
apiVersion: dataprotection.kubeblocks.io/v1alpha1
kind: BackupTool
metadata:
name: oracle-mysql-xtrabackup
labels:
spec:
image: docker.io/perconalab/percona-xtrabackup:8.0.32 #透過xtrabackup備份
env: # 注入依賴的環境變數名稱
- name: DATA_DIR
value: /var/lib/mysql
physical:
restoreCommands: # restore 命令
- sh
- -c
...
backupCommands: # backup 命令
- sh
- -c
...
BackupTool
的配置和備份工具強相關。
比如我們這裡使用 Percona Xtrabackup 工具備份,我們需要在
backupCommand
和
restoreCommands
中填寫指令碼。
BackupTool
主要是為檔案備份服務。如果你只需要快照備份,不需要檔案備份,不需要配置BackupTool
。
備份/還原叢集
一切就緒,我們來試試如何備份和還原一個叢集。
1. 建立叢集
helm install mysql ./path-to-your-helm-chart/oracle-mysql
kbcli cluster create mycluster --cluster-definition oracle-mysql
因為我們新增了
BackupPolicyTemplate
,叢集建立後,KubeBlocks 會發現為該叢集建立了
BackupPolicy
,可用一下命令檢視:
kbcli cluster list-backup-policy mycluster
2. 快照備份
kbcli cluster backup mycluster --type snapshot
type
指定了備份型別,是 Snapshot 還是 datafile。
如果有多個備份策略,可以透過
--policy
flag 指定。
3. 檔案備份
KubeBlocks 支援備份到本地和雲上物件儲存。這裡展示如何備份到本地的流程。
(1)修改 backuppolicy,指定 pvc 名稱
如下 line 37,你需要指定備份 pvc 的名稱。
32 spec:
33 datafile:
34 backupToolName: oracle-mysql-xtrabackup
35 backupsHistoryLimit: 7
36 persistentVolumeClaim:
37 name: mycluster-backup-pvc
38 createPolicy: IfNotPresent
39 initCapacity: 20Gi
(2)執行備份命令, 將 --type 設定為 datafile
kbcli cluster backup mycluster --type datafile
4. 從備份建立叢集
(1)先檢視備份
kbcli cluster list-backups
(2)選擇一個備份,透過備份建立叢集
kbcli cluster restore <clusterName> --backup <backup-name>
很快一個新的叢集就建立出來了。
⚠️ 需要注意的是,某些資料庫只有在第一次初始化的時候才建立 root 賬號和密碼。
因此我們透過備份還原出來的資料庫叢集,雖然在流程上建立了新的 root 賬號和密碼,但是並沒有生效,還需要透過原叢集的 root 賬號和密碼登入。
總結
本文透過一個簡短的示例展示了 KubeBlocks 中備份策略的配置。
希望能幫助大家對 KubeBlocks 的備份&還原功能有一個基本的瞭解。
Appendix
A.1 叢集資料保護策略
KubeBlocks 對有狀態的叢集提供了資料保護策略,不同策略提供了不同的資料方式。
可以試一下下列場景:
-
如果我們透過
kbcli cluster delete
刪除了叢集,我們的備份還在嗎? -
如果把 cluster 的
terminationPolicy
改為WipeOut
,再刪除,備份還在嗎? -
如果把 cluster 的
terminationPolicy
改為DoNotTerminate
,再刪除,會發生什麼?
A.2 檢視備份資訊
在 Section 4,我們透過 backup 子命令建立備份。
kbcli cluster backup mycluster --type snapshot
我們會看到新生成了一個備份物件,並可以透過
describe-backup
子命令檢視更多資訊:
kbcli cluster describe-backup <your-back-up-name>
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70035809/viewspace-3001737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕鬆整合系列三:如何在 KubeBlocks 中配置引數模板|以 Oracle MySQL 為例BloCOracleMySql
- 輕鬆整合系列一:如何向 KubeBlocks 新增新的資料庫型別?以 Oracle MySQL 為例BloC資料庫型別OracleMySql
- Mysql 備份與恢復 二MySql
- Oracle 11G 備份與恢復 使用RMAN建立備份集舉例Oracle
- MySQL增量備份與恢復例項MySql
- ORACLE備份&恢復案例二(轉)Oracle
- Oracle備份與恢復系列 (二)停機一致性備份Oracle
- MySQL入門--備份與恢復(二)MySql
- MySQL備份恢復第二篇MySql
- docker 中 MySQL 備份及恢復DockerMySql
- 備份&恢復系列之二:在linux中對oracle進行熱備份的指令碼!LinuxOracle指令碼
- Mysql備份恢復MySql
- mysql 備份恢復MySql
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- 【MySQL】MySQL備份和恢復MySql
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- MySQL備份與恢復MySql
- Mysql備份和恢復MySql
- MySQL 備份與恢復MySql
- Oracle 備份恢復概念Oracle
- oracle備份恢復PPTOracle
- Oracle 備份和恢復Oracle
- ORACLE備份&恢復案例Oracle
- Mysql備份與恢復(1)---物理備份MySql
- 備份&恢復系列之三:在linux中對oracle用rman指令碼備份!LinuxOracle指令碼
- 備份與恢復系列 十一 控制檔案的備份與恢復
- Oracle 11G 備份與恢復 使用RMAN建立映象拷貝舉例Oracle
- SqlServer備份和恢復(二)SQLServer
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- mysql innobackupex增量備份恢復MySql
- MySql邏輯備份恢復MySql
- Mysql的備份與恢復MySql
- mysql備份恢復測試MySql
- MySQL 備份和恢復 一MySql
- MySQL 非常規恢復與物理備份恢復MySql
- Mysql備份與恢復(2)---邏輯備份MySql
- Oracle備份與恢復系列(三)alter tablspace begin backupOracle
- 備份與恢復系列 七 續 catalog中的備份指令碼指令碼