「分布式技术专题」故障恢复

由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。

原理

随着计算机网络技术的日臻成熟,分布式数据库以其较高的访问局部性能逐渐成为关系企业的主流数据库系统。其中恢复子系统是分布式数据库系统的关键性组成部分,其在数据库的故障恢复中发挥着至关重要的作用。在分布式数据库特点分析的基础上,对数据库故障恢复技术进行了剖析,基于两阶段及三阶段协议的数据库恢复方法,从而提高了数据库系统的可用性。

实现方式

故障恢复协议

分布式数据库系统中的事务需要跨结点执行,因此回复故障时需要故障恢复协议协调不同子事物之间的关系,以保证分布在不同节点上子事务进行相同的卷回或提交操作。当前分布式数据库系统恢复协议包括两阶段和三阶段提交协议两种,主要介绍两阶段提交协议。

两阶段提交协议的要点:

允许参与者单方面撤销事务,直到做出肯定性建议;
一旦参与者确定了提交或者撤销建议,不能再更改;
当参与者处于就绪状态,她可根据协调者发出的消息的种类,转换为相应的提交或者撤销状态;
协调者依据全局提交规则做出全局终结决定;
在发生故障的情况下,协调者和参与者可能会进入互相等待的状态,一般采用定时器来解决这种问题。

故障转移协议

故障转移协议使用以解决分区服务器节点故障后,数据分区转移导致数据本地化率降低的问题。为实现上述目的,Hubble的方案包括一种基于分布式集群的数据处理方法。

处理方法简介:

同一个数据分区下的所有数据块的各个备份数据中,以数据分区为单位,第一个备份数据存储在所在的数据节点内,其他各备份数据分别存储在其他数据节点中数据分区最少的两个数据节点内,分别称为第一备份节点和第二备份节点;当数据分区服务器发生宕机或不提供服务时,转移数据分区到第一备份节点和第二备份节点中数据分区较少的数据节点内。
首先,除了第一个备份数据存储在所在的数据节点内,其他各备份数据分别存储在其他数据节点中数据分区最少的两个数据节点内,把数据分区中各备份数据完整不发散地对应存储在不同的数据节点上,能够在发生故障转移之后各节点的数据负载尽量均衡。
并且,当数据分区服务器发生宕机或不提供服务时,转移数据分区到第一备份节点和第二备份节点中数据分区较少的数据节点内,即选择其中一个数据分区较少的节点作为迁移目标,保证迁移之后本地化率仍然为1,在发生节点故障导致分区转移后,为转移后的分区提供服务的分区服务器仍从本地获取数据,而不从通过网络从其他节点获取数据,实现数据分区不通过网络仍能访问数据,提高分区服务器节点故障后的分布式数据库的访问效率,解决了分布式数据库除了主压缩方法以外缺乏提高本地化率手段的问题。
在数据分区转移之后,在没有当前数据分区备份数据的各数据节点中找到数据分区最少的数据节点,作为补全目标节点,以数据分区为单位将当前数据分区的所有数据块的备份数据存储到所述补全目标节点内。 如果在其他数据节点中找不到数据分区最少的两个数据节点,那么,在其他数据节点中随机选择两个数据节点。

具体实施方式

