【大话存储】学习笔记(八),数据保护

第一章 数据保护

所谓数据保护是指对当前位置上的数据进行备份,不一定是实时的。这样带来的好处是如果发生磁盘损坏或者说被修改了,可以通过备份数据找回

1.1 文件级备份

文件级备份:将磁盘上所有文件通过调用文件系统接口备份到另一个介质上。也就是把数据以文件形式读出,然后存储在另一个介质上面。

可以看出,备份软件将文件备份到新的介质上,文件很大程度上是连续存放的。正因为如此不会备份元数据,利用新介质进行恢复的时候,会重构文件系统。

1.2 块级备份

块级备份就是不管块上是否有数据,不考虑文件系统的逻辑,备份块设备上的每个块。

块级备份不经过文件系统接口,速度更快,但是会备份很多僵尸扇区。

第二章 高级数据保护

2.1 远程文件复制

远程文件复制:通过网络传输到异地容灾点。典型的代表是rsync异步远程文件同步软件。可以监视文件系统的动作,将文件的变化,同步到异地站点。增量复制。

2.2 远程磁盘镜像

基于块的远程备份。

  • 同步复制:必须等数据复制到异地站点以后,才通报上层IO成功消息
  • 异步复制:写入成功即可回复成功,然后通过网络传输到异地。不能保证一致性,但是上层响应快。
    基于块的备份措施,一般都是在底层设备上进行,不耗费主机资源。

2.3 快照

远程镜像确实是对生产数据一种非常好的保护,但是需要镜像卷一直在线,主卷有写IO,那么镜像卷也需要有写IO。如果想对镜像卷进行备份,需要将停止主卷的读写,然后将两个卷的镜像关系分离。所以当恢复主卷的IO的时候,镜像卷不会再被读写。此时可以备份镜像卷的数据。

这样会存在一个问题,主卷上还继续有IO,所以数据与备份的镜像不一致。所以主卷上所有的写IO动作,会以bitmap方式记录下来,bitmap上的每个位表示卷上的一个块,0表示未写入,1表示已写入,所以当拆分镜像以后,被写入了数据,程序将bitmap文件对应位从0变为1。备份完成以后,再做数据同步即可。

可以看出上述过程比较的繁琐,而且需要占用一块和主卷一样大小的镜像卷。

快照技术就是为了解决这种问题,其基本思想是抓取某一时间点磁盘卷上的所有数据。

快照分为:基于文件系统的快照和基于物理卷的快照

2.3.1 基于文件系统的快照

文件系统管理的精髓:链表、B树、位图,也就是元数据

文件系统

  • 将扇区组合成更大的逻辑块来降低管理规模。NTFS最大块可以到4KB,也就是8个扇区一组一个簇(Block),这样可以减少管理成本。
  • 文件系统会创建所管理存储空间上所有簇的位图文件。每个位代表卷上的簇(或者物理扇区)是否被使用,如果被使用,则置1。
  • 文件系统保存一份文件和其对应簇号的映射链。因为映射链本身和簇位图也是文件,也有自己的映射链,所以针对重要的元数据,有一个固定的入口。root inode

写入新数据

  • 查找簇位图,找位值为0的簇号,
  • 计算所需空间, 分配簇号给文件
  • 将数据写入簇,再去文件——簇号映射图更新
  • 将对应的簇映射关系记录下来,到簇位图将对应位置改为1.

删除数据

  • 直接在簇号映射链中抹掉,
  • 簇位图对应簇改为0

可以看出删除数据实际上不会抹掉实际的数据。

** 所以,最重要的不是数据,而是文件——簇号映射链和位图等元数据。**

也就是说我们要做备份,只需要把某时刻的文件系统中的映射图表保存下来。但是必须保证卷上的数据不被IO写入了,同时又要不应用还不能中断。既然原来的空间不能再写了,我们可以写到其他的空闲区域。

