一、SQL Server 容灾功能简单介绍

目前含有sql server 应用容灾代理的产品仅有爱数备份存储柜3.5 系列的产品,

支持的数据库版本和操作系统平台

SQL Server功能简介

1. Sqlserver 容灾代理分为复制代理和容灾代理
2.  复制代理可以单独使用,支持的功能模块有数据库实时复制功能,任意时间点恢复功能,
    容灾代理支持灾难恢复、手动、自动接管, 模拟演习等功能,容灾代理的功能模块 依赖于复制代理,不可以单独使用
3.  复制代理的复制粒度最小为数据库级别,可选择部分数据库或者整个实例进行复制容灾
4.  支持一个任务复制多个实例,一个任务复制多个客户端,多个任务同时复制一个数据库  等多种灵活的复制方案
5.  支持master , msdb 等系统数据库的容灾
6.  数据恢复提供了两种方式 灾难恢复和时间点恢复,
    灾难恢复为实时恢复,需要添加容灾备用服务器,数据可实时恢复至容灾服务器,使容灾服务器上的数据保持与生产服务器的准同步
    时间点恢复提供了回滚恢复到任意的历史时间点数据的功能
7. 恢复路径目前3.5 版本仅支持恢复到原文件位置,同时对恢复目标客户端也有一定的条件要求,
    如果选择部分用户数据库进行恢复恢复目标端必须存在相同数据库名相同文件路径数据库
   如果选则整个数据库实例级进行恢复,需要恢复目标端具有相同的实例,并且文件路径相同,但不要求所有恢复的数据库都存在
8.  3.5 版本暂不支持恢复为其他数据库名

二、关键技术

复制原理

Sql 实时复制是基于块级的增量复制方案,他依赖数据分离驱动,实时捕获文件系统上 数据库文件和日志文件的任何一个IO操作和变动字节,因此他的数据传输量很小,仅会传输发生变动的数据块,如果数据库业务量比较大,网络无法及时发送的情况下,数据块会暂时保存到本地日志池中

复制举例

一个简单的插入语句,往数据库一张表中插入一条记录,数据库会首先会在日志文件中记录此操作,因此日志文件发生了数据块变动,所有操作都会被数据分离器捕获,包括偏移量和操作长度,操作类型,数据内容等,如图所示,当然图中只是示例,不一定就是这些内容, 这里仅代表驱动所捕获的部分信息,驱动将捕获信息交由客户端代理处理, 客户端代理会为每条捕获记录标记索引号,用来保证按照原有的操作顺序进行网络传输数据分离驱动能捕获到文件变动过的,由于数据库有缓存机制, 新插入的数据并不一定会提交到数据文件,只有满足一定条件才会将缓存内容写到数据文件中, 从图中我们可以看到,驱动捕获到的数据文件发生变化的索引号和之前捕获到的日志文件索引是不连续的,中间可能有其他IO操作,我们只要关心严格按照原有的磁盘操作顺序,将捕获内容发送到介质或容灾服务器端。

数据复制的一致性

1.数据一致性从何而来

数据一致性是指在异步模式下数据系统的前后一致性,引起数据一致性问题的一个主要原因是位于数据I/O路径上的各种Cache或Buffer(包括数据库Cache、文件系统Cache,存储控制器Cache、磁盘Cache等)不同的模块因为处理数据I/O的速度存在差异,所以添加了Cache来缓存I/O操作,×××能的同时肯能就带来了一些负面影响。

2.由数据复制的严格IO顺序保证

利用sql 自身提供的一致性校验和修复工具, 可以最大限度的保证数据一致性, 并且采用的数据分离驱动在内核层采用同步方式, 验证保证IO顺序性, 这就保证任何一个复制点的数据跟当时磁盘掉电是一样的结果,像sqlserver 这类大型数据库其内部都很严格的一致性控制, 磁盘掉电是可以通过日志回滚和事务重做等将数据库恢复到一致性点的。另外采用数据库代理,定期执行数据库一致性检查并生成一致点

3.数据丢失!=没有数据一致性

4.数据一致性的意义

保证容灾端的数据系统,比如数据库,在丢失部分数据的情况下,依然能保证系统可用。