通常情况下,各数据块具有三个备份数据,因此,本实施例以三个备份数据为例。其中,副本是指备份数据文件,首个副本指第一个备份数据,第二个副本指第二个备份数据,第三个副本指第三个备份数据。 在底层分布式文件系统存储上,根据分布式数据库的实际需求,重新定义了一种新的块备份规则:同一个数据分区下的所有数据块的三份备份数据以数据分区为单位完整不发散地存储到三个数据节点上。 所以,同一个数据分区下的所有数据块的各个备份数据中,以数据分区为单位,第一个备份数据存储在该数据分区所在的数据节点内。除了该数据分区所在的数据节点的其他数据节点中,找到数据分区最少的两个数据节点,将这两个数据节点称为第一备份节点和第二备份节点,那么,其他各备份数据,即第二个备份数据和第三个备份数据分别存储在第一备份节点和第二备份节点内。
以数据分区为单位的含义为:同属于一个数据分区的所有的数据块的第一个备份数据作为一个整体,存储在该数据分区所在的数据节点内;同属于一个数据分区的所有的数据块的第二个备份数据和第三个备份数据也分别作为一个整体,分别存储在第一备份节点和第二备份节点内。另外,如果在其他数据节点中找不到数据分区最少的两个数据节点,那么,只有在这些其他数据节点中随机选择两个数据节点作为第一备份节点和第二备份节点。 因此,分布式文件系统上的数据的三个备份数据存储到所有数据节点中数据分区较少的节点上,在发生故障转移之后各数据节点的数据负载能够尽量均衡。 当数据分区服务器发生宕机或不提供服务时,在其他两个完整备份的节点中,即在第一备份节点和第二备份节点中选择一个数据分区较少的数据节点,作为迁移目标。转移数据分区到第一备份节点和第二备份节点中数据分区较少的数据节点内。 由于第一备份节点和第二备份节点中数据分区较少的数据节点上保存有完整的数据分区文件,则本地化率保持为1,因此,这种处理方式能够保证迁移之后本地化率仍然为1,实现数据分区不通过网络仍能访问数据,提高数据访问效率,解决了分布式数据库除了主压缩方法以外缺乏提高本地化率手段的问题。 进一步地,在数据分区转移之后,在没有当前数据分区备份数据的各数据节点中找到数据分区最少的数据节点,作为补全目标节点,以数据分区为单位将当前数据分区的所有数据块的备份数据存储到补全目标节点内。
上述过程为损失数据块补全的过程,所补全的块的备份以数据分区为单位完整的存储在所选择的补全目标节点上。

数据恢复

事务日志

事务日志是一个与数据库文件分开的文件。它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式的变化。事务日志还称作前滚日志或重做日志。事务日志是备份和恢复的重要组件。 针对数据库改变所做的记录,记录对数据库的任何操作,将记录结果保存在独立的文件中。建立日志文件,备份副本+日志文件综合起来才能有效的恢复数据库。并遵循“先写日志文件,然后再写数据库的修改”。

基于检查点的故障恢复技术

由于事务所具有的原子性,使得事务一旦出现故障就必须从头开始执行,因而也存在许多缺点。比如,一个事务是一个长时事务,那么出现事务故障时,重新启动事务执行会造成许多重复和浪费;再比如,如果不是由于系统内部的原因引起的故障,系统重启后应该可以从中断处继续执行,这样才能提高恢复效率。 为此,一般采用检查点方法,其思想是;在某一时刻将驻留在内存中的数据写到数据库,避免系统停机等故障造成的损失,以利于事物的恢复执行。 在数据库中,检查点分为两种:系统检查点和事务检查点,系统周期检查的时刻称为系统检查点。事务检查点指用户可以在事务中设置检查点,要求系统记录事务的状态。 由于检查点记录内容繁复,系统在记录当前检查点记录时,一般要覆盖上一检查点记录,以避免大量检查点记录造成的空间浪费。一旦系统需要恢复数据库状态,就可以根据最新的检查点信息,从检查点时刻开始执行,而不需要从头开始那些被中断的事务。 由于在检查点外要进行频繁的记录操作,过多的设立检查点意味着增加更多的系统开销,故应权衡利弊,选择最佳的检查点区间。检查点记录的信息一般包括:所有活动事务;每个事务的最近日志记录的地址;在重新启动事务时,获得最近检查点记录的地址,从日志中找到该检查点记录的内容,通过日志进行查找,就能决定哪些事务应重做,哪些事务应撤销。这种方法需要定期或不定期地建立检查点,保存数据库状态。

优势与劣势

优势

  • 唯一可以从事务日志中清除旧事务的策略。
  • 备份非常快。
  • 是唯一提供时间点恢复功能的备份和恢复策略。

劣势

恢复过程比较慢。

面临挑战

由于造成数据库故障原因较多,要应对多种原因的故障容错,涉及的技术设计比较复杂,需要一个长期不断完善的过程。

以上为故障恢复,「分布式技术专题」是国产数据库hubble团队精心整编,专题会持续更新,欢迎大家保持关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值