SQLServer2012AlwaysOnFailoverCluster安装部署文档1.AlwaysOn介绍AlwaysOn是SQLServer2012提供的全新综合、灵活、高效经济的高可用性和灾难恢复解决方案。它整合了镜像和群集的功能,基于OS故障转移群集(WindowsServerFailOverCluster),通过在同一个WSFC的不同Node上,安装独立的SQLServer实例,定义AlwaysOnGroup,一个数据库最多可以部署4个镜像。当热备机出现故障时,可以手工或自动实现故障转移,交换主、辅数据库的角色。AlwaysOn的亮点在于镜像可读。对于OLTP应用,可以将读操作集中的报表等操作转移到Read-Only的辅助库上,极大地减少PrimaryDB的IO、CPU等资源占用。由于辅助库是独立的SQL实例,因此创建临时表等TempDB操作不受影响。*注:AlwaysOnAvailabilityGroup中可以定义群集的DNS、IP、主、辅数据库、可用性模式、故障转移模式、数据库连接方式等,是AlwaysOnCluster的关键。1.1.可用性模式同步提交同步提交模式下,主数据库事务提交前,通知辅数据库,直到辅数据库提交成功后,主数据库成功提交。优点:数据受到完整保护,不会存在数据不一致。缺点:事务执行时间延长,效率降低。异步提交异步提交模式下,主数据库独立提交事务,不必等待辅数据库同步,同时将数据写入日志,辅数据库通过事务日志同步数据。优点:事务执行时间不受辅数据库影响,效率高。缺点:数据同步存在延时。*注:我们曾经测试过SQL2008镜像异步提交和同步提交的效率,异步模式下,延时的时间基本可以忽略,在大事务情况下,延时也仅在秒级。而同步模式下,一旦辅数据库出现异常,如网络连接等错误,那么主数据库将挂起,对于系统的影响巨大。考虑到报表对于数据实时性的要求在秒级以内完全可以接受,我们建议使用异步提交模式。1.2.故障转移模式手动转移(不存在数据丢失)主、辅库都是同步提交模式,且故障转移为手动,由SSMS发起FailOver命令。自动转移(不存在数据丢失)主、辅库都是同步提交模式,且故障转移为自动,不受人为控制,由WSFC自动仲裁。强制转移(存在数据丢失)主库是异步提交模式,且故障转移为手动,由SSMS发起FailOver命令。由于某种原因,主、辅库数据不同步,必须使用强制模式实现故障转移,此时可能存在数据丢失的情况,通常应用于突发的灾难恢复。当主、辅库SQL实例均从灾难中恢复正常后,可以通过数据移动功能确保数据同步。可用性模式和故障转移模式兼容表:手动转移自动转移强制转移同步提交√√√异步提交××√注:√表示兼容;×表示不兼容1.3.主、辅数据库连接方式DotNetFramework4.0以后版本,为了兼容新的灾难恢复AlwaysOnCluster数据库,连接串中增加了一个属性ApplicationIntent,用于标识应用程序连接到数据库的方式,ApplicationIntent有三种选项:1)Null。不设置ApplicationIntent,默认为ReadWrite,兼容.NET4.0以前的连接串。2)ReadWrite。3)ReadOnly应用程序通过AlwaysOn群集的DNS访问数据库群集时,首先路由到主数据库,然后根据应用程序连接的模式(Null、ReadWrite、ReadOnly)选择是否路由到Read-Only辅助库。主数据库连接方式a)允许所有连接。当我们设置主数据库允许所有连接时,应用程序任何时候都可以连接到数据库群集。b)允许读/写连接。当我们设置主数据库只允许读/写连接时,ApplicationIntent=ReadOnly的应用程序连接将被阻止,并抛出异常“数据库不允许只读连接”。辅数据库是否允许只读a)NO。辅数据库不允许读操作。b)Read-IntentOnly。辅数据库只读,且只允许ReadOnly连接。此选项意味着只能通过SqlCmd–KReadOnly、PowerShell、或者ApplicationIntent=ReadOnly的应用程序连接数据库。我们通常使用SSMS连接到该数据库是被禁止的。c)Yes。辅数据库只读,且兼容以前的连接方式。此选项意味着可以通过任何连接方式连接到辅数据库,且辅数据库只读。典型应用场景:辅数据库Readable主数据库NoRead-IntentOnlyYes允许所有连接辅数据库不可读,只做热备辅数据库可读,分担只读负载辅数据库可读,分担只读负载。同时辅数据库可以通过SSMS等连接查询数据。允许读/写连接主数据库不允许只读,防止只读压力负载到主数据库上,辅数据库只做热备,不可读一般不会这样设置,没有意义。辅数据库只能做热备,因为主数据库拒绝了只读连接,辅库实际上不可能读操作。无意义对于U9系统,我们希望的场景是正常情况下VDB1做业务,VDB2做报表,分担报表读的压力,同时做热备。一旦其中一台服务器发生故障,则由另一台DB接管所有操作,既做业务,又可作报表。针对这种应用场景,我们推荐的配置是主数据库允许所有连接,辅数据库只读方式为Yes。配置方案如下:2.SQLSERVER2012安装(Alwayson群集环境)安装操作系统故障转移群集和MSDTC,见《SQL2008群集配置指南(windows2008)》。2.1全新安装SQL2012输入序列号功能安装全部选择安装(选项)2.2所有服务器节点的数据库实例名称需要相同(默认实例)下一步下一步2.2使用域帐号管理2.3选择所安装数据库存储硬盘,可以是数据库服务器本地,也可以安装到磁盘阵列。下一步添加当前用户下一步下一步下一步2.4安装完成所有数据库服务器按照此步骤安装即可。3.配置AlwaysOn3.1.启动服务SQL服务-启用AlwaysOn可用性组,重启SQL服务。各群集节点相同。3.2.设置数据库完整恢复模式还原已有数据库添加已有数据库在主数据库上,将数据库设置为完整恢复模式(还需要备份)3.3.完整备份数据库完整备份数据库,可放在任意目录下。3.4.设置共享目录在主数据库上,设置网络共享目录,设置everyOne可写权限。主数据库会将TransactionLog自动备份到共享目录,辅助库通过TransactionLog同步数据。设置共享添加everyone权限3.5.创建AlwaysOnGroup任意指定可用性组名,如Group。选中已经备份的数据库,这里会校验是否满足要求,只有满足要求的DB才能选择。VDB1为主数据库,一旦发生故障转移作为辅数据库时,我们同样希望它可读,设置ReadableSecondary为Yes。端点页签,默认值,勿修改。备份策略,辅数据库优先。创建侦听器,侦听1433端口,设置AlwaysOn群集IP。(sql为数据库群集名称,配置U9时可以使用)回到副本页签,点击“添加副本”。连接到辅数据库。设置辅数据库可读,ReadableSecondary=yes。下一步。(如果连接报错,需要启动VDB2上SQLServerBrowser服务)指定3.4节中设置的共享目录。由于我们要做集群的库只在VDB1上存在,我们希望自动在VDB2上还原一个相同的库,选择Full。可以根据不同情况选择其它两项。验证可用性组,如果出现异常,必须按提示修复异常信息,直到成功。点击完成即可。全部成功即完成。3.6.设置连接方式在主数据库上,AlwaysOnHighgroup-可用性组-上一部创建的可用性组-鼠标右键-属性。设置如下,ConnectionsInPrimaryRole全部为允许所有连接,ReadableSecondary全部为Yes。3.7.检查Read-OnlyRoutingList步骤1:在主数据库-Master(执行的时候选择Master)数据库上,执行如下SQL:Select*fromsys.availability_read_only_routing_lists,查看返回结果,如下:因为我们的AlwaysOn群集有两个Node,因此RoutingList中应有两条记录。OK,检查通过。否则执行步骤2:步骤2:在主数据库上执行以下SQL:ALTERAVAILABILITYGROUPGroup#Group为Alwayson名称MODIFYREPLICAONN'VDB1'WITH(SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://VDB1.u9erp.com:1433'));#u9erp为域名称ALTERAVAILABILITYGROUPGroupMODIFYREPLICAONN'VDB2'WITH(SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://VDB2.u9erp.com:1433'));#VDB1VDB2为数据库服务器名称ALTERAVAILABILITYGROUPGroupMODIFYREPLICAONN'VDB1'WITH(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('VDB2','VDB1')));*注:Group为创建的可用性组名;VDB1、VDB2分别为主数据库、辅数据库名称。再次检查RoutingList,应已添加了两条记录。3.8.检查数据库同步情况步骤1:检查主数据库,使用SSMS连接到主数据库。主数据库状态应为已同步,可用性数据库应正常运行。见图中红色部分。步骤2:检查辅助库,使用SSMS连接到辅助库。由于我们选择的是异步提交模式,因此辅助库显示正在同步,正常。可用性数据库运行正常。3.9.测试Read-OnlyRouting我们希望当已ReadOnly方式连接数据库群集时,默认情况下,将请求转发到Read-Only辅助库,可以通过Sqlcmd命令测试路由情况,在命令行中执行下列命令:步骤1:Sqlcmd–S[群集DNS或者数据库侦听器名称]–E–d[群集库名]–KReadOnlySQL2012Cluster为DNS侦听名称,即数据库群集名称;demo为U9库的名称。*注:注意-K大写。步骤2:Select@@ServerName步骤3:GoVDB2为ReadOnly辅助库,测试结果返回VDB2,正常。如果返回VDB1,则说明辅助库路由没有起作用,请检查3.6节和3.7节设置是否正确。4.可用性副本未同步状态处理方法由于进行手动故障转移后,主节点、辅助节点出现未同步现象:解决方法:恢复数据移动数据移动恢复成功5.SQLServer2012ReportSvriceKBSQLServer2012ReportService运行在.NET2.0下,安装完SQLServer2012后,再安装微软补丁KB2654347。Windows2008R2,需要安装windows6.1补丁;Windows2008SP2,需要安装windows6.0补丁,见附件。