实时复制的三个技术点

1.在线初始化

数据库实时复制如何实现数据库不停机,继续提供服务的情况下实现初始化并且能够保证在初始化时候的数据是一致的

可以采用打开文件备份加上驱动捕获的初始化期间变化的I/O数据,也就是在执行初始化之前先把需要初始化的数据添加到驱动路径过滤中,驱动捕获的I/O数据暂时存放在日志池中并且暂时不对这部分日志进行复制然后使用打开文件备份的方式备份数据库文件,完成备份文件之后在日志池尾部插入一条初始化完成的标记,在标记之前的日志都属于初始化时间点的数据,然后立刻启动日志复制,当复制到初始化完成的标记时,就可以完成初始化,假设在备份文件时,读取了某个数据块后,此数据块又发生了变动,此时读取的数据就是不一致的,但是由于之前启动了过滤驱动,变化的数据块会被驱动所捕获会在后面覆盖掉刚刚读取的不一致的数据块,最终实现初始化数据的一致性

2.日志池技术

使用内存映射,效率高

循环日志池,占资源少

3.时间点索引

每个I/O操作都有时间索引,可恢复至任意时间点

灾难恢复技术原理数据订阅分发

传统的恢复模式是客户端主动发起恢复并向介质服务器请求相应的恢复数据,而订阅模式正好相反数据由介质服务器主动发给订阅的客户端

三、容灾实践操作和注意事项

容灾配置任务

1.配置容灾介质

创建容灾任务之前,首先要做的就是配置容灾介质, 容灾介质和传统介质有很大的不同,容灾介质是基于爱数OFS面向对象文件系统的存储介质,拥有很多传统介质不具备的特性。

如图中所示,选择介质服务器vx55, 点击“添加介质”按钮, 弹出添加介质的窗口, 在介质类型下拉框中选择 “容灾介质” 类型,存储路径选择介质服务器上的一个空存储卷, 这里要求所选择的卷上不能有其他数据, 如果有数据,添加时会提示是否格式化。格式化会将卷上所有数据都清除。

2.创建实时复制任务

配置完容灾介质,可以创建实时复制任务:打开实时复制任务创建向导窗口, 第一步填写完任务名, 选择保护的数据库类型为 sqlserver,  点击下一步,进入数据源选择界面

复制代理会自动列举系统内已经安装的sql 实例和数据库,选择数据源时可以选择单个或多个数据库或整个实例进行复制。

复制任务最后一步配置是选择介质服务器和配置日志卷,图中源介质服务器列表会列举当前已经配置了容灾介质的介质服务器,

日志卷是异步复制数据高速缓冲区, 位于生产服务器, 可以设置在任意路径下,但是要保证该路径下有足够大的缓冲空间,

异步复制时数据库产生数据速度高于复制传输速度,数据就会堆积在日志卷中,所以如果数据量较大,而磁盘空间不足时,很容易造成复制任务中断。

经过上面三个步骤的配置,复制任务就可以正常运行了,

复制代理注意事项

1. 第一个需要注意的是选择正确的客户端代理, 要根据数据库系统版本来判断,
对于32位的数据库,应该使用32位客户端,对于64位的数据库,应该使用64位的客户端代理。

2. 第二个需要注意的是SQL Server 2005和SQL Server 2008,需要安装向后兼容包,另外,对于64位的SQL Server 2005应该安装sp2或以上的升级包。

3. 第三个需要注意的是,安装客户端时如果出现数据分离驱动安装失败的问题,首先检查操作系统版本,windows 2000 需要升级到最新的 sp4,  windows 2008 server 64 位系统需要启动系统时禁用数字签名,

如果安装客户端时没有提示驱动安装失败, 而在复制任务执行时发生驱动安装失败的话, 需要根据具体错误值判断原因, 必要是需要手动重新安装驱动。

4. 第四点注意事项是日志卷的配置, 虽然日志卷的空间是循环回收利用的, 但如果变化数据量较大, 日志卷需要配置足够大的空间,否则会造成任务中断

灾难恢复任务

1.任务基本信息

