【华为云MySQL技术专栏】TaurusDB快照恢复
1. 背景介绍
数据库管理系统定期对数据进行备份,旨在防止因故障或错误导致的数据损坏,确保系统在发生突发事件后可以快速恢复。同时,还便于追踪历史版本,为数据库迁移和升级提供支撑。
评估一个数据库系统的备份与恢复能力,备份时间和恢复时间是两个重要指标。备份时间代表完成整个备份过程所需的时间,较短的备份时间通常会减少对系统性能的影响;恢复时间则指从已备份数据中恢复数据到对外提供正常服务所需的时间,较短的恢复时间意味着较高的业务可用性。
为了确保可靠性,常见的备份方法是通过工具(如MySQL对应的开源Xtrabackup工具)将数据备份到远端存储(如华为OBS等服务)。然而,这种方法在恢复时需要从远端下载数据到本地,因此,备份和恢复的耗时都比较长。
TaurusDB采用计算存储分离的架构,支持快照恢复特性,直接利用存储池进行数据传输,实现快速备份与恢复,大大缩短了用户数据的备份与恢复时间。
2. 原理介绍
TaurusDB提供的备份与恢复功能包括:一级备份、二级备份、快照恢复和远端恢复。
• 一级备份,即快照备份,创建快照完成即为备份完成,耗时秒级;
• 二级备份,即远端备份,只有当备份数据成功传输至远端OBS存储后,才算备份完成,备份时长与数据量强相关;
• 快照恢复,是指直接利用快照备份的数据来进行恢复操作,实现实例恢复;
• 远端恢复,是指从远端OBS存储中下载远端已备份的数据,实现实例恢复。
TaurusDB的快照备份与恢复特性,即为“一级备份+快照恢复”。快照恢复特性依赖于快照备份,通过打快照命令,在存储侧固化出该时间点的存储数据状态。命令执行得很快,通常秒级内完成。打完快照后,该命令执行时刻的数据就已经完成固化。
在打快照时,系统并没有对数据进行复制,而是对数据库实例对象中不同粒度的存储结构及位置信息集合进行记录。当数据需要修改时,系统会将相关数据块保留给快照,直到快照被删除时才进行数据清理。由于这一过程不涉及数据本身的复制,也不需要将数据dump到远端存储OBS,所以即使数据库中存储的数据量很大,快照也是秒级完成。
TaurusDB采用计算存储分离的架构,多个实例可共用同一套存储池。在恢复过程中,首先在原实例中查询历史快照信息,通过快照号获取快照保存的元数据。然后利用元数据获取到打快照时固化的数据,将固化的数据通过存储池直接导入到恢复实例中,并在恢复实例导入时完成多副本同步。整个过程不需要从远端OBS上传和下载数据,不受网络带宽等因素影响,所以速度非常快。
3. 流程解析
为了使用快照恢复,首先需要通过对数据库实例执行打快照操作来进行快照备份。
快照备份整体流程,如图1所示:
图1 快照备份流程
1)管控agent模块创建快照。
2)管控agent调用备份工具(backup_manager)检查快照可用性,备份工具会对该实例关联的所有slice进行快照完成情况核查。
3)如果实例关联的所有slice均完成快照,管控agent返回备份成功,否则返回失败。
在快照备份完成后,快照信息也存储在数据库中。完整的快照元数据会记录到特定的plog中,而描述该plog的元数据信息,会记录到表snapshots的记录中,即列METADATA。
快照备份完成后,在生成的快照信息被删除之前,均可以被用来进行快照恢复。快照恢复整体流程,如2所示:
图2 快照恢复流程
1) 管控agent通过SQL查询snapshots表,获取特定快照的元数据。
2)管控agent下发恢复命令启动备份工具,并将获取到的快照元数据信息提供给备份工具。
3)备份工具backup_manager对agent提供的快照元数据信息进行解析:
• 通过元数据,获取到保存快照元数据的plog的plogid,及其对应的偏移位置信息;
• 通过plogid及偏移位置信息,从plog中读取保存的元数据内容;
• 通过元数据中解析出PWAL、CPR、PMR等ULOG的快照信息,以及Slice的数目和快照信息列表。
4)根据元数据解析出的slice记录全集列表,对列表的每一个slice,做如下处理:
• 创建一个新的slice;
• backup_manager下发快照恢复请求到backup_agent;
• backup_agent对源slice(归属源实例)数据进行读取,并将其导入到恢复实例的新slice中;
• backup_manager周期轮询slice的恢复进度和结果,在确认当前slice恢复完成后,会继续恢复下一个slice。
5)backup_manager根据解析出的ulog快照信息,读取源实例plog pool中的对应ulog,并将其写入到恢复实例的ulog中。
为了提升恢复性能,在对slice进行恢复时,采用了线程池并行处理机制,同时对多个slice进行恢复,这样可以充分地利用资源,减少了恢复时间。
为了进一步提升恢复性能,恢复slice时以plog为粒度,同时在源slice侧将plog数据切割成多个chunk后发送给目标slice;目标slice接收到chunk后,将它们重组合并成完整的plog后再导入,如图3所示。
图3 源slice恢复到目标slice
slice存在多个副本。当向目标slice写入数据时,backup_agent会将slice中的plog同步写入到目标slice的所有副本中。只有当所有副本都成功执行,才会认定该plog的写入操作成功。
此外,一套DFV存储环境还可能出现跨池的场景,即涉及多个disk pool。由于不同disk pool之间不能直接拷贝数据,当存储池中源实例和恢复目标实例处于不同disk pool时,需要借助中间组件backup_transfer进行数据转发,打通源slice和目标slice之间的通信,完成数据的快照恢复,如图4所示。
图 4 源slice恢复到目标slice(跨池)
4. 使用方法
快照恢复依赖一级备份数据,可以通过“设置同区域备份策略”来设置一级备份的相关策略。将“一级备份保留个数”选项,设置为1后,就可以创建一级备份,如图5所示:
图 5 设置一级备份策略
快照恢复的使用方式与远端恢复类似。当快照恢复可用时,页面会显示出“一级备份”,客户点击“恢复”即可。若一级备份可用,则会优先使用该一级备份的数据进行快照恢复,如图6所示:
图 6 设置快照备份策略
5.总结
快照恢复是TaurusDB的一项关键特性,为用户提供一种快速、高效、安全的数据恢复方案。用户可以根据自己的业务需求,对数据进行打快照,再根据已有的历史快照,快速将数据恢复到指定时间点。同时,还可以与二级备份/远端恢复解决方案协同使用,从而制定出更合理的备份与恢复策略,来应付不同的应用场景,实现应用的高可用性。
- 点赞
- 收藏
- 关注作者
评论(0)