sqlserver 2012实施与管理学习笔记(二):选型和部署之数据库镜像与复制

  • 数据库的选型和部署
  • sqlserver的安装和升级
  • 选择高可用性和灾难恢复技术
  • 故障转移群集
  • 日志传送
  • 数据库镜像
  • 复制
  • 高可用和灾难恢复技术的比较
  • AlwaysOn高可用技术


数据库的选型和部署

sqlserver的安装和升级

选择高可用性和灾难恢复技术

故障转移群集

日志传送

以上内容参见上一篇文章。

数据库镜像

前文提到的故障转移群集技术能够提供高可用性,但是不能提供数据冗余;日志传送可以提供冗余的数据复制,但是主数据库和辅助数据库之间的时间差可能比较长,而且故障切换也比较麻烦。数据库镜像技术出现的目的正是为了弥补前两者的短板,既能提供数据冗余备份,故障切换也比较方便。

基本概念
只有用户数据库才能配置数据库镜像,所有的系统数据库都不能被镜像。数据库镜像会为目标数据库(称为主体数据库)创建一个副本数据库(称为镜像数据库)。每个主体数据库只能有一个镜像数据库。镜像数据库在主体数据库发生故障、不能访问时能迅速恢复数据库访问,实现灾难恢复。

只有使用完整恢复模式的数据库才能使用数据库镜像功能。由于数据库镜像的限制,主体数据库不能还原数据库备份,但是可以执行查询、修改、数据库管理操作。镜像数据库一直处于“恢复”状态,因此不能被直接访问。但是,通过为镜像数据库创建快照,可以间接地访问镜像数据库里的数据。

主体数据库和镜像数据库分别运行在不同的SQL Server实例上,作为伙伴建立一个会话(Session)。运行主体数据库的SQL Server实例被称为主体服务器(Principal Server),运行镜像数据库的实例被称为镜像服务器(Mirror Server)。一般不建议把这两个实例部署在同一台物理机上。这两个实例上可以有多个数据库镜像的会话。每个数据库镜像的会话都只针对一个独立的用户数据库。如果一个应用程序需要同时访问一个实例上的两个数据库,则需要配置两个镜像会话。由于镜像数据库相互独立,这两个数据库镜像会话不能作为一个组来进行故障转移。

除了主体服务器和镜像服务器之外,数据库镜像技术还支持配置一个被称为见证服务器(Witness Server)的数据库实例。见证服务器上没有数据库的副本,它只是作为一个中立的仲裁,在主体数据库发生异常时触发自动的故障转移,让镜像数据库和主体数据库转换角色。多个数据库镜像会话可以共用同一个见证服务器。可以说,配置了见证服务器的数据库镜像兼备了高可用性和灾难恢复的能力。

数据同步
在数据库镜像中,主体服务器、镜像服务器、见证服务器通过端点(Endpoint)对象进行会话。每个端点默认会侦听TCP的5022端口。主体服务器将主体数据库的日志从缓存固化到磁盘的同时,还会使用另一个线程将日志块发送给镜像数据库。镜像服务器将通过端点接收到的日志块放入缓存,然后也将其固化到磁盘上。日志块被固化后,镜像服务器会根据日志的内容来对镜像数据库进行重做(Redo),最终实现与主体数据库的数据同步。如果重做失败,镜像服务器会将数据库置于SUSPENDED状态来暂停会话。

如果主体数据库上生成新日志的速率快于日志发送的速率,累计未发送的日志会产生一个发送队列(Send Queue);如果镜像数据库上日志重做的速率慢于日志固化的速率,在ldf文件中等待重做的事务也会形成一个重做队列(Redo Queue)。

传输模式
数据库镜像中有同步传输异步传输两种事务处理模式。

同步传输模式下,主体服务器会等到镜像服务器将日志固化到磁盘并返回确认后才会结束事务操作,向客户端发送事务完成的确认消息。同步传输模式以此保证数据在主体数据库和镜像数据库之间是始终保持完全同步的,其缺点是可能会给主体服务器上的事务提交带来额外的延迟,从而影响到主体数据库的性能。

在异步传输模式下,主体数据库向镜像服务器发送日志之后会直接提交事务,而不会等镜像服务器返回确认。因此,主体数据库和镜像数据库可能并不是完全同步的。一旦主体数据库出现问题,镜像数据库上可能会丢失数据。

数据库镜像操作模式
数据库镜像中有以下3种操作模式:

操作模式

事务安全

传输模式

见证服务器

故障切换类型

高可用

Full

同步


自动或手动

高保护

Full

同步


只能手动切换

高性能

Off

异步


只能强制切换

其中,如果把事务安全性设置为Full,数据库镜像就会处于同步传输模式;设置为Off,则对应的是异步传输模式。高可用操作模式和高保护操作模式下,主体数据库和镜像数据库的日志是保持同步的。但是在高性能操作模式下,镜像数据库的日志可能滞后于主体数据库,而且强制故障转移意味着角色切换时存在数据损失风险。