灾难恢复功能集成在灾备代理中,可以实现指定一个或多个容灾服务器,使容灾服务器的数据保持和生产服务器准同步,并实现随时模拟演习,和应用接管,

创建灾难恢复任务依赖实时复制任务,它不能独立于复制任务而独立存在,我们可以看到图中为 新建灾难恢复任务的向导,

总共分为三个步骤, 第一步选择实时复制任务和网卡

这里复制任务列表会自动将满足创建灾难恢复任务的复制任务列举出来,只要选择对应的复制任务即可,需要注意的是,复制数据源为多客户端的任务和已经创建了灾难恢复任务的复制任务将不会在这个列表中出现网卡选择的目的是用于绑定虚拟IP,  这里要慎重选择,请确保使用当前为活动状态的网卡,否则后面会出现,添加虚拟IP 失败,或者绑定到无效网卡后IP 无法访问等问题。

2.添加容灾服务器

创建灾难恢复任务第二步是添加容灾服务器,添加容灾服务器时需要选择源介质服务器 和容灾服务器网卡,这里介质服务器是指复制数据所在的介质,网卡是用于在接管后,容灾服务器绑定虚拟IP 到这里选择的网卡上, 所以这里选择的网卡也必须是活动可用的。

如果添加了多个容灾服务器,自动接管的时候默认按照添加的顺序 排接管优先级的,比如看上图,添加了两个容灾服务器。当满足自动接管条件触发接管时,USER-66 客户端将执行接管。当user-66 在接管前发生了故障,就由第二个满足接管调节的客户端接管。

3.容灾接管设置

灾难恢复任务创建的最后一步是容灾接管设置,
故障检测心跳周期是指每隔多长时间执行一次检测操作
连续的故障检测次数是指最大允许的连续故障次数,如果连续的故障次数 超过设定的值,就判定此时应用发生故障,
(由此可见,应用的允许故障时间等于心跳周期乘以连续检测次数,如图中配置的检测周期为6秒,允许连续故障次数为2,那么应用所允许的故障时间就为12秒,如果在这12秒内 应用不能恢复正常,就会判定为故障。)

自动重启策略,  启用重启策略后, 当判定应用发生为故障状态时, 会自动重启应用服务,尝试将其修复,重启之后,会重新按照上面的检测策略再执行一轮检测。
(设定重启策略后,应用的允许故障时间变为心跳周期 * 连续检测次数 * 重启次数 )

接管自动恢复数据选项, 默认是不自动恢复原生产服务器的数据的,如果选中自动恢复选项,在接管后,生产服务器的数据会被容灾服务器的数据覆盖,选择这个选项的时候需要慎重,存在着将生产服务器数据破坏的危险。

虚拟IP 配置尽量使用可用的空闲IP地址,否则会添加ip失败,或者出现添加后IP无法访问的情况,

自动接管选项配置,默认不选中此项, 检测应用故障,仅会输出警告信息, 并邮件通知管理员, 由管理员判定故障原因,再确定下一步操作,如果选中此项,故障检测模块 判断应用故障后,会自动执行接管,将应用切换到容灾服务器

经过上面的配置后, 灾难恢复任务创建就完成了

4.灾难恢复任务管理

上图就是创建成功的灾难恢复任务,

在灾难恢复任务管理页面提供了手工接管和演习功能。

点击“开始演习”按钮后 ,会弹出如下图所示的选择容灾服务器列表的窗口,可以选择任意一台容灾服务器进行演习。

5.演习执行信息

选择容灾服务器进行模拟演习后,查看灾难恢复任务的输出,

我们可以看到选择的容灾服务器收到演习消息,停止所有数据恢复,修复数据库成功后,启动数据库服务,

如果启动成功,就表明演习成功

6.复制数据管理和时间点恢复

最后来看一下实时复制数据管理和时间点恢复,复制数据管理页提供了对所有实时复制任务的复制数据管理功能,
能浏览查看各个时间点的数据,时间点最低精确到秒级。

此管理页面也提供了恢复任意时间点到指定客户端功能,
目前版本仅支持恢复到原数据库名和原文件路径,所以功能尚有欠缺,后面的版本会提供更完善的时间点恢复选项