上图为快照示意图。原块没有被覆盖的时候,快照和文件系统的指针图是指向同一位置的。一旦原块有写IO执行,则这个块会被写到其他空闲块。将当前指针指向新块,其他指针不变。此时可以将照下了的原卷数据拷贝出,从而得到某一时刻的卷数据。

2.3.2 基于物理卷的快照

基于物理卷的快照,相当于给物理卷增加了“卷扇区映射管理系统”。在底层卷实现快照,可以减轻文件系统的负担。

  • 保存一张初始的LBA表。
  • 每当有新的写入请求,写入另一个地方。(一般是新卷,专为快照保留的),并在初始的LBA表中做好记录。比如原始LBA:卷A的10000号,映射到LBA:卷B的100号。
  • 卷A在这个快照删除之前不允许写入,文件系统无法感知重定向,文件系统在它的映射图里面还是记录了原始的LBA地址。

此时如果来了新的写IO,有两种方式一种是Write Redirect 一种是Copy on Write

所谓Write Redirect就是将文件系统的读写请求,重定向到卷B,这样每次IO其实都会查找快照映射表,降低了性能。所以引入了Copy on Write

所谓Copy on write,就是当写请求来的时候,先把原来的扇区的数据复制一份到空闲卷,然后将新数据写入原卷。不过这种复制操作只发生在原卷某个或者快照之后从未更新过的块上面,若是某个块在快照之后更新过了,说明之前的数据已经转移走了,可以放心的覆盖。

所以Copy on Write实际上是让旧数据先占着位置,等新数据来了以后先把原来的数据复制走,再更新,而且一旦更新了一次,可以直接覆盖。

带来的好处是 ,原卷上的数据随时是最新的状态,每个IO可以直接访问原卷的地址,而不需要遍历映射表。

2.3.3 快照的意义

上层应用和文件系统都有缓存,文件系统缓存的是文件系统的元数据和文件的实体数据。每隔一段时间(Linux一般是30s)批量Flush到磁盘上。而且不是只做一次IO,有可能会对磁盘做多次IO。如果快照生成的时间恰恰在这连续的IO之间生成,那么此时卷上的数据实际上有可能不一致。文件系统的机制是先写入数据到磁盘,元数据保存在缓存里面。因为如果FS先把元数据写入磁盘,突然断电了,那么元数据对应的僵尸扇区的数据会被认为是文件的。

总之,快照极可能生成不一致的数据。可以任意生成,而且占用的空间又不大,更重要的是可以在线恢复,只要没删除,就是几秒钟,不用停机,只需要在内存中做IO重定向,那么上层访问就变成以前时间点的数据了。

但是快照会存在不一致的问题,如何解决?

既然快照无异于一次磁盘掉电,那么利用快照恢复数据之后,文件系统可以进行一致性检查,数据库也会利用日志来使数据文件处于一致。有些快照解决方案是在主机上安装一个代理,执行快照前,先通知文件系统将缓存中的数据全部Flush到磁盘,然后立即生成快照。

第三章 数据备份系统的基本要件

  • 备份主体:需要进行备份的备份源。
  • 备份目的:磁盘等介质
  • 备份通路:网络
  • 备份执行引擎:备份软件
  • 备份策略

下面重点介绍一下备份目的、备份通路、备份引擎

3.1 备份目的

3.1.1 本地磁盘作为备份目的

用本地磁盘作为备份目的就是将数据备份到本地磁盘的另外分区或者目录里面。这样不需要网络,缺点是对备份主体的性能影响大。还会对其他的IO密集型程序造成影响。
这种方式一般用于不关键的应用和非IO密集型应用。比如E-mail,对转发实时性要求不高。

3.1.2 用SAN磁盘作为备份目的

用SAN磁盘作为备份目的就是将需要备份的数据,从读入内存,再写入HBA卡缓冲区,然后再通过线缆传送到磁盘阵列上。

  • 优点:只耗费SAN公用网络带宽,对主体影响小。
  • 缺点:对公共网络资源和出口带宽有影响。
