文章目录
- 一、前言
- 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