监控和故障排查
对数据库镜像进行故障排查需要收集以下数据:

  • SQL Server的Errorlog:包括主体服务器和镜像服务器的Errorlog;
  • 性能监视器:数据库镜像在性能监视器中有一个专门的对象SQL Server:Database Mirroring,主体数据库中该对象下的Transaction Delay、Log Send Queue KB、Log Bytes Sent/Sec计数器,以及镜像数据库中该对象下的Log Bytes Received/Sec、Redo Queue KB、Redo Bytes/Sec计数器,都有助于定位数据库镜像的性能瓶颈;
  • 数据库镜像监视器(Database Mirroring Monitor):send queue, redo queue;
  • 系统存储过程和系统表:sp_dbmmonitorresults, sp_dbmmonitoraddmonitoring, sp_dbmmonitorupdate等存储过程,dbm_monitor_data等系统表。

复制

数据库复制(Replication)并不是一个为灾难恢复而设计的功能,它更适合被应用于灵活的数据同步。

基本概念

  • 项目(Article)是SQL Server数据库中的对象,可以是表、视图、存储过程、自定义函数或其它对象。
  • 发布(Publication)是一个或多个项目的集合。一次发布可以包含不同类型的项目。发布是复制的基本单位
  • 发布服务器(Publisher)是一个数据库实例,它配置了一个或多个发布。
  • 分发服务器(Distributor)也是一个数据库实例,它服务于一个或多个发布服务器。每个发布服务器都对应分发服务器中的一个分发数据库。分发数据库上保存着复制的状态信息和每个发布的元数据。
  • 订阅(Subscription)是指将发布从分发服务器发送到订阅服务器上。订阅有推送订阅和请求订阅两种类型。
  • 推送订阅(Push Subscription):发布服务器或分发服务器主动将数据更改发送到订阅服务器,无须订阅服务器发起请求。推送方式又可以分为手动发送、连续发送、按计划时间定时发送;
  • 请求订阅(Pull Subscription):订阅服务器主动请求分发服务器以获得数据更新。
  • 订阅服务器(Subscribers)是接收复制数据的数据库实例。订阅服务器可以接收来自多个发布服务器的数据。订阅服务器除了SQL Server之外还可以是Oracle和IBM DB2的数据库实例。

复制类型
SQL Server常用的复制类型有三种:快照复制、事务复制、合并复制。

快照复制(Snapshot Replication)
快照代理将数据库的某个瞬时状态生成一个快照,通过文件夹传送到订阅服务器。由于快照文件通常比较大,因此快照复制同步数据的时间会比较长。快照复制适用于以下情况之一:

  • 用户允许订阅服务器使用相对已过时的数据副本并且需要复制的整体数据量较小;
  • 数据库在短时间内出现了大量更改并且需要复制的整体数据量较小。

事务复制(Transactional Replication)
事务复制中,SQL Server通过日志读取代理和分发代理,将发布服务器上所做的数据更改和架构修改几乎实时地传递给订阅服务器。所有的数据更改都会以事务为单位,按照其在发布服务器上发生的顺序同步到订阅服务器。参与事务复制的表必须提前建立主键或者唯一约束。以下情况适合采用事务复制:

  • 需要较短的同步时间;
  • 订阅服务器上的应用环境需要追踪数据更改的中间状态;
  • 发布服务器有大量的数据插入、更新和删除动作;
  • 发布服务器或者订阅服务器其中之一不是SQL Server数据库。

合并复制(Merge Replication)
合并复制允许用户同时修改订阅服务器和发布服务器上的数据,并把这些修改合并成一个统一的结果。合并复制适用于以下情况:

  • 多个订阅服务器可能会在不同时间更新同一数据,并将其更改传播到发布服务器和其他订阅服务器;
  • 订阅服务器需要接收数据,脱机更改数据,并在以后与发布服务器和其他订阅服务器同步更改;
  • 多个服务器同时更改同一个数据,可能会引发冲突(需要检测和解决冲突);
  • 应用程序需要最终的数据更改结果,而不是访问中间数据状态;
  • 订阅服务器是移动客户端,需要通过web service从发布服务器同步数据。

灾难恢复和复制
如果要使用复制来作为灾难恢复的方案,事务复制是最佳选择。此时,应当把主服务器作为发布服务器,把备用服务器作为订阅服务器。建议使用推送订阅方式,并且设置为连续发送。复制的订阅服务器可以被访问,因此可以负载一些只读的应用。

事务复制的同步滞后时间一般会小于日志传送,但是无法像数据库镜像一样实现完全同步和数据零损失。事务复制的独有优势在于可以只同步几张表、甚至是表中的部分数据。复制无法同步数据库用户、索引、约束、外键、触发器等对象。

高可用和灾难恢复技术的比较

功能

故障转移群集

日志传送

数据库镜像

事务复制

保护级别

实例级别

数据库级别

数据库级别

数据库对象级别

是否有数据损失

/

可能有少量损失

无(同步模式)

可能有少量损失

自动故障转移



是(高可用模式)


故障转移后是否可逆





对客户端是否透明



是(需要驱动程序支持)


停机时间

约等于数据库服务重启时间+数据库恢复时间

较长

约等于数据库恢复时间

较长

多个备用数据副本





备用数据副本可读

/




能抵御用户误操作





能抵御磁盘故障





特定硬件要求

Windows集群


较好的磁盘和网络


对性能的影响





版本支持

SQL Server 2000及以后

SQL Server 2000及以后

SQL Server 2005及以后

SQL Server 2000及以后

以下内容参见下一篇文章。

AlwaysOn高可用技术

Reference: SQL Server 2012实施与管理实战指南