3.1.3 用NAS目录作为备份目的

用NAS目录作为备份目的就是将数据备份到远程共享目录中。比如window中常用的文件夹共享。因为数据一般是通过以太网进行传递的,占用了前端的网络带宽,但是相对廉价,不需要部署SAN

3.1.4 用SAN上的磁带库作为备份目标

现在出现一种虚拟磁带库,即用磁盘来模拟磁带,对主机来说看到的是一台磁带库,实际上是一台磁盘阵列,主机照样使用磁带库一样来使用虚拟磁带库。要做到这点,就必须在磁盘阵列的控制器上做虚拟化操作,也就是实现协议转换器的作用。

可以带来了的好处是:

  • 速度提升
  • 避免机械手这种复杂的机械装置
  • 管理方便。
3.1.5 信息生命周期管理

将使用不频繁的数据移动到低速、低成本的设备上。比如只给视频应用分配20GB的空间,但是报告有500GB的空间,剩下的空间是在在磁带库上。

3.1.6 分级存储

1. 一线磁盘阵列

2. 二线虚拟磁带库:近期不会被频繁调度。利用大容量SATA盘,性能适中的控制器。

3. 带库或者光盘库。几年甚至几十年都不访问到。

3.2 备份通路

3.2.1 本地备份

数据流向:本地磁盘——总线——磁盘控制器——总线——内存——总线——磁盘控制器——总线——本地磁盘
也即数据从本地磁盘出发,经过本地的总线 和内存,经过CPU少量控制逻辑代码之后,流回本地磁盘。

3.2.2 通过前端网络备份

经过前端网络备份的数据流向是:本地磁盘——总线——磁盘控制器——总线——内存——总线——以太网卡——网线——以太网——网线——目标计算机的网卡——总线——内存——总线——目标计算机的磁盘。数据从本地磁盘出发,流经本地总线和内存,然后流到本地网卡,通过网络传送到目标计算机磁盘。

  • 前端网络:服务器接受客户端连接的网络,也就是服务网络,是服务器和客户端连接的必经之路。
  • 后端网络:对客户封闭,客户的连接不用经过这个网络,用与服务器和存储、应用服务器、数据库服务器的连接。可以是SAN,以太网
3.2.3 通过后端网络备份

通过后端网络备份的数据流向是:本地磁盘——总线——控制器——总线——内存——总线——后端HBA卡——线缆——后端交换设备——线缆——备份目的的后端网卡——总线——内存——磁盘

3.2.4 LAN Free备份

备份的时候不经过LAN,也就是不流经前端网络,也叫Frontend Free。这样的好处是不耗费前端网络的带宽,对客户终端接受服务器的数据不影响。。因为前端网络一般是是慢速网络 ,资源非常珍贵。无论是本地、还是网络,都需要待备份的服务器付出代价,即需要读取备份源数据到自身的内存,然后从内存写入备份的目的地。对主机CPU、内存都有浪费。能否不消耗服务器的性能呢?可以使用Server Free备份。

3.2.5 Server Free备份

Server Free备份:备份源不能在服务器上(因为数据从磁盘读出,要流将总线,然后到内存),也不能在服务器上。用SCSI的扩展复制命令,将这些命令发送给支持Server Free的存储设备,然后这些设备会提取自身的数据写入备份目的设备,而不是发送给主机。
所谓Server Free, 不是真正不需要服务器,而是让服务器发出SCSI扩展复制命令,或者使用另一台专门做数据移动的新服务器,来代替原来服务器移动备份数据。释放运算压力很大的生产服务器。

3.3 备份引擎

备份引擎:一套策略,决定整个数据备份系统应该怎么运作,备份那些内容,什么时候开始备份,备份时间有没有限制等。

3.3.1 备份服务器

