【OceanBase相关】02-OceanBase数据库NFS备份实践

文章目录

    • 一、前言
      • 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支持集群级别租户级别的备份操作,且支持手动删除指定的备份和自动删除过期备份的功能

【OceanBase相关】02-OceanBase数据库NFS备份实践_第1张图片

备份流程大致如下:

  • 当用户用系统租户登录到备份集群以后,需要先用 SQL 发起日志归档,等日志归档发起完成启动阶段以后,才可以发起基线备份
  • 日志归档是定期备份到备份目的端的,只需要用户发起一次alter system archivelog,日志备份就会在后台持续进行。日志归档是由每个 PG(Partition Group)的 Leader 负责定期将该 PG 的日志归档到备份介质指定的路径,RS(Root Service)负责定期统计日志归档的进度,并更新到内部表。
  • 数据备份是需要用户触发的,比较常见的场景是周六触发一次全量备份,周二和周四触发一次增量备份。当用户发起数据备份请求时,该请求会首先被转发到 RS 所在的节点上;RS 会根据当前的租户和租户包含的 PG 生成备份数据的任务,然后把备份任务分发到 OBServer 上并行地执行备份任务;OBServer 负责备份 PG 的元信息和宏块到指定的备份目录,宏块按照 PG 为单位进行管理。

备份数据目录结构示意如下:

data
  tenant_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_id
      sys_pg_list
      normal_pg_list
      sys_meta_index_file_// 系统表的索引,负责根据 pgkey 索引到对应的 PG Meta Files
      normal_meta_index_file_ // 普通表的索引
      meta_file_ // 记录 Meta 和宏块列表等信息
    
    data // 不区分版本
      pgkey
        major_data // 基线数据
          macro_block_1.   
          macro_block_index_1
          macro_block_2.
          macro_block_index_2
        minor_data // 转储数据
          task_id_1
            macro_block_1.
            macro_block_index_1
          task_id_2
            macro_block_2.
            macro_block_index_2
          
  backup_set_2_inc_date // 一个增量 Backup Set,后缀以日期结尾,例如:backup_set_2_inc_20211014
    backup_set_info // 记录本次备份
    single_backup_set_info 
    backup_2
      sys_pg_list
      normal_pg_list
      sys_meta_index_file_
      normal_meta_index_file_
      meta_file_
    data
      ...
    
clog
  backup_piece_info        // Piece 相关的信息
  tenant_clog_backup_info 
  roundid_pieceid_date   // 例如:1_1_20211014 
    single_piece_info    
    archive_key
      tableid_partition_id  // 例如:1100611139403779_0
      ....
    data
      tableid               // 例如:1100611139403779
        partition_id        // 例如:0
          1                 // 数据文件
          2             
          ...
    index 
      tableid               // 例如:1100611139403779
        partition_id        // 例如:0
          1                 // 索引文件
          2          
          ..

4、恢复流程

OceanBase 支持租户级别的恢复操作,恢复是基于已有数据的备份重建新租户的过程。用户只需要一个 alter system restore tenant 命令,就可以完成整个恢复过程。
恢复过程包括租户系统表和用户表的RestoreRecover过程,Restore是将恢复需要的基线数据恢复到目标租户的 OBServer,Recover是将基线对应的日志恢复到对应 OBServer。

【OceanBase相关】02-OceanBase数据库NFS备份实践_第2张图片

恢复流程大致如下:
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

你可能感兴趣的:(数据库相关,数据库,oceanbase)