SQL Server 2012故障转移的looksalive check和is alive check
什么是looksalive check和is alive check
SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案。在集群运行过程中,windows集群服务定期检测节点的资源健康状态,如果发生了故障,会根据预先定义的故障转移策略把SQL Server服务从故障节点切换到可用节点上,从而实现SQL Server的高可用。
而looksalive和isalive就是windows集群服务定期检测节点的资源健康状况的两个方法,它们存在于 resource dll中。
根据资源类型不同,resource dll可分为两个大类。对于集群IP、DNS名称、服务服务(SQL Server)、集群磁盘等windows自带的资源类型,resource dll就是windows集群自带的Resource DLL——“clusres.dll”中;而对那些自己的专属资源类型的资源,他们有专属的resource dll,如SQL Server和sql server agent的resource dll分别为sqlrvres.dll和sqlatres.dll。
下图显示了集群里资源的类型及资源DLL与资源的关系:

原图来自《SQL Server 2012实施与管理实战指南》
looksalive check和is alive check检测原理
RHS.exe的进程(windows集群服务进程clussvc.exe生成的)通过调用定义了looksalive check和is alive check方法 resource dll来实现对资源的健康状态检测。
在SQL Server故障转移集群中,对于SQL Server资源,looksalive check和is alive check检测的原理如下:
looksalive是基本的健康状态检测,它通过服务控制管理器(SCM)来检查SQL Server服务在活跃点是否处于“启动状态”,默认每隔5秒检查一次。
isalive则通过windows集群服务去执行select @@servername(SQL Server 2012之前的版本)或sp_server_diagnostics(SQL Server 2012),然后根据返回的结果来判断SQL Server是否可用。它默认每隔60秒检查一次。
select @@servername是SQL Server 2012之前的版本执行isalive方法的操作。执行的结果返回给故障转移集群,如果故障转移集群收到返回的结果,则说明此资源目前在正常状态。反之,则说明此资源目前已经发生故障。
这种方法简单、“粗暴”,能够适应大多数场景,但如果此时SQL Server负载比较高,没有在60秒内响应,则可能发生误判,导致故障转移发生。为了解决这个问题,在SQL Server 2012及以后的版本上,微软改进了isalive检查方法,不再使用select @@servername,取而代之的是使用存储过程sp_server_diagnostics。

相比select @@servername而言,sp_server_diagnostics返回的结果要详细得多(如上图)。SQL Server会利用内部算法来处理sp_server_diagnostics的结果,然后从多个维度来评估SQL Server的健康状况(系统、资源、查询、IO等),从而作为windows故障转移集群判断是否需要进行故障转移的依据。除此之外,SQL Server 2012还做了特别的优化:
执行sp_server_diagnostics的线程使用抢占模式,且线程的OS优先级也高于普通线程;
sp_server_diagnostics每隔20秒执行一次,默认情况下如果3次(60秒)执行的结果都显示SQL Server资源处于故障状态,才发生故障转移
说明:之所以是60秒,是因为“资源属性”的HealthCheckTimeout默认为60秒,可以人为改变大小,但一般保持默认即可。
配置looksalive check和isalive check
looksalive和isalive检测的间隔时间可以在“资源属性”的“高级策略”里面设置,一般采用默认即可,如需更改,可参考下图的位置设置。

SQL Server 2012故障转移的looksalive check和is alive check的更多相关文章
- 在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群
需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服 ...
- 在Windows Server 2012中搭建SQL Server 2012故障转移集群
OK~ WSFC 2012 R2 年度盛宴开始~ 在本文中,老王将用一系列的场景,把动态仲裁,动态见证,票数调整,LowerQuorumPriorityNodeID,阻止仲裁等群集仲裁技术串起来,完成 ...
- AlwaysOn可用性组功能测试(二)--SQL Server群集故障转移对AlwaysOn可用性组的影响
三. SQL Server群集故障转移对AlwaysOn可用性组的影响 1. 主副本在SQL Server群集CLUSTEST03/CLUSTEST03上 1.1将节点转移Server02.以下是故障 ...
- SQL Server AlwaysOn 故障转移
目的: a) AlwaysOn 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案. b) 当数据库服务器SQL1出现故障宕机时,可以通过AlwaysOn可用性组,自动故障转 ...
- SQL SERVER 2012 从Enterprise Evaluation Edtion 升级到 Standard Edtion SP1
案例背景:公司从意大利购买了一套中控系统,前期我也没有参与其中(包括安装.实施都是第三方),直到最近项目负责人告诉我:前期谈判以为是数据库的License费用包含在合同中,现在经过确认SQL Serv ...
- 系统升级日记(1)- 升级到SQL Server 2012
最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...
- 图文详解在Windows server 2008 R2上安装SQL Server 2012集群
1.准备: 4台服务器(1台AD.2台SQL服务器.1台iSCSI存储服务器) 9个IP(1个AD的IP.2个SQL服务器的IP.2个心跳IP.1个iSCSI存储服务器的IP.1个集群IP.1个DTC ...
- 基于iSCSI的SQL Server 2012群集测试(四)--模拟群集故障转移
6.模拟群集故障转移 6.1 模拟手动故障转移(1+1) 模拟手动故障转移的目的有以下几点: 测试群集是否能正常故障转移 测试修改端口是否能同步到备节点 测试禁用full-text和Browser服务 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...
随机推荐
- Knockout.js随手记(6)
实时反映对象属性的变化 在前一篇博客中我们使用了如下代码去新增user对象,即push方法: $("#btnAddUser").click(function () { vm.use ...
- sqlserver 查找某个字段在哪张表里
select [name] from [库名].[dbo].sysobjects where id in(select id from [库名].[dbo].syscolumns Where name ...
- Android 延时执行任务的三种简单方法
开启一个新的线程 new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (Interrupted ...
- 服务升级中的zookeeper
服务升级中zookeeper可以管理服务中的配置以及作为leader选举以及分布式事务等, 在这次主要用于配置管理,关于配置管理主要设计如下,通过zookeeper管理配置项,通过 管理界面来管理数据 ...
- C#版 Winform界面 Socket编程 Server服务器端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 获取终端ip地址
网上找的,记录下 import java.io.*; import java.net.*; import java.util.*; //import org.apache.http.conn.util ...
- 【JBOSS】User not found SA
启动JBOSS 发现报User not found: SA 错误, 找了老半天才找到处理方法,异常日志如下: java.sql.SQLException: User not found: SA at ...
- JAVA面试逻辑题1
一.计算推理 烧香问题: 有两根不均匀分布的香,每一根烧完的时间都是一小时.用什么办法确定一段15分钟的时间? 解题步骤: 1.点燃第一根的两头,同时点燃第二根的一头: 2.等到第一根燃尽以后,再点燃 ...
- linux系统目录结构与层级命令使用
笔者使用的是ubuntu,这里以ubuntu为例子. 一.目录层级结构说明: 1./---------(根目录),所有的目录都挂在其下: 2./boot--------- 存放Ubuntu内核和系统启 ...
- ubuntu 16.04 安装完QQ后,更新或apt-get报错
apt-get install python-pip正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 您可能需要运行“apt-get -f install”来纠正 ...