SQL Server 2012 实施与管理实战指南Note:高可用性和灾难恢复技术
SQL Server 2012 实施与管理实战指南Note:高可用性和灾难恢复技术
SQL Server “高可用性”和“灾难恢复”四个传统技术:故障转移群集(Cluster)、日志传送(Log Shipping)、复制(Replication)和数据库镜像(database Mirroring)
“高可用性”与“灾难恢复”
数据库服务的可用时间=在线时间/(在线时间+宕机时间)
SQL Server服务由两部分组成:
- SQL Server作为应用服务,由Windows上的可执行文件提供功能。
- 储存在硬盘上的数据。
“高可用性”(High Availability,简称HA)指的是数据库服务能够始终保持在线运行,针对的是软件或硬件问题造成的数据库系统不可用。
“灾难恢复”(Disaster Recovery,简称DR)指的是当数据库中的数据发生损坏或者不可访问时,可以在尽可能短的时间恢复全部数据或者恢复尽可能多的数据,从而保证应用系统的正常运行,针对的是保存在数据库系统中的数据不可用。
SQL Server故障转移群集
SQL Server故障转移群集是一项基于Windows故障转移群集的一种技术。
Windows故障转移群集
结构
- Windows故障转移群集由多个服务器(Node)组成,每个Node都运行着Microsoft集群服务(MSCS)
- 共享磁盘(Shared Array):存放需要共享的数据,如SQL Server的数据库文件、错误日志等
- 本地磁盘(Drive C):每个节点的本地磁盘,存放不需要共享的内容。当某节点是活跃节点时,用户可以访问其本地磁盘而不能访问其他Node的本地磁盘。
- 私有网络(Private Network):由每个Node上的私有网卡相互连接形成,用于“心脏线”信号,即节点相互感知彼此是否正常工作,如某节点无法回应信号,即被排出群集。
- 公用网络(Public Network):外部资源通过节点上的公共网卡访问该节点。
- 混合网络(Mixed Network):由于私有网卡和公共网卡在物理上可以是一块网卡,群集可以通过一个网络完成私有和公共网络的功能。
- 虚拟服务器(Virtual Server):由群集内所有节点组成的一个(虚拟)服务器。有与群集内任何节点都不同的IP地址(虚拟IP)和机器名(虚拟网络名)。虚拟IP一定要和公共网络配置在同一个网段里。
- 资源:指在Windows群集中,虚拟IP,虚拟网络名,共享磁盘,SQL Server等等。在任意时刻,只有群集中的一个节点(活跃节点,用户实际登录的节点)能提供用户所需的服务和资源,而其他节点都处于空闲状态。
- 活跃节点:当前拥有该群集资源的节点,由Windows群集服务决定。
- 客户端的连接指令始终都是一样的:指向虚拟IP,或者虚拟网络名,对虚拟服务器的请求会被转向到活跃节点上。
故障转移(Failover)
当前拥有资源的节点NodeA出现故障时,Windows群集会自动发起故障转移,转移后NodeB拥有资源。
故障转移发生:
- 由于故障自动切换
- 系统管理员手动切换
SQL Server故障转移群集
SQL Server故障转移群集,即将SQL Server部署在Windows群集中的多个节点上以组成一个虚拟SQL Server实例。在当前活跃节点不可用时,SQL Server可以被切换到工作正常的节点上继续进行服务。
SQL Server群集资源组的结构
“资源组”是由一个或者多个(相互关联)的资源组成的组,在任何时候每个资源组都仅属于其“活跃节点”,所有的故障转移都是以资源组为单位发生。
对于SQL Server资源组,通常包含以下资源:
SQL Server网络名和SQL Server IP地址
SQL Server实例拥有专属的虚拟网络名和IP地址,它们提供了应用程序访问SQL Server时使用的机器名或者IP地址。SQL Server群集并不使用Windows群集的虚拟网络名和虚拟IP地址来作为应用程序访问它的接口。
SQL Server和SQL Server Agent
SQL Server群集中所有节点都安装有SQL Server和SQL Server Agent服务以及与服务所对应的二进制文件、注册表键值等。
在群集正常运行的情况下,只有活跃节点的SQL Server实例是Running的,其他节点上都是Stopped。
SQL Server资源名:
- SQL Server是默认实例,资源名为SQL Sever
- SQL Server是命名实例,资源名为SQL Server(实例名),eg “SQL Server (MSSQLSERVER)”
客户端程序通过“虚拟网络名”访问SQL Server实例。
共享磁盘
共享磁盘资源可以是一块逻辑磁盘,也可以是一块磁盘上的一个mount point。
共享磁盘保存SQL Server群集实例的:
- 数据库的所有数据文件和事务日志文件(MDF,NDF和LDF)
- SQL Server和SQL Server Agent的日志文件(ERRORLOG)
- 其他的文件和目录
共享磁盘和SQL Server必须在用一资源组里,SQL Server依赖于共享磁盘。
一个共享磁盘资源只能属于一个SQL Server实例,但是一个SQL Server群集实例可以使用多个共享磁盘。
其他
可能包含:
- File Share资源:如果 SQL Server要使用FileStream
- Analysis Services资源
资源状态
上线(online):该资源在某个节点上正常工作中。
离线(offline):该资源在某个节点上处于停止工作状态,无法提供相应的服务。
失败(failed):该资源在某节点尝试上线,但是由于某些异常无法上线成功。
上线挂起(online pending):资源尝试进入上线状态,但是还没完全成功上线。
离线挂起(offline pending):资源尝试进入离线状态,但是还没完全成功离线。
集群资源的配置
在 Properties中,我们可以对于群集资源进行设置:
Dependencies
一个资源所依赖的其他资源必须要和这个资源处于同一个资源组里,跨资源组的依赖关系是不存在的
Policies
Policies决定了该资源发生故障转移时的行为。
Affect the Group设置:
- If resource fails, attempt restart on current node
- If restart is unsuccessful, fail over all resources in this service or application
适用于:SQL Server资源,共享磁盘资源,虚拟IP地址资源,虚拟服务名资源
Not affect the Group设置:
- If resource fails, attempt restart on current node
- If restart is unsuccessful, fail over all resources in this service or application
适用于:(出于最大化高可用目的,消除不必要的Failover)SQL Server Agent资源,Fill Share资源,Analysis Services资源
Advanced Policies
Basic resource health check interval和Thorough resource health check interval是Windows
Cluster在不同时间间隔做的两种不同程度的检查(Looks alive check,Is alive
check),用于确认每个资源是否在正常工作。
SQL Server群集什么时候会发生“故障转移”
当Looks alive check或Is alive check检查失败时,进行故障转移。由于故障转移一般是意外发生的,所以SQL Server切换到新节点以后,还需要一段时间来做数据库的recovery。
群集里的每个资源都是一种资源类型。根据不同类型的资源,会使用不同的方式进行isalive和looksalive检查。 | 资源 | 资源类型 | | ---------- | ------------ | | 共享磁盘 | physicaldisk | | 虚拟IP | IP Address | | SQL Server | SQL Server |
Windows群集服务进程clussvc.exe会产生名为RHS.exe的进程,RHS.exe会装载resource dll,并且调用dll中定义的方法来检查相应resource的状态。一个资源其属性的Advanced Polices选项卡中如果没有勾选“run this resource in a separate Resource ”,它的resource dll就会装载在一个默认的RHS.exe中;反之,则会有一个单独的RHS.exe来装载该资源的resource dll。所以在任务管理器中你可能看到多个RHS.exe进程。
Windows群集自带的资源类型:
- physical disk, IP, network name和DTC等
- 检查的方法定义在resource DLL,
clusres.dll中
非Windows群集自带的资源类型:
SQL Server
如有专属资源类型和专属resource dll,在resource dll中定义检查方法
SQL ServerD的resource dll:
SQL Server资源(通常affect the group模式) -->
sqsrvres.dll Looksalive:默认5秒一次,通过服务控制管理器(Service Control Manager,简称SCM)检查SQL Server服务在活跃节点是否处于“启动状态”
Isalive:默认60秒一次,如lookalive检查的结果失败,立刻触发Isalive检查。SQL 2012之前,通过连 接SQL Server群集实例并获取运行命令的返回结果来进行判断。如果连接不上SQL Server群集实例或 者语句运行失败,那么Isalive检查失败。此时Windows群集会再做3-5次(根据Windows的版本和设置 不同)Isalive检查。如最终检查失败,则进行故障转移。
SQL Server Agent资源-->
sqagtres.dll
”通用服务“(Generic Service)资源类型:
- Analysis Service
- 使用
clusres.dll来作为resource dll并沿用定义进行检查。
Cluster-aware服务:
- 可以通过resource dll形成群集资源
- SQL Server、SQL Server Agent,Analysis Service服务
非Cluster-aware服务:
- 无法通过任何resource dll在Windows群集中形成资源,即使安装在群集的节点上也会被视作安装在单机环境,无法故障转移。
- SQL browser, Reporting Service等
- Integration Services不是Cluster-aware,可以人为配置为群集资源(不推荐),但是不具有自动故障转移功能。