使用Microsoft Azure来运行关键性业务(Business Critical),数据库服务是一个非常关键的要求;而采用Azure IaaS(基础设施即服务),在Azure VM上部署SQL Server虚拟机,为了保证高可用性,采用AlwaysOn的故障自动转移群集(Failover Cluster)是一个明智且可行的选择。
为此,前阶段我曾制作了一个微软虚拟学院(Microsoft Virtual Academy,MVA)的系列课程,题目叫:《在Windows Azure VM上实现SQL Server高可用性及容灾设计》,里面包括了如何在Azure VM上部署SQL Server AlwaysOn方案的方法及一些最佳实践,具体网址在:
在我拥有的Azure订阅上,先后规划和部署了两套AlwaysOn Failover群集,分别选用了SQL Server 2012和SQL Server 2014企业版,他们处在同一个虚拟网络(Virtual Network)并公用一个域控制器(Domain Controller),如下图:
而在Microsoft Azure管理门户(Management Portal)上,则可以看到这些虚拟机和虚拟网络。如下图:
在实际运行中,如何掌握AlwaysOn群集的运行状态,包括出现状态异常后的诊断(diagnostics)和故障修复,成为考验大家的一个挑战性工作。
大家常用的工具是使用SQL Server Management Studio上的“View AlwaysOn Health Events”,这个功能在可用性集的仪表盘(Dashboard)页面上,如下图:
也可以进一步看一些关键的错误事件的详细信息,如下图:
但很多时候,AlwaysOn群集运行不正常,例如无法进行自动的故障转移、节点之间失去心跳连接等,往往大家会感到束手无策或力不从心。
如何能够更好地把握运行状态并进行诊断呢?下面介绍两个不错的方法。
第一个方法:从SQL Server的ErrLog查起。这个文件的地址在以下位置:
SQL Server 2014:
<Data Drive>:\Program Files\Microsoft SQL Server\MSSQL12.<instance name>\MSSQL\Log
SQL Server 2012:
<Data Drive>:\Program Files\Microsoft SQL Server\MSSQL11.<instance name>\MSSQL\Log
其中,<Data Drive>是SQL Server安装所在的盘符;<instance name>是所安装的实例名称。这些都可以通过文件浏览器看到。
在文件夹中,可能会看到多个ERRLOG文件,可以浏览日志文件的内容,或者通过关键字来查感兴趣的信息,如下图:
例如,可以查询涉及“AlwaysOn”、“Availability”、“fail”等信息,快速定位可能的错误或相关信息。
因为在部署SQL Server AlwaysOn方案的时候,使用了Failover Cluster的技术,而一些问题与发生故障时的转移有关。
第二个比较有用的工具就是查看群集的日志,具体操作是:
1. 在SQL Server虚拟机上利用Administrator权限,打开PowerShell控制台。
2. 运行下面的命令:
Get-ClusterLog -Destination <Destination Directory>
这里,<Destination Directory>为将要存储群集日志文件的磁盘及文件目录,例如e:\
更详细的指令说明,请见:http://technet.microsoft.com/en-us/library/ee461045.aspx
需要注意的是,系统会为每个群集的节点生成一个日志文件,文件尺寸可能会较大(具体要看日志的运行期间及实际情况,有时候日志文件可能会超过100M)。如下图:
3. 打开群集日志文件,可以浏览日志文件的内容,或者通过关键字来查感兴趣的信息。如下图:
”工欲善其事,必先利其器“。如上所示,手中有了这两把利器,在发现异常后,自然可以从容应对,快速诊断和定位,从而进一步制定故障修复的方案。