文章目錄
- 一、前言
- 1、概述
- 2、備份方式
- 3、備份流程
- 4、恢復流程
- 二、NFS備份
- 1、注意事項
- 2、服務端配置
- 3、客戶端配置
- 4、備份策略配置
- 三、常用操作
- 四、Q&A
- 1、數據備份任務執行失敗,提示`start log archive backup when not STOP is not supported`
- 1.1、問題說明
- 1.2、解決措施
- 2、數據備份任務執行失敗,提示`data backup pre-check failed, log backup not started`
- 2.1、問題說明
- 2.2、解決措施
- 五、性能調優
- 1、備份性能調優
- 1.1、備份性能分析
- 1.2、備份性能調優
- 1.2.1、網絡配置調整
- - 分析過程
- - 解決措施
- 1.3、備份性能復測
一、前言
1、概述
物理備份與恢復概述
OceanBase集群支持三副本冗余機制,本身已經做了一層數據保護,OceanBase數據庫提供備份恢復功能,用于增強數據庫高可用,如后期出現存儲介質損壞或者用戶誤刪數據等情況導致數據丟失,可通過恢復的方式恢復用戶數據
OceanBase數據庫支持集群級別的物理備份,集群的物理備份指的是該集群中除 sys
租戶以外的其他所有租戶的物理備份,物理備份由基線數據、日志歸檔數據兩種數據組成,因此物理備份由日志歸檔和數據備份兩個功能組合而成:
-
日志歸檔是指日志數據的自動歸檔功能,OBServer 會定期將日志數據歸檔到指定的備份路徑。這個動作是全自動的,不需要外部定期觸發。
日志定期歸檔時間的計算公式如下:
日志的定期歸檔時間 =checkpoint_interval /2
其中,checkpoint_interval
的值可由用戶自行配置,詳細配置操作請參見配置備份參數 -
數據備份指的是備份數據的功能,該功能分為全量備份和增量備份兩種:
全量備份是指備份所有宏塊
增量備份是指備份上一次備份以后新增和修改過的宏塊
2、備份方式
使用S3協議對象存儲OceanBase備份 | 物理備份與恢復概述
目前支持使用NFS
(文件存儲)、OSS
(阿里云對象存儲)、COS
(騰訊云對象存儲)、S3
(兼容S3協議對象存儲,如華為云OBS、谷歌GCS)等備份介質,提供了備份、恢復、管理三大功能
- 官方推薦使用OSS作為備份介質,OSS作為無狀態的對象存儲,比有狀態的NFS4有更高的穩定性,且NFS為保證數據庫數據強一致性需要使用同步模式(禁用系統緩存,NFS性能會更差)
V4.2.1 BP7
以上版本方可支持S3
作為備份介質
3、備份流程
OceanBase支持集群級別和租戶級別的備份操作,且支持手動刪除指定的備份和自動刪除過期備份的功能
備份流程大致如下:
- 當用戶用系統租戶登錄到備份集群以后,需要先用 SQL 發起日志歸檔,等日志歸檔發起完成啟動階段以后,才可以發起基線備份
- 日志歸檔是定期備份到備份目的端的,只需要用戶發起一次
alter system archivelog
,日志備份就會在后臺持續進行。日志歸檔是由每個 PG(Partition Group)的 Leader 負責定期將該 PG 的日志歸檔到備份介質指定的路徑,RS(Root Service)負責定期統計日志歸檔的進度,并更新到內部表。 - 數據備份是需要用戶觸發的,比較常見的場景是周六觸發一次全量備份,周二和周四觸發一次增量備份。當用戶發起數據備份請求時,該請求會首先被轉發到 RS 所在的節點上;RS 會根據當前的租戶和租戶包含的 PG 生成備份數據的任務,然后把備份任務分發到 OBServer 上并行地執行備份任務;OBServer 負責備份 PG 的元信息和宏塊到指定的備份目錄,宏塊按照 PG 為單位進行管理。
備份數據目錄結構示意如下:
datatenant_data_backup_info // 記錄租戶級別基線備份的信息tenant_backup_set_file_info // 比 tenant_data_backup_info 信息更加完整backup_set_1_full_date // 一個全量 Backup Set,后綴以日期結尾,例如:backup_set_1_full_20211014,包含所有數據備份的宏塊信息,是一個單一超大文件backup_set_info // 記錄本次備份single_backup_set_info //記錄本次備份,比 backup_set_info 信息更加完整backup_1 // 1 為 backup_set_idsys_pg_listnormal_pg_listsys_meta_index_file_<task_id>// 系統表的索引,負責根據 pgkey 索引到對應的 PG Meta Filesnormal_meta_index_file_<task_id> // 普通表的索引meta_file_<task_id> // 記錄 Meta 和宏塊列表等信息data // 不區分版本pgkeymajor_data // 基線數據macro_block_1.<sub_task_id> macro_block_index_1macro_block_2.<sub_task_id>macro_block_index_2minor_data // 轉儲數據task_id_1macro_block_1.<sub_task_id>macro_block_index_1task_id_2macro_block_2.<sub_task_id>macro_block_index_2backup_set_2_inc_date // 一個增量 Backup Set,后綴以日期結尾,例如:backup_set_2_inc_20211014backup_set_info // 記錄本次備份single_backup_set_info backup_2sys_pg_listnormal_pg_listsys_meta_index_file_<task_id>normal_meta_index_file_<task_id>meta_file_<task_id>data...clogbackup_piece_info // Piece 相關的信息tenant_clog_backup_info roundid_pieceid_date // 例如:1_1_20211014 single_piece_info archive_keytableid_partition_id // 例如:1100611139403779_0....datatableid // 例如:1100611139403779partition_id // 例如:01 // 數據文件2 ...index tableid // 例如:1100611139403779partition_id // 例如:01 // 索引文件2 ..
4、恢復流程
OceanBase 支持租戶級別的恢復操作,恢復是基于已有數據的備份重建新租戶的過程。用戶只需要一個 alter system restore tenant
命令,就可以完成整個恢復過程。
恢復過程包括租戶系統表和用戶表的Restore
和Recover
過程,Restore
是將恢復需要的基線數據恢復到目標租戶的 OBServer,Recover
是將基線對應的日志恢復到對應 OBServer。
恢復流程大致如下:
1、在目的集群上用 CREATE RESOURCE POOL
命令建立恢復租戶需要的資源池
2、通過ALTER SYSTEM RESTORE TENANT
命令調度租戶恢復任務,對于備份恢復來說,RESTORE TENANT
命令的內部流程如下:
- 創建恢復用的租戶
- 恢復租戶的系統表數據
- 恢復租戶的系統表日志
- 調整恢復租戶的元信息
- 恢復租戶的用戶表數據
- 恢復租戶的用戶表日志
- 恢復掃尾工作
對于單個 PG 來說,恢復的流程就是將 PG 的元信息和宏塊數據拷貝到指定的 OBServer,構建出一個只有基線數據的 PG;然后再把 PG 的日志拷貝到指定的 OBServer,回放到該 PG 的 MemTable 中。這個流程中如果日志的量比較大,可能會觸發轉儲操作。
二、NFS備份
1、注意事項
由于OceanBase數據庫備份需保證數據強一致性,在操作NFS備份過程中,需要注意以下事項
- 添加新的機器后,在啟動 OBServer 前,需要保證新的機器掛載 NFS 成功或者可以備份到其他介質。
- 使用 NFS 環境時,需要保證先掛載 NFS,再開啟備份。如果備份期間 NFS 出現問題,需要先停止數據備份和日志備份,再解決 NFS 的問題
- 在重啟 OBServer 所在的服務器時,需要先啟動 NFS 服務,再啟動 OBServer 服務
- 由于 OceanBase 數據庫備份的并發控制需依賴 NFS4 的文件鎖功能,故在掛載 NFS 時,需使用 NFS 4.1 及以上版本。
- 在使用 NFS 作為備份介質時,必須保證所有 OBServer 都掛載了同一個服務器的 NFS。同時,為保證備份的順利進行,需要使用指定的參數掛載NFS
2、服務端配置
- 配置nfs共享服務,修改
/etc/exports
配置文件,更改/cephnfs/cephfs/backup
目錄所有者和屬組為nfsnobody:nfsnobody
(確保客戶端nfsnobody
對共享目錄有讀寫權限)
sudo yum install nfs-utils
echo '"/cephnfs/cephfs/backup" "*"(rw,sync,all_squash,no_subtree_check)' >> /etc/exports
chown nfsnobody:nfsnobody -R /cephnfs/cephfs/backup/
- 配置nfs參數,修改
/etc/sysconfig/nfs
配置文件,重啟nfs服務 RPCNFSDCOUNT=32
?