备份引擎以什么形式体现呢?当然是运行在主机上的程序,所以需要一台计算机来做引擎的执行者。备份服务器的备份策略和规则,怎么传给整个数据备份系统中的服务器?通过以太网,因为以太网扩展性好,适合节点间通信。相对于以太网,SAN更适合传送大量的数据。而利用前端网络还是后端网络呢?

常用前端网络来连接待备份的服务器和备份服务器,因为备份策略的数据包不多。

备份服务器如何与每个待备份的服务器建立通话?怎么通话?规则怎么定?需要待备份服务器上运行一个代理程序,专门解释备份服务器发来的命令,根据命令作出动作。

备份代理:监听端口,接收备份服务器发来的命令。

3.3.2 介质服务器

若数据备份系统中有一台SCSI磁带机,且多台主机想备份到这台磁带机上。可以将磁带机连接到固定的计算机上,通过以太网连接其他的需要备份的计算机,将数据发给这台掌管磁带机的计算机,然后写给磁带机。

掌管磁带机的计算机称为了代替这些服务器行使备份动作的角色,称为介质服务器。

在每个待备份的服务器上安装代理,让每台服务器按照顺序有条理的使用介质服务器提供的备份介质进行备份。

备份的流程如下:

  • 某时刻,备份服务器通知介质服务器和待备份的服务器C需要开始备份了。
  • 介质服务器A向服务器发出命令,告诉它可以开始备份了。
  • 待备份的服务器C把需要备份的数据通过以太网发送给介质服务器A。
  • 介质服务器A将收到的数据源源不断的写入到磁带机中。
  • 重复

上图是一个Frontend UnFree的备份方式,占用了前端的网络。

我们总结下,现在数据备份系统中一共有三个角色:

  • 备份服务器(调度员)
  • 介质服务器(仓库管理员)
  • 待备份服务器(存储货物的人)

3.4 三种备份方式

3.4.1 完全备份

不管文件多大,只要要备份,都需要将文件都备份下来。

3.4.2 差量备份

差量备份:只备份从上次完全备份以来发生变化的数据。
差量备份要求必须做一次完全备份,作为差量的基准点

3.4.3 增量备份

只备份从上次备份以来这份文件中变化过的数据。

上次备份,不管是全备、差备,还是增备。

对于数据库的备份,备份软件想知道每个数据文件的变化是不可能的,因为数据库文件内部格式非常复杂,只有自己才能分析和检测出来。所以数据库管理软件有自己的备份工具。第三方备份软件只能调用数据库软件自身提供的命令。

原文地址:https://www.cnblogs.com/dy2903/p/8270451.html

时间: 2024-10-12 16:56:33

【大话存储】学习笔记(八),数据保护的相关文章

大话存储学习笔记(4)

七.逻辑卷管理 逻辑卷管理(简称LVM),是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层. 通过LVM管理可以轻松管理磁盘分区,如:若干个磁盘分区连接为一整块的卷组,形成一个存储池.管理员可以在卷组上随意创建逻辑卷组,并进一步在逻辑卷组上创建文件系统.管理员通过LVM可以方便调整卷组大小,并且可以按照磁盘存储的方式进行命名.管理和分配. LVM的配置信息记录在叫做VGDA(Volume Group Descriptor Area)的区域,LVM就是通过读

大话存储学习笔记(1)

一.存储历史 二.计算机IO 1.什么叫IO I表示in,对于CPU来说,从内存中取数据:O表示out,CPU运算完后将数据发送至内存 同理,对于磁盘来说,将数据写入磁盘表示in,将输入从磁盘读出来叫out 2.总线 PCI总线:一种南桥与外设连接的总线技术 PCI总线特点:中断共享,即不同设备使用同一中断而不发生冲突.硬件上采用电平触发:软件上采用中断链,即,假设系统启动时,发现板卡A用了中断7,就会将中断7对应的内存区指向A卡对应的中断服务程序入口ISR_A:系统发现板卡B也用了中断7,这是

大话存储学习笔记(3)

