单机存储系统中的故障恢复

存储 存储软件
本文中介绍的故障恢复主要是只单机存储系统中的故障恢复,就是只有一台电脑,与之相对的是分布式存储系统,暂且不谈。

 一、故障与恢复

本文中介绍的故障恢复主要是只单机存储系统中的故障恢复,就是只有一台电脑,与之相对的是分布式存储系统,暂且不谈。

所谓故障,就是指电脑中途突然挂掉,死机,断电等等。

所谓恢复,主要是恢复内存中的数据,而不是硬盘上的,因为硬盘上的数据是持久化的,而内存中的数据是易失的。恢复主要通过日志来进行恢复。

[[231101]]

二、日志

日志主要分为两种类型。undo日志和redo日志。日志记录的最小单位是事务,因为事务是原子性的,一个事务中可能会包含多个操作,一个事务中的操作要么全部执行成功,要不全部执行失败。对于每个事务,都会记录日志。undo日志记录的是事务更改前的状态,而redo日志记录的是事务更改后的状态。

举个例子:X最初的值是5,你要在一个事务里将X的值更改为10。那么undo日志会记录事务修改前的状态<X,5>,而redo日志会记录事务更改之后的状态,<X,10>。

操作系统会在内存中执行事务,并且将内存中的数据定期刷到磁盘中,从而实现将随机写转化为顺序写。

三、redo日志

重点讲一下redo日志。它记录的是事务修改后的状态。redo日志记录的顺序是这样的:

将redo日志以追加的方式写到磁盘的日志文件中

将redo日志记录的操作在内存中进行真正的执行

返回操作成功或者失败。

需要注意的点,是对于redo日志来说,是要先将日志写到磁盘中,才能去内存中执行修改。这个顺序不能颠倒。当电脑故障的时候,内存中的东西,比如X的值会丢失,但是X得值在日志中是有记录的,日志又是被写到磁盘上的,断电不会丢失,所以可以通过读取redo日志成功找回X的值,将其在内存中进行恢复。

四、redo操作的优化

我们来看一下redo操作,对于每一个事务,当事务在内存中被真正执行之前,都要先往磁盘里写redo日志,但是,写磁盘这个行为代价是很高的,并且如果同时有大量的事务要执行,每次都要写磁盘,那么会带来较差的性能。

这里就要分情况了,对于一致性要求高的应用,应该保证每一个事务开始前,redo日志立刻刷入磁盘。但是对于一致性要求不高的应用,则可以先将redo日志在内存的缓冲区中先进行缓存,等到一定的时间(如10ms)或者一定的大小(512KB)之后再定期刷入磁盘,这种优化方式被称为成组提交,这样就会提高系统吞吐量。但是这样做的缺点,是如果发生故障,被缓存在内存中的一些redo日志也会丢失,所以可能会丢失部分操作。另外,会牺牲写事务的时延,因为提交的写事务并不是立刻执行,要先等足够的redo日志被刷到磁盘才会开始执行。

五、checkpoint 检查点

除了内存中缓存的redo日志要被定期刷入磁盘外,内存中的数据也要被定期刷入磁盘,每当内存中的一组数据被刷入磁盘后,需要记录日志的回放点,以后的故障恢复只需要redo回放点后边的日志即可,回放点之前的日志不需要被redo了,因为相关数据已经被刷入磁盘,不会丢失。当内存中的数据被刷入磁盘后,会在磁盘上形成一个checkpoint文件,文件中有记录的日志回放点。

责任编辑:武晓燕 来源: 拂晓杂谈
相关推荐

2021-06-18 06:00:31

存储系统

2018-09-29 14:08:04

存储系统分布式

2022-06-14 15:28:37

数据库存储系统变革趋势

2011-09-06 13:58:28

MTK系统

2020-03-04 17:37:09

存储系统硬件层

2009-01-11 16:26:05

2018-10-26 10:16:55

数据中心存储系统网络故障

2015-09-29 18:17:58

戴尔云计算

2018-01-31 08:44:20

数据存储存储设备存储系统

2013-10-12 16:38:38

存储虚拟化

2017-07-04 10:58:57

SAN存储网络存储系统架构

2017-11-08 11:22:46

存储趋势系统

2018-01-19 08:35:47

存储系统SAS

2017-07-10 09:02:24

NAS存储云存储

2015-08-27 09:30:05

2018-03-13 08:45:08

存储系统DHT算法

2018-01-19 08:54:18

存储系统SILT

2017-04-14 09:48:25

分布式存储系统

2018-01-22 09:08:14

存储系统性能带宽

2012-09-04 13:58:50

存储海量存储华为
点赞
收藏

51CTO技术栈公众号