1. SQL Server 群集资源组的结构
一个 SQL Server群集资源组通常有:
a. SQL
Server 网络名和 SQL Server IP 地址
b. SQL
Server 和 SQL
Server Agent
c. 共享磁盘
d. 其他
除了上述列出的资源外 ,SQL Server 资源组里还包含如下资源:
• File Share :如果 SQL Server 要使用 FileStream ,就需要这样一个资源。
• Analysis Services :这个资源和 SQL Server/ SQL Server Agent 资源不同,是属于 Generic Service 资源
2. SQL Server 群集什么时候会发生 “故障转移”
对于 physical disk 、IP 、network name 和 DTC 这类 Windows 群集自带的资源类型 。它们各自的 isalive 和 lookalive 方法都定义在一个 Windows 群集自带的 Resource DLL “clures.dll” 中。
对于那些非自带的资源 ( 例 如 SQL Server ),如果它们有自己专属的资源类型并且有专属 resource dll ,就可以在 Resource DLL 中定义自己 的 isalive 和 looksalive 检查方法 。有些资源、没有特定的资源类型 ,我们称这类资源的资源类型为 “通用服务” ( Generic Service )。对于 Generic Service 类型的资源,Windows 群集依旧使用 clusres.dll 来作为它们的 resource dll。 clusres.dll 里有针对 Generic Service 的 “标准” isalive 和 lookalive 检查方法。
在安装 SQL Server 的时候,会安装两个 SQL Server 自己的resource dll:
sqsrvres.dll 和 sqagtres.dll ,它们分 别服务于 SQL Server 资源和 SQL Server Agent 资源。一般只会把 SQL Server 资源配置成 affect the group 模式 , 因此耍了解 SQL Server 群集什么情况下会故障转移 ,就要了解sqsrvres.dll 是怎么定义 looksalive 和 isalive 方法 的。事实上 ,从 SQL Server 2000 到 SQL Server 2008 阳,sqsrvres.dII 中定义的 looksalive 和 isalive 方法都是类 似的。具体来讲 :
• Looksalive :通过服务控制管理器 ( Service Control Manager, SCM ) 来检查 SQL Server 服务在活跃结点是否处于 “启动状态” 。根据 SQL Server 资源的 Advanced Polices 选项卡中的设置 ,这个检查默认是 每 5 秒做一次。
• lsalive :根据 SQL Server 资源的 Advanced Polices 选项卡中的设置,这个检查默认是每 60 秒钟做一次 , 也就是说每 12 次 Looksalive 检查就会伴随一个 Isalive 检查。
SQL Server 需要 lsalive 检查是因为即使 SQL Server 服务是正在运行状态也不能说 明 SQL Server 就可以良好地响应应用程序的请求 。有的时候可能 整个 SQL Server 已经挂起了,但是服务的状态还是 “启动” ,所以需要 lsalive check 来进一步检查 SQL Server 的状态。此外 ,一旦 lookalive 检查的结果失败 ,Windows 群集服务就会立刻触发 lsalive 检查。
前面提到过 ,除了 SQL Server 和 SQL Server Agent 以外,SQL Server 资源组里可能还会有 Analysis Service 资源。但是和 SQL Server/SQL Server Agent 不同的是 ,Analysis Service 资源没有 自己的资源类型 ,也就是说它 是一个 Generic Service ( 通用服务 )。Analysis Service 的 isalive 和 looksalive 检查就使用的是 clusres.dll 中定义 的通用服务检查方法 。
SQL Server 的诸多服务和组件中 ,SQL Server, SQL Server Agent
及Analysis Service 三个服务无论是有自己专属的资源类型还是通用服务 ,都是被设计为可以通过 resource dll 形成群集资源 。这种类型的服务被称为 cluster-aware a SQL Server 。还有很多其他资源 ,比如SQL browser 、Reporting Service 等,它们被设计成无法通过 任何 resource dll 在 Windows 群集中形成资源,所以它们不是 cluster-aware 的。对于不是 cluster-aware 的服务,即 使被安装在了群集的结点上,Windows依旧把它当成是安装在了一个单机环境 中,它它无法具有故障转移的功能 。
需要提一下的是 Integration Services 是一个比较特别的服务 。Integration Services 本身不是 cluster-aware 的 服务 ,但是用户可以通过一些步骤子动把它配 置成一个群集资源。但是这样配置出来的 Integration Services 群集资源不是一个真正的资源 ,是不具有自动故障转移功能的 ,因此微软并不推荐这么做。更多的信息可以参考:
简而言之,cluster-aware 的服务有:
·
SQL Server (via sqsrvres.dll)
·
SQL Server Agent (via sqagtres.dll)
·
SQL Server Analysis (via clures.dll)
Non-cluster-aware 的服务(从而不具有自动故障转移功能)有:
· SQL browser
· Reporting Service
· Integration Services