SQLServer镜像简介

来源:IT165收集  发布日期:2014-05-26 22:44:04

原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563

  镜像是什么?说白了就是个镜子(没用过镜子?没镜子你总要小便吧?开个玩笑。。偷笑 ),这里镜子的含义主要有两个:1、一模一样,下面会详细介绍,包括库名、数据文件和日志文件的存放路径都要一样。2、看得到,却“用不了”,镜像库在没有做任何处理时是不可访问的。下面进入专业一点的解释:

  数据库镜像(SQL Server Mirroring)从SQL Server 2005 SP2开始引入,虽然从2008开始被列为“将会被弃用”的功能,但是由于其有很多优势,一直被广泛使用至今。本文将介绍镜像的基础,也会介绍和其他SQL Server提供的高可用方案的对比。《SQL Server扫盲》系列将会单独介绍各种高可用方案,所以这里不会过多介绍,主要是进行对比。

术语:

本系列将会用到很多镜像甚至高可用的术语,所以这里先介绍相关概念:

  • 主体服务器,Principal:在镜像环境中,包含活动库的源服务器,可以理解为主服务器。
  • 镜像服务器,Mirror:在镜像环境中,包含目标数据库的服务器,即镜像环境中的目标服务器。
  • 见证服务器,Witness:可选的一个服务器,用于监控主体服务器和镜像服务器,最主要的作用是进行自动故障转移(automatic Failover)。
  • 伙伴服务器,Partner:相对于镜像环境而言,镜像服务器就是主体服务器的伙伴服务器,而主体服务器也是镜像服务器的伙伴服务器。
  • 端点,Endpoint:绑定到网络协议中的对象,允许SQL Server通过端点在网络间交互。
  • 会话,Session:活动于镜像环境中,用于维护服务器之间的状态信息和关系。简单来说就是镜像环境中各个伙伴服务器之间信息的传递者。
  • 运行模式,Operating Mode:表示镜像环境的安全级别,镜像的运行模式有三种:带有自动故障转移的高安全性模式(带有见证服务器的同步模式),不带有自动故障转移的高安全性模式(没有见证服务器的同步模式),高性能模式(没有见证服务器的异步同步)。
  • 角色,Role:在镜像环境中的功能,同一时刻,一个特定的服务器只能是三种角色中的其中一种:主体、镜像或见证。

    运行模式:

      从大层面来说,SQL Server镜像只有两种模式:高安全模式和高性能模式。两种模式的主要区别在于在事务提交后的操作。可以从图1-1中查看运行模式。

      在高性能模式下,主体服务器不需要等待镜像服务器响应即可提交事务。

      在高安全性模式,需要把事务同步到镜像并得到响应后才最终提交主体服务器的事务。

    注意:不管使用何种模式,主体库都必须配置为完整恢复模式。

    图1-1 SQL Server镜像运行模式

    高安全模式,High-Safety Mode:

      这种模式是同步模式,可以细分为带有自动故障转移(即有见证服务器)的高安全模式和不带自动故障转移(即没有见证服务器)的高安全性模式。如果没有配置见证服务器,那么【带自动故障转移功能的高安全性(同步)】选项将会为灰色,即不可选。

      两者最大的区别在于是否引入见证服务器,前面提到过,见证服务器能作为仲裁,侦测主体服务器的状态,一旦见证服务器不能连接主体服务器,将把会话自动切换到镜像服务器,如果没有见证服务器,那么需要手动切换。

      在高安全模式下,事务必须在镜像库上提交,才能在主体库提交,这也意味着整套程序都必须等待镜像提交事务后才能最终提交,如果在网络情况不理想,将影响整个运行过程。高安全模式支持标准版和企业版,并且主体和镜像服务器必须是相同版本,比如不能一个是标准版,一个是企业版。

      如果需要最高级别的镜像安全性,可以使用见证服务器作为仲裁,见证服务器不是必须的,但是却是自动Failover(故障转移)功能必须的。见证服务器可以使用Workgroup(工作组版)或者Express版。

      见证服务器用于检查镜像环境中,主体库和镜像库的联接是否正常。见证服务器并不实际执行Failover,仅仅是告知镜像服务器:“主体服务器宕机了”。即使见证服务器也宕机了,仅仅是不能自动Failover而已,不影响镜像环境。可以把见证服务器理解为,仅用于回答:主体服务器是否已经宕机了?图1-2 是带有见证服务器的高安全性模式的示意图

    图1-2 带有见证服务器的高安全性模式

      当出现性能问题的时候,可以根据图1-2的步骤来一步一步侦测。

    高性能模式,High-Performance Mode:

      这种模式是异步模式,只能手动Failover,所以没有必要设置见证服务器(实际上是可以设置,但是没有任何意义。)。这种模式会有数据丢失的可能。和高安全性模式相比,这种模式不需要等待镜像服务器的确认,所以在网络条件不理想的环境下,是不错的选择。图1-3是高性能运行模式的示意图。

    图1-3 高性能运行模式

    同步、异步处理:

      从图1-1 中可以看到,三种运行模式又可以分为两类处理,同步和异步。当镜像运行在同步模式下时,数据库的SAFETY选项为FULL。当镜像为异步时,数据库SAFETY的选项为OFF。两种高安全模式均为同步模式,高性能模式使用异步处理。表1-1 列出了两种模式的主要特点:

    表1-1 同步和异步模式的特点:

    模式

    版本要求

    数据丢失

    SAFETY选项

    性能影响

    恢复速度

    故障转移

    同步

    标准/企业

    0丢失

    FULL

    网络可能影响性能

    可自动

    异步

    企业版

    有可能丢失数据

    OFF

    影响较小

    根据需要提交的事务量而定

    不可自动

    qqOs1rG909Owz+y1vcXk1sOhotSky+O8sLnK1c/V7LLius3Q1MTc08W7r6Gj0OjSqtTax7DG2tf2usPGwLnAo6yyosfS0aHU8cL61+O1scewU0xB0qrH87XExKPKvaGjPC9wPjxoMz674buwo7o8L2gzPjxwPiA8L3A+PHA+oaGhodTaxeTWw83qyv2+3b/ivrXP8dauuvOjrL7Nv8nS1L+qyry+tc/xu+G7sKGj1Nq+tc/xu7e+s7XEy/nT0Lf+zvHG9727u6W5/bPM1tCjrLa8zai5/bvhu7DAtM6su6S21Le9tcTXtMys0MXPoqGjv6rKvLvhu7CxvtbKyc++zcrHv6rKvNb3zOXK/b7dv+K6zb61z/HK/b7dv+K1xM2ssr29+LPMoaM8L3A+PGg0PtTdzaO6zbvWuLS74buwo7o8L2g0PjxwPiA8L3A+PHA+oaGhobWxt/7O8cb3s/bP1tDUxNzOysziyrGjrNTdzaPK/b7dv+K74buwv8nS1MHZyrHNo9a50vLOqr61z/G0+MC0tcTRucGmo6y1q8rH0qrXotLio6zU3c2ju+G7sLvhtbzWwsjV1r7SwL7Ju+62r6OssqLH0s7et6i92LbPo6zI57n7yrG85LPW0PjMq77Do6y74dL9xvDI1da+zsS8/rXE0bjL2dT2s6SjrLT4wLTSu8+1wdC1xNDUxNzOyszioaPI1da+z+C52M7KzOK/ydLUsum/tKG2U1FMIFNlcnZlcsmow6Sht9bQudjT2sjV1r6xuLfdtcTOxNXCoaO12Na3o7podHRwOi8vYmxvZy5jc2RuLm5ldC9kYmFfaHVhbmd6ai9hcnRpY2xlL2RldGFpbHMvMjY4NDQ4NTk8L3A+PGg0PlNTTVPU3c2ju+G7sKO6PC9oND48cD6hoaGhv8nS1M2ouf3NvDEtNdbQtcS3vcq91N3Ksb61z/G74buwPC9wPjxwPiA8aW1nIHNyYz0="http://www.it165.net/uploadfile/files/2014/0526/20140526214151529.png" alt="" />

    图1-5 暂停会话

    T-SQL暂停、恢复会话:

      可在主体库或者镜像库上执行下面的脚本暂停和恢复会话:

    ALTER DATABASE AdventureWorks2008R2 SET PARTNER SUSPEND;--暂停会话
    
    ALTER DATABASE AdventureWorks2008R2 SET PARTNER RESUME;--恢复会话

      当数据库镜像会话启动后,主体服务器会发送事务给镜像服务器,所有未发送到镜像服务器的事务都被收集到发送队列(send queue)。在高安全性模式下,仅在镜像库处于暂停状态时才会建立send queue。如果是高性能模式,不仅镜像处于暂停,即使服务器处于高使用率、网络慢、镜像服务器上有一个大型redo 队列或者其他原因都会引起send queue。

      在镜像库中,已经传送过来但是未被写入镜像库的事务日志的事务会存放到redo queue中。如果redo操作失败,镜像服务器会暂停会话直到问题解决。

      关于队列的介绍,将会在本系列的第六篇《监控和优化SQL Server镜像》中介绍。http://blog.csdn.net/dba_huangzj/article/details/26846203

      注意:一个数据库只能有一个镜像库,如果需要保持多个副本,可以借助日志传送加镜像。

    镜像状态:

    SQL Server镜像状态可能包含下面几种:

    • SYNCHRONIZING:正在同步,通常在第一次启用数据库镜像时出现,表示镜像服务器正在追上主体服务器的进度。
    • SYNCHRONIZED:已经同步完毕,大部分时间都是这种状态,一旦有爆发性的事务传输到镜像数据库,状态会从SYNCHRONIZED转变成SYNCHRONIZING。在高安全性模式下,这种状态通常不会导致数据丢失,仅表示镜像服务器正在同步,但是在高性能模式下,可能有数据丢失的风险。
    • SUSPENDED:挂起,当主体服务器不发送事务到镜像服务器时出现,在Failover发生后会出现这种状态(如果镜像环境依旧运行,仅使用Failover则不出现,但是如果镜像库断开连接,则会出现)。手动暂停镜像会话或者redo 日志发生错误时都会出现。
    • PENDING_FAILOVER:仅当主体服务器变成镜像服务器并且断开用户连接时,会在原主体服务器出现这种状态。在这种状态下,主体服务器和镜像服务器都会表现这种状态。但是见证服务器会出现:CONNECTED/DISCONNECTED/UNKNOWN的其中一种状态。
      • CONNECTED:代表见证服务器能连到其中一个伙伴,另外两种代表不能连到伙伴服务器,这种情况下,数据库会变成不可用,如果镜像环境使用了见证,而镜像服务器为DISCONNECTED,并且镜像服务器奔溃,那么数据库(即使在主体服务器上)都会变得无法访问。所以当见证为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--在主体服务器上执行

        使用SSMS:

        图1-6使用SSMS实现手动Failover

        注意:高性能模式下不支持手动切换

        自动Failover:

        带有见证服务器的高安全模式,当主体连接失败或者停止工作时,会自动切换到镜像服务器。当原主体服务器重新连机时,这台原主体服务器会变成镜像环境中的镜像服务器。

        可能丢失数据的强制切换:

        这种切换方式支持没有见证服务器的高性能和高安全模式,可以使用下面的T-SQL语句实现:

        ALTER DATABASE <DB> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS --在镜像库执行

        透明客户端重定向 :

        由SQL Native Client(SNAC)提供,允许镜像环境下,应用程序自动重定向到镜像数据库中。通过在连接字符串加上Failover_Partner关键字来实现。应用程序需要添加重新尝试联接的功能。

        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,否则一般不会延时很久,和带有见证服务器的高安全运行模式一起被称为2012之前的0延时高可用技术。另外两种都不能实现自动切换及0延时。
          • 通过虚拟网络名称,客户端可以透明访问活动实例,而不用修改程序的连接字符串,这一点比镜像有进一步的改进,镜像由于只有一个镜像库,所以在第一次Failover成功之后,如果不做处理,镜像环境中原主体库即使重新联机。
          • 从2008开始可以指定对非活跃节点进行升级维护。
            缺点:
            • 使用共享磁盘,如果共享磁盘出问题,整个Cluster都会瘫痪。
            • 非活跃节点一直处于停止状态,不能分摊负载,也造成资源浪费。
            • 实施成本高,需要最少3台机且必须在域中。
            • 故障转移是整个实例的,和镜像不同,如果只有某个或者少数几个库出现问题需要Failover,镜像可以进行单独转移,但是Cluster不可以,这样会导致少数不相关的库受牵连。

                Cluster有译成群集,不过这个无所谓,大家知道这个意思即可。我个人偏向使用英文。

              复制(Replication)

                复制天生就不是一种高可用技术,实际上是用来进行数据同步而已。如果单纯进行高可用方案,复制不是一个首选方案。

              优点:
              • 实现对象级别的同步,可以细化到列和行。
              • 订阅库(也就是复制环境下的目标库)是可读的,可以进行读写分离方案。
              • 支持多个库订阅一个库。延时可以达到秒级。
              • 可以使用不同的SQL Server版本。
                缺点:
                • 不提供自动故障转移。
                • 不保证对象0丢失。
                • 故障侦测较为困难,错误信息往往不能很明显地表现出问题。
                • 对表的定义有一定限制,比如事务复制要求表必须有主键。

                  日志传送(Log Shipping)

                  优点:
                  • 目标库可作为报表使用。并且过程中对主体服务器的压力很小。
                  • 支持冗余多个副本,可进行远程暖备。
                  • 机制简单,故障侦测较为容易。
                    缺点:
                    • 不支持不同版本的SQL Server。
                    • 延时是一定有的,不能实现完全同步。
                    • 不支持自动侦测和转移。
                    • 还原日志时,目标库不能对外访问。
                    • 同步以库为单位。

                        下面借用《SQL Server 2012 实施与管理实战指南》上的一个表格来总结一下:

                      功能

                      Cluster

                      日志传送

                      镜像

                      复制

                      保护级别

                      实例

                      数据库对象

                      数据丢失

                      /

                      可能

                      同步模式下无

                      可能有

                      自动故障转移

                      高安全模式下是

                      对客户端是否透明

                      是,但需要设置字符串

                      停机时间

                      基于服务重启

                      等于恢复时间

                      多备用库

                      备用副本可读

                      /

                      抵御误操作

                      抵御磁盘故障

                      是否需要特定硬件

                      Windows集群

                      要求较好的磁盘和网络

                      对性能影响

                      版本支持

                      2000开始

                      2000开始

                      2005开始

                      2000开始

Tag标签: 镜像   简介  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规