部署SQL2012 AlwaysOn可用性组<二>
!!!接上篇部署SQL2012 AlwaysOn可用性组<一>
一、向现有可用性组添加可读副本辅助服务器
1、新增一台w68服务器(IP:192.168.2.68/24),准备安装环境同w67
1)更新windows 2008 R2补丁
2)安装framework 3.5 sp1、故障转移集群组件
3)安装SQL 2012
2、w65服务器故障转移集群把w68服务器添加到集群中
1)打开“故障转移集群管理器”--选择SQLCluter.sz1card1.com集群--点击节点,右键添加节点,进入向导。
2)选择要进入服务器添加到集群,填入“w68”服务器名称,并添加
3)确认添加w68服务器到当前集群中去
4)确认加入集群完成信息
3、w68服务器SQL Server 2012配置启用高可用性组AlwaysOn
1)在“开始”菜单中点击“所有程序”-“Microsoft SQL Server 2012”-“配置工具”,打开“SQL Server配置管理器”,点击“SQL Server服务”节点,在右边窗口中右击“SQL Server (MSSQLSERVER)”,在上下文菜单中选择“属性”。修改登录账号为sz1card1\administrator,并启用AlwaysOn组,需要重启SQL Server服务才能生效
4、在w65服务器主副本上AlwaysOn添加可读辅助副本w68
1)"AlwaysOn高可用组"--高可用组--AGSQL01,右键“添加副本”,进入向导
2)连接到现有复制副本
3)指定副本,选择"添加副本"
4)设置w68副本为不同步提交,为可读副本,端点、备份首选项、侦听器(默认现在不创建),均默认。点击下一步
5)选择初始化数据,链接到\\w65\BackUp,备份目录
6)验证,并完成
7)检查w68服务器test数据库,状态为"正在同步"(由于没有选择同步条件方式),查询username表数据库
8)验证w68 test数据库是否可以插入/删除记录操作
INSERT INTO username VALUES(68,'Make')
4、重新设定仲裁,使用多数节点(推荐用于含有奇数个节点的群集,其他仲裁方式请操作官网或https://technet.microsoft.com/zh-cn/library/cc731739.aspx)
注意:可以承受的故障节点数为节点数的一半(四舍五入)减去一。
1)w65服务器打开"故障转移集群管理器"--选择当前的SQLCluter.sz1card1.com集群--右键打开“更多操作”--选择“配置集群仲裁设置”,进入向导
2)选择合适自身集群的仲裁配置,默认系统集群会判断适合当前的的仲裁选择,并确认
3)完成集群仲裁配置,这时这种仲裁方式,可允许当前集群1台节点故障
4)验证,这时停止集群节点中w68禁用网卡,观察集群是否停止正常运行?alwayson可用性组正常?
以上说明,当3个节点出现故障时,其中一个节点故障时不影响整个集群以及可用性组的可用性,即客户端访问数据
5、部署SQL2012 AlwaysOn可用性组<一>上篇只测试故障的手动切换,如果主副本出现故障时自动切换至辅助副本呢?在可用性副本中提供故障转移模式有自动和手动。
1)修改故障转移模式为自动。AlwaysOn高可用性组--可用性组AGSQL01,右键--属性,故障转移模式为自动,其他并确认
2)查看可用性组AGSQL01,显示面板当前组的状态,这时如果主副本w65节点宕机或离线,会自动故障转移至w67,事实是这样子的吗?下面验证一下。
3)验证故障自动转移,模拟w65节点故障(停止SQL server实例服务),自动转移至w67,并且观察w67节点可用性组AGSQL01是否自动提升为主副本。
以上说明故障自动转移,注意当前为3个节点,如果这时再出现一个节点故障,整个集群将无法使用!!!!!
二、SQL2012 AlwaysOn配置侦听器
1、可用性组侦听器概述
可用性组侦听器(由域名系统 (DNS)侦听器名称、指定的侦听器端口以及一个或多个 IP 地址组成,仅支持 TCP 协议)来提供到给定可用性组的数据库的客户端连接。可用性组侦听器是一个虚拟网络名称 (VNN),客户端可连接到此名称以访问 AlwaysOn 可用性组的主副本或辅助副本中的数据库。可用性组侦听器使客户端无需知道它要连接到的 SQL Server 物理实例的名称,即可连接到某个可用性副本。 无需修改客户端连接字符串,即可连接到当前主副本的当前位置。如果为一个或多个可读辅助副本配置了只读路由,则将主副本的读意向客户端连接重定向到可读辅助副本。 此外,如果主副本在某个 SQL Server 实例上脱机,且新的主副本在另一个 SQL Server 实例上联机,则可用性组侦听器允许客户端连接到新的主副本。
即可理解为SQL配置AlwaysOn可用性组后对外提供的是侦听器的IP和FQD让其他系统连接数据库时输入的是侦听器的IP和FQDN。
详细参考链接:https://technet.microsoft.com/zh-cn/library/hh213417(v=sql.110)
2、作为客户端,有以下几种访问方式
1)侦听器
客户端指向侦听器,侦听器无论何时都会将主副本的地址返回给客户端,因此,客户端应用程序可以像访问普通的数据库一样正常读取、写入 AlwaysOn 可用性组中的数据库。这是最常用的一种访问方式,因为不用关心当前的主副本在哪一个故障转移节点上以及何时发生故障转移。
2)副本的实例名称
客户端也可以指向副本的实例名称。如果当前实例的角色是主副本,则客户端连接不会遇到问题。在实际环境中,当前实例的角色可能发生故障转移从而成为辅助副本,这时候客户端连接可能会遇到错误。这种访问方式应当在明确目标副本的角色后才可以选用,并尽量避免因故障转移带来的影响。
例如,目标副本当前是辅助副本,且“可读辅助副本”选项为“否”,则客户端的连接将失败。又如,目标副本当前是辅助副本,且可以提供只读访问,但是当客户端发出修改数据的请求时,也会报错。
3)“只读意向”
客户端指向侦听器,并且在连接字符串中明确连接的目的为“只读意向”。侦听器则会将其中一个辅助副本的地址返回给客户端,而后客户端通过这个地址访问这个只读的辅助副本。
详细参考链接:http://www.mssqlmct.cn/dba/?post=100
3、创建可用性组侦听器(由于上篇部署SQL2012 AlwaysOn可用性组<一>,未进行侦听器配置,所以我们继续补充配置说明)
1)w65主副本服务器,AlwaysOn可用性组--AGSQL01右键,点击”添加侦听器“,进入配置向导
2)输入侦听器名称(AGSQL)和端口(1433,一般默认),ip为静态ip,点击”添加“,地址为192.168.2.71、24,确定并完成
3)添加完之后AD域控制器/DNS(192.168.2.218),会在AD中自动生成相应的对象和DNS自动生成相应的DNS记录
4、配置只读路由
1)主副本w65上高可用性组--右键属性,配置w65,w68的“可读辅助副本”设为“是”,w67的“可读辅助副本”设为“仅读意向”,使辅助副本能够响应从侦听器转来的“只读意向”。
也可以脚本如下:
USE [master] GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w65' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)) GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w68' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)) GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w67' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS =READ_ONLY )) GO --AGSQL01 #可用性组名称 --MODIFY REPLICA ON N'w65' #副本名称
2)在主副本w65服务器上执行以下脚本,添加只读路由 URL。每个只读路由 URL 都用于将只读意向请求路由到一个特定的可读辅助副本。通常,向每个可读辅助副本分配一个只读路由 URL。
脚本如下:
USE master GO ALTER AVAILABILITY GROUP AGSQL01 MODIFY REPLICA ON N'w65' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://w65.sz1card1.com:1433')); GO ALTER AVAILABILITY GROUP AGSQL01 MODIFY REPLICA ON N'w67' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://w67.sz1card1.com:1433')); GO ALTER AVAILABILITY GROUP AGSQL01 MODIFY REPLICA ON N'w68' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://w68.sz1card1.com:1433')); GO
--TCP://w68.sz1card1.com:1433 #自行设定的域名和端口
3)然后还要添加只读路由表,告诉侦听器按照怎样的先后顺序将辅助副本的地址返回给客户端。分别为每个副本设置作为主副本时的只读路由 URL。每个副本上配置的只读路由列表中的最后一个成员都是自己,表明当前面所有的只读副本都发生故障后,则还可以由主副本自己来响应这些“只读意向”。
脚本如下:
USE master GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w65' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('w68','w67','w65'))); GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w68' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('w65','w67','w68'))); GO ALTER AVAILABILITY GROUP [AGSQL01] MODIFY REPLICA ON N'w67' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('w65','w68','w67'))); GO
5、测试只读路由(客户端必须使用TCP协议连接到支持只读路由的AlwaysOn可用性组的侦听器,并且在连接字符串中将应用程序意向特性/属性设置为只读,而且必须引用该可用性组中的数据库)。
例如:
Server=tcp:AGSQL,1433; Database=test; IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True --AGSQL #侦听器名称 --Database #数据库
1)直接连接到侦听器
不附加任何连接字符串,直接连接到侦听器。然后通过查询 @@SERVERNAME 全局变量确认当前连接的实例。
2)连接到侦听器,并且使用连接参数
在 SSMS 登录界面,在“服务器名称”中输入侦听器的名称或 IP 地址。然后单击右下角的“选项”按钮。
在“其他连接参数”中输入连接字符串,指定目标数据库名称,指定只读意向。
参数为
Server=tcp:AGSQL,1433; Database=test;ApplicationIntent=ReadOnly;MultiSubnetFailover=True
连接到数据库引擎后,查看当前连接的实际节点。
三、删除AlwaysOn可用性组
1、必须先删除所有辅助副本,用 SSMS 连接到主副本w65,右键--属性,在“可用性副本”列表中选择一个辅助副本,然后单击右下方的“删除”按钮,最后单击“确定”按钮即可删除该辅助副本。
注:主副本不可以被删除。如果需要删除的副本当前是主副本,则需要先执行故障转移使其成为辅助副本。
2、再删除可用性数据库,w65在可用性组AGSQL01的树状列表中选择一个可用性数据库test库,右键单击它,然后在右键菜单中选择“从可用性组删除数据库”,单击“确定”按钮,完成删除。
3、再删除侦听器,w65在可用性组AGSQL01的树状列表中可用性组侦听器--AGSQL,右键单击它,然后在右键菜单中选择“删除”,单击“确定”按钮,完成删除。
4、最后删除可用性组,w65在可用性组AGSQL01,右键单击它,然后在右键菜单中选择“删除”,单击“确定”按钮,完成删除。
至此,整个AlwaysOn高可用性组安装部署、故障转移、只读路由、删除alwayson可用性组完结!!!同时也研究能把整个过程进行脚本化,提高部署管理AlwaysOn效率!!!
参考链接:https://technet.microsoft.com/zh-cn/library/hh213417(v=sql.110)
http://www.mssqlmct.cn/dba/?post=95
https://technet.microsoft.com/zh-cn/library/hh213002(v=sql.110).aspx
https://msdn.microsoft.com/zh-cn/library/ff877884(v=sql.110).aspx
https://msdn.microsoft.com/zh-cn/library/ff877884.aspx