五.磁盘IOPS和传输带宽 磁盘IOPS:每秒能进行多少次IO,每次IO根据写入数据的大小,这个值也不是固定的. 如果IO每次都写入很大的一块连续的数据,则每秒所做的IO次数是比较低的: 如果磁头频繁换道,每次写入的数据还是较大的话,此时IOPS是这块硬盘的最低数值了. 如果在不频繁换道,每次写入最小的数据块,如512字节,则此时IOPS将是最高值. 传输带宽:指硬盘或设备在传输数据是数据流的速度,如果写入1000个1kb的文件需要10s,那么传输带宽只能达到每秒1MB,而写入一个10MB的文件

大话存储学习笔记(5)

九.磁盘阵列 1.关于LUN LUN是SCSI ID的更细一级的地址号,每个SCSI ID下有更多的LUN ID.对大型磁盘阵列来说,可以生产几百几千个虚拟磁盘,为每个磁盘分配一个SCSI ID是远远不够的.因为每个SCSI总线最多允许16个设备接入(目前32位SCSI标准可以接入32个).LUN是一个次级寻址ID.磁盘阵列可以在一个SCSI ID下虚拟多个LUN地址,每个LUN对应一个虚拟磁盘.硬件层次生成的虚拟磁盘,称为LUN:软件生成的虚拟磁盘,称为卷. 2.双控制器的磁盘阵列 如果盘阵内

大话设计模式学习笔记——面向对象基础

前言 好记性不如烂"笔头"系列--大话设计模式学习笔记 目录 面向对象基础 面向对象基础 什么是类与实例 一切事物皆为对象,即所有的东西老师对象,对象就是可以看到.感觉到.听到.触摸到.尝到.或闻到的东西.准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识.面向对象编程,英文叫 Object-Oriented Programming,其实就是针对对象来进行编程的意思.类就是具有相同属性和功能的对象的抽象集合.实例就是一个真实的对象.比如我们属于'人'类,而个人就是'人'类

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

Lua学习笔记(八):数据结构

table是Lua中唯一的数据结构,其他语言所提供的数据结构,如:arrays.records.lists.queues.sets等,Lua都是通过table来实现,并且在Lua中table很好的实现了这些数据结构. 1.数组 在Lua中通过整数下标访问table中元素,既是数组,并且数组大小不固定,可动态增长.通常我们初始化数组时,就间接地定义了数组的大小,例如: 1 a = {} -- new array 2 for i=1, 1000 do 3 a[i] = 0 4 end 5 6 --数

angular学习笔记(八)

本篇介绍angular控制视图的显示和隐藏: 通过给元素添加ng-show属性或者ng-hide属性来控制视图的显示或隐藏: ng-show: 绑定的数据值为true时,显示元素,值为false时,隐藏元素 ng-hide: 绑定的数据值为true时,隐藏元素,值为false时,显示元素 (其实只要用到其中一个就可以了) 下面来看个简单的例子,点击按钮可以显示/隐藏元素: <!DOCTYPE html> <html ng-app> <head> <title>

马哥学习笔记八——LAMP编译安装之PHP及xcache

1.解决依赖关系: 请配置好yum源(可以是本地系统光盘)后执行如下命令: # yum -y groupinstall "X Software Development" 如果想让编译的php支持mcrypt扩展,此处还需要下载如下两个rpm包并安装之: libmcrypt-2.5.7-5.el5.i386.rpm libmcrypt-devel-2.5.7-5.el5.i386.rpm 2.编译安装php-5.4.13 首先下载源码包至本地目录. # tar xf php-5.4.13

初探swift语言的学习笔记八(保留了许多OC的实现)

尽管swift作为一门新语言,但还保留了许多OC的机制,使得swift和OC更好的融合在一起.如果没有OC基础的先GOOGLE一下. 如:KVO,DELEGATE,NOTIFICATION. 详见DEMO. import Foundation @objc // 需要打开objc标识,否则@optional编译出错 protocol kvoDemoDelegate { func willDoSomething() @optional func didDoSomething() //可选实现, }