版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/DBA_Huangzj/article/details/26951563
镜像是什么?说白了就是个镜子(没用过镜子?没镜子你总要小便吧?开个玩笑。。 ),这里镜子的含义主要有两个:1、一模一样,以下会具体介绍,包括库名、数据文件和日志文件的存放路径都要一样。2、看得到,却“用不了”。镜像库在没有做不论什么处理时是不可訪问的。以下进入专业一点的解释:
数据库镜像(SQL Server Mirroring)从SQL Server 2005 SP2開始引入。尽管从2008開始被列为“将会被弃用”的功能,可是因为其有非常多优势,一直被广泛使用至今。本文将介绍镜像的基础,也会介绍和其它SQL Server提供的高可用方案的对照。《SQL Server扫盲》系列将会单独介绍各种高可用方案,所以这里不会过多介绍,主要是进行对照。
术语:
本系列将会用到非常多镜像甚至高可用的术语,所以这里先介绍相关概念:
- 主体server,Principal:在镜像环境中,包括活动库的源server,能够理解为主server。
- 镜像server。Mirror:在镜像环境中,包括目标数据库的server,即镜像环境中的目标server。
- 见证server。Witness:可选的一个server,用于监控主体server和镜像server。最基本的作用是进行自己主动故障转移(automatic Failover)。
- 伙伴server。Partner:相对于镜像环境而言,镜像server就是主体server的伙伴server。而主体server也是镜像server的伙伴server。
- 端点,Endpoint:绑定到网络协议中的对象,同意SQL Server通过端点在网络间交互。
- 会话,Session:活动于镜像环境中,用于维护server之间的状态信息和关系。简单来说就是镜像环境中各个伙伴server之间信息的传递者。
- 执行模式,Operating Mode:表示镜像环境的安全级别。镜像的执行模式有三种:带有自己主动故障转移的高安全性模式(带有见证server的同步模式),不带有自己主动故障转移的高安全性模式(没有见证server的同步模式),高性能模式(没有见证server的异步同步)。
- 角色,Role:在镜像环境中的功能,同一时刻,一个特定的server仅仅能是三种角色中的当中一种:主体、镜像或见证。
执行模式:
从大层面来说,SQL Server镜像仅仅有两种模式:高安全模式和高性能模式。两种模式的主要差别在于在事务提交后的操作。能够从图1-1中查看执行模式。
在高性能模式下,主体server不须要等待镜像server响应就可以提交事务。
在高安全性模式,须要把事务同步到镜像并得到响应后才终于提交主体server的事务。
注意:无论使用何种模式,主体库都必须配置为完整恢复模式。
图1-1 SQL Server镜像执行模式
高安全模式。High-Safety Mode:
这样的模式是同步模式,能够细分为带有自己主动故障转移(即有见证server)的高安全模式和不带自己主动故障转移(即没有见证server)的高安全性模式。
假设没有配置见证server,那么【带自己主动故障转移功能的高安全性(同步)】选项将会为灰色。即不可选。
两者最大的差别在于是否引入见证server,前面提到过。见证server能作为仲裁。侦測主体server的状态,一旦见证server不能连接主体server,将把会话自己主动切换到镜像server,假设没有见证server,那么须要手动切换。
在高安全模式下。事务必须在镜像库上提交,才干在主体库提交,这也意味着整套程序都必须等待镜像提交事务后才干终于提交,假设在网络情况不理想。将影响整个执行过程。高安全模式支持标准版和企业版。而且主体和镜像server必须是同样版本号,比方不能一个是标准版。一个是企业版。
假设须要*别的镜像安全性,能够使用见证server作为仲裁。见证server不是必须的,可是却是自己主动Failover(故障转移)功能必须的。见证server能够使用Workgroup(工作组版)或者Express版。
见证server用于检查镜像环境中,主体库和镜像库的联接是否正常。
见证server并不实际执行Failover,仅仅是告知镜像server:“主体server宕机了”。即使见证server也宕机了,仅仅是不能自己主动Failover而已,不影响镜像环境。能够把见证server理解为,仅用于回答:主体server是否已经宕机了?图1-2 是带有见证server的高安全性模式的示意图
图1-2 带有见证server的高安全性模式
当出现性能问题的时候。能够依据图1-2的步骤来一步一步侦測。
高性能模式。High-Performance Mode:
这样的模式是异步模式,仅仅能手动Failover。所以没有必要设置见证server(实际上是能够设置,可是没有不论什么意义。)。这样的模式会有数据丢失的可能。和高安全性模式相比,这样的模式不须要等待镜像server的确认,所以在网络条件不理想的环境下,是不错的选择。图1-3是高性能执行模式的示意图。
图1-3 高性能执行模式
同步、异步处理:
从图1-1 中能够看到,三种执行模式又能够分为两类处理,同步和异步。当镜像执行在同步模式下时。数据库的SAFETY选项为FULL。当镜像为异步时。数据库SAFETY的选项为OFF。两种高安全模式均为同步模式,高性能模式使用异步处理。
表1-1 列出了两种模式的主要特点:
表1-1 同步和异步模式的特点:
模式
版本号要求
数据丢失
SAFETY选项
性能影响
恢复速度
故障转移
同步
标准/企业
0丢失
FULL
网络可能影响性能
快
可自己主动
异步
企业版
有可能丢失数据
OFF
影响较小
依据须要提交的事务量而定
不可自己主动
图1-4 SQL Server镜像执行模式选择
SQL Server镜像的执行模式及其重要。直接影响到配置、预算及故障侦測和性能优化。
须要在前期做好评估,而且选择满足当前SLA要求的模式。
会话:
在配置完数据库镜像之后,就能够開始镜像会话。在镜像环境的全部server交互过程中。都通过会话来维护对方的状态信息。開始会话本质上就是開始主体数据库和镜像数据库的同步进程。
暂停和恢复会话:
当server出现性能问题时,暂停数据库会话能够暂时停止因为镜像带来的压力,可是要注意,暂停会话会导致日志依然活动。而且无法截断,假设时间持续太久。会引起日志文件的迅速增长,带来一系列的性能问题。
日志相关问题能够查看《SQL Server扫盲》中关于日志备份的文章。地址:http://blog.csdn.net/dba_huangzj/article/details/26844859
SSMS暂停会话:
能够通过图1-5中的方式暂时镜像会话
图1-5 暂停会话
T-SQL暂停、恢复会话:
可在主体库或者镜像库上执行以下的脚本暂停和恢复会话:
ALTER DATABASE AdventureWorks2008R2 SET PARTNER SUSPEND;--暂停会话 ALTER DATABASE AdventureWorks2008R2 SET PARTNER RESUME;--恢复会话
当数据库镜像会话启动后,主体server会发送事务给镜像server。全部未发送到镜像server的事务都被收集到发送队列(send queue)。在高安全性模式下。仅在镜像库处于暂停状态时才会建立send queue。
假设是高性能模式。不仅镜像处于暂停,即使server处于高使用率、网络慢、镜像server上有一个大型redo 队列或者其它原因都会引起send queue。
在镜像库中,已经传送过来可是未被写入镜像库的事务日志的事务会存放到redo queue中。假设redo操作失败,镜像server会暂停会话直到问题解决。
关于队列的介绍,将会在本系列的第六篇《监控和优化SQL Server镜像》中介绍。http://blog.csdn.net/dba_huangzj/article/details/26846203
注意:一个数据库仅仅能有一个镜像库。假设须要保持多个副本。能够借助日志传送加镜像。
镜像状态:
SQL Server镜像状态可能包括以下几种:
- SYNCHRONIZING:正在同步,通常在第一次启用数据库镜像时出现,表示镜像server正在追上主体server的进度。
- SYNCHRONIZED:已经同步完成。大部分时间都是这样的状态,一旦有爆发性的事务传输到镜像数据库。状态会从SYNCHRONIZED转变成SYNCHRONIZING。在高安全性模式下,这样的状态通常不会导致数据丢失,仅表示镜像server正在同步,可是在高性能模式下,可能有数据丢失的风险。
- SUSPENDED:挂起,当主体server不发送事务到镜像server时出现,在Failover发生后会出现这样的状态(假设镜像环境依然执行,仅使用Failover则不出现。可是假设镜像库断开连接,则会出现)。手动暂停镜像会话或者redo 日志错误发生时都会出现。
- PENDING_FAILOVER:仅当主体server变成镜像server而且断开用户连接时。会在原主体server出现这样的状态。在这样的状态下,主体server和镜像server都会表现这样的状态。可是见证server会出现:CONNECTED/DISCONNECTED/UNKNOWN的当中一种状态。
- CONNECTED:代表见证server能连到当中一个伙伴。另外两种代表不能连到伙伴server,这样的情况下。数据库会变成不可用。假设镜像环境使用了见证,而镜像server为DISCONNECTED,而且镜像server奔溃,那么数据库(即使在主体server上)都会变得无法訪问。所以当见证为disconnected。能够关闭见证,从而禁用仲裁。使用ALTER DATABASE <DB> SET WITNESS OFF实现。
- DISCONNECTED:当镜像环境中的伙伴均无法连接对方时出现。
能够使用sys.database_mirroring文件夹视图查看镜像信息。
切换角色:
相比其它高可用,镜像能够轻易切换角色。SQL Server镜像能够使用以下三种方式切换角色:
手动Failover:
使用T-SQL语句:
Use master
go
ALTER DATABASE <DB> SET PARTNER FAILOVER--在主体server上执行
使用SSMS:
图1-6使用SSMS实现手动Failover
注意:高性能模式下不支持手动切换
自己主动Failover:
带有见证server的高安全模式,当主体连接失败或者停止工作时。会自己主动切换到镜像server。当原主体server又一次连机时,这台原主体server会变成镜像环境中的镜像server。
可能丢失数据的强制切换:
这样的切换方式支持没有见证server的高性能和高安全模式,能够使用以下的T-SQL语句实现:
ALTER DATABASE <DB> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS --在镜像库执行
透明client重定向 :
由SQL Native Client(SNAC)提供,同意镜像环境下,应用程序自己主动重定向到镜像数据库中。
通过在连接字符串加上Failover_Partnerkeyword来实现。应用程序须要加入又一次尝试联接的功能。
SQL Server2008镜像的改进:
日志流压缩:
基于最小化网络带宽带来的影响,2008引入了日志流压缩功能,可是须要注意压缩和解压功能天生就会添加CPU的开销。
自己主动页还原:
在过去。页损坏是非常头痛的事情,而且非常难恢复。2008的镜像功能通过把镜像库的相应页恢复到主体库的页上,从而恢复数据。可是有些页镜像是不能回复的,比方文件头(page 0),数据库启动页(boot page。page 9),SGAM、PFS。可是对于以下的情况,镜像能够恢复:
- Error 823:OScyclic redundancy check(CRC)failure
- Error 824:logical errors including a bad page checksum or torn write
- Error 829:page has been marked as restore pending
SQL Server镜像各功能所需版本号:
一图抵千言。图1-7展示了SQL Server镜像中各个功能所需的版本号支持:
图1-7 SQL Server镜像中各个功能所需的版本号支持
其它高可用对照
截至SQL Server 2012为止,内置的高可用功能有集群(Cluster)、镜像(Mirroring)、复制(Replication)、日志传送(Log Shipping)和AlwaysOn(2012出现)。当中AlwaysOn基本上已经实现了集群、镜像的组合功能,所以本文不把镜像和AlwaysOn比較。
仅对其它部分比較。
具体信息能够看官方文档:
http://msdn.microsoft.com/zh-cn/library/ms190202(v=sql.105).aspx
以下简要介绍一下镜像和其它部分的对照:
集群(Cluster)
长处:
- 这部分特指2012之前的Cluster,它基于Windows 的故障转移集群,能够自己主动检測SQL Server的健康状态。进行自己主动故障转移切换(自己主动Failover)。而且它的切换时间差点儿等于SQL Server服务启动时间,除非有大量事务须要redo,否则一般不会延时非常久,和带有见证server的高安全执行模式一起被称为2012之前的0延时高可用技术。
另外两种都不能实现自己主动切换及0延时。
- 通过虚拟网络名称,client能够透明訪问活动实例,而不用改动程序的连接字符串。这一点比镜像有进一步的改进,镜像因为仅仅有一个镜像库,所以在第一次Failover成功之后。假设不做处理。镜像环境中原主体库即使又一次联机。
- 从2008開始能够指定对非活跃节点进行升级维护。
缺点:
- 使用共享磁盘,假设共享磁盘出问题,整个Cluster都会瘫痪。
- 非活跃节点一直处于停止状态,不能分摊负载,也造成资源浪费。
- 实施成本高,须要最少3台机且必须在域中。
- 故障转移是整个实例的,和镜像不同,假设仅仅有某个或者少数几个库出现故障须要Failover,镜像能够进行单独转移。可是Cluster不能够。这样会导致少数不相关的库受牵连。
Cluster有译成群集,只是这个无所谓,大家知道这个意思就可以。我个人偏向使用英文。
复制(Replication)
复制天生就不是一种高可用技术,实际上是用来进行数据同步而已。假设单纯进行高可用方案,复制不是一个首选方案。
长处:
- 实现对象级别的同步,能够细化到列和行。
- 订阅库(也就是复制环境下的目标库)是可读的,能够进行读写分离方案。
- 支持多个库订阅一个库。延时能够达到秒级。
- 能够使用不同的SQL Server版本号。
缺点:
- 不提供自己主动故障转移。
- 不保证对象0丢失。
- 故障侦測较为困难,错误信息往往不能非常明显地表现出问题。
- 对表的定义有一定限制。比方事务复制要求表必须有主键。
日志传送(Log Shipping)
长处:
- 目标库可作为报表使用。
而且过程中对主体server的压力非常小。
- 支持冗余多个副本,可进行远程暖备。
- 机制简单,故障侦測较为easy。
缺点:
- 不支持不同版本号的SQL Server。
- 延时是一定有的,不能实现全然同步。
- 不支持自己主动侦測和转移。
- 还原日志时。目标库不能对外訪问。
- 同步以库为单位。
以下借用《SQL Server 2012 实施与管理实战指南》上的一个表格来总结一下:
下一篇:第三篇——第二部分——第二文 计划搭建SQL Server镜像
功能
Cluster
日志传送
镜像
复制
保护级别
实例
库
库
数据库对象
数据丢失
/
可能
同步模式下无
可能有
自己主动故障转移
是
否
高安全模式下是
否
对client是否透明
是
否
是,但须要设置字符串
否
停机时间
基于服务重新启动
长
等于恢复时间
长
多备用库
否
是
否
是
备用副本可读
/
是
否
是
抵御误操作
否
是
否
否
抵御磁盘故障
否
是
是
是
是否须要特定硬件
Windows集群
无
要求较好的磁盘和网络
无
对性能影响
低
中
中
高
版本号支持
2000開始
2000開始
2005開始
2000開始