(转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html
这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的
步骤
这一篇依然使用step by step的方式介绍怎麽搭建AlwaysOn
请先使用本地用户Administrator登录这两个集群节点并执行下面的操作,先不要用域用户DCADMIN登录

1、两个集群节点都需先安装.NET Framework 3.5(在Windows Server 2012 R2中使用添加功能来安装)。



2、安装sqlserver
注意: 一定要用 administrator 账户登录 windows server 安装, 而不是 域账户 DCADMIN
选择全新SQL Server独立安装,不要选择新的SQL Server故障转移集群安装

至于安装过程,默认下一步下一步就可以了,跟单机安装SQL Server没有区别,这里就忽略安装过程了

注意:因为本人的安装包已经自带SP1补丁包,为了后续避免踩坑,如果没有安装SP1或以上补丁包的,请先安装

注意:如果一开始使用域用户DCADMIN来登录集群节点机器,并安装SQL Server的时候会遇到一个坑,SQL Server安装程序会连接故障转移集群,但是实际上单机安装SQL Server根本不需要连接故障转移集群

3、注销集群节点计算机,然后使用域用户DCADMIN登录,然后设置SQL Server的启动账户为域用户DCADMIN

打开服务管理器,先修改SQL代理的启动账户为域用户DCADMIN,然后再修改SQL 引擎的启动账户为域用户DCADMIN

点击“位置”,修改查找位置,选中abc.com
点击“高级”

点击“立即查找”,选中DCADMIN


点击“确定”
输入域用户DCADMIN的密码

重启一下SQL代理服务

重启之后可以看到登录用户为DCADMIN@abc.com

同样,SQL引擎服务也需要同样的设置

这样,SQL引擎服务和SQL代理服务都用域用户DCADMIN启动
另一个集群节点的SQL Server也需要做同样的操作
注意:在集群节点脱离域之后,SQL引擎服务和SQL代理服务都要用本地服务帐号来启动,不能再用域用户来启动
4、将DCADMIN域用户加入到两个集群节点的SQL Server登录用户中,服务器角色选择sysadmin
先用sa登录SQL Server

添加登录用户,跟SQL 服务添加启动账户的步骤一样,将DCADMIN域用户添加为登录用户



给予sysadmin权限

两个集群节点都可以用DCADMIN域用户来登录SQL Server


5、回到SQL Server配置管理器,启用AlwaysOn可用性组


注意:集群节点一定要能进行通信,如果集群节点之间断开通信,那么启用AlwaysOn的时候会报错

重启SQL Server

如果AlwaysOn启用成功,在服务器属性里可以看到启用HADR为True


6、在其中一个集群节点的SQL Server中验证各节点的投票数 ,在其中一个集群节点的SQL Server上执行
使用下面SQL语句
SELECT * FROM sys.dm_hadr_cluster_members;

SELECT * FROM SYS.[dm_hadr_cluster]

7、再次确保各节点已经关闭防火墙,如果防火墙没有关闭,那么在创建可用性组的时候会弹出下面错误
无法将数据库“test”联接到可用性副本“xxx”的可用性组“xx”
针对主副本的连接未处于活动状态。无法处理该命令(错误:35250)


8、在各个节点创建初始数据库
先备份一个你要在所有节点用的数据库 AnuoApc.bak , 然后在各个节点还原, 用如下sql:
--注意一定要用NORECOVERY来还原备份
USE [master]
RESTORE DATABASE [test] FROM DISK = N'C:\DBBackup\AnuoApc.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY, REPLACE, STATS = 5 GO
在WIN-5PMSDHUI0KQ上还原日志备份之后的样子

9、在“Alwayson高可用性”节点上右键选择“新建可用性组向导
注意:加入到AlwaysOn可用性组的数据库必须符合下面要求
(1)数据库的恢复模式必须是“完整”恢复模式
(2)数据库已进行了一次完整备份
(3)需要是用户库,系统库不能加入可用性组
(4)数据库可以读写,只读库不能加入到可用性组
(5)数据库处于多用户模式
(6)数据库没有使用AUTO_CLOSE
(7)不属于任何其他的可用性组
(8)数据库没有配置数据库镜像
一个可用性组最大支持100个数据库


10、点击“下一步”,输入一个从未使用过的高可用性组名称 testAG

11、点击下一步,选择要添加的数据库

12、点击“下一步”,使用添加副本来将其他节点添加到可用性组中,并选择自动故障转移节点和同步提交节点,因为我们只有两个节点

我们将辅助副本设置为可读,能够自动故障转移,同步提交模式

13、点击“端点”tab页面设置端点


注意:端点URL使用IP的方式,不要用FQDN长名的方式,因为服务器通常会有两个网卡,一个public网卡,一个private网卡,端点建议使用private网卡地址
这样在端点直接传送的数据就会经由private网卡来传送,使用TCP://test.abc.com:5022 这种FQDN长名的方式是不能保证端点数据通过private网卡来传送
SQL Server服务账户使用域用户DCADMIN来进行身份验证,避免使用证书的方式
14、“备份首选项”和“侦听器”不需要设置,保持默认就行,可用性侦听器我们后面再添加,可以直接点击“下一步”

点击“是”
15、选择初始数据同步,这里选择“仅联接”模式

16、点击“下一步”来验证配置,对应侦听器配置警告可以忽略,后期来添加侦听器
因为使用的是“仅联接”数据库初始化方式,验证跳过像可用磁盘空间这样的检查

17、点击“下一步”来检查并确认之前的配置信息,若无误,点击“完成”。另外,此处也可保存建立可用性组脚本,以便分步诊断故障之用。

18、所有摘要均成功完成,显示绿色对勾。如果出现黄色警告,则需进行进一步判断是否成功。若出现红色错误,表示AG创建不成功


注意:如果大家使用奇数集群节点,并且仲裁配置使用的是节点多数,那么在创建可用性组完毕的时候,WSFC仲裁投票配置会显示警告
点击警告链接会弹出下面的对话框,这个警告其实可以不用理会


19、查看服务器和数据库的变化
主副本
数据库变为已同步

辅助副本
辅助副本这时候是可读的,在主副本上对test1表做的更改都能同步到辅助副本上的test1表

再看一下故障转移集群管理器
可用性组变为一个集群角色


点击显示面板可以显示可用性面板



20、在创建可用性组后,在“可用性组侦听器”上右键添加侦听器来创建侦听器,选择静态IP的网络模式(尽量不要选择DHCP网络模式),
输入一个从未使用过的名称(该名称将被用来创建网络名称资源)和访问端口


点击确定

创建成功

在域控的DNS管理器上会注册一条A记录

在AD里的Computers容器里会添加一个故障转移集群虚拟网络名称账户

在故障转移集群管理器里的角色节点,可以看到客户端访问名称和IP地址,客户端通过这个访问名称进行访问数据库


使用侦听器名称进行登录SQL Server


当然也可以用listener IP来连接SQL Server


在辅助副本添加登录用户,让主副本上的登录用户也可以读取辅助副本数据
步骤1:查看主库上该账号的sid [test]为库名
SELECT * FROM [test]..sysusers
比如:dalogin 0x99AD266AFD26F841B3E49EF9633B0D4B
步骤2:在副本数据库上创建对应账号,其中 sid对应的值是主库上所查到的sid的值
CREATE LOGIN [dalogin] WITH PASSWORD=N'xxxxxxx',
SID =0x99AD266AFD26F841B3E49EF9633B0D4B, DEFAULT_DATABASE=[test],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
可用性组的基本管理
注意:尽量用SSMS的UI或TSQL语句来操作可用性组,不要用故障转移集群管理器来操作
故障转移
首先使用 侦听器名称来登录SQL Server,查看当前是在主副本是在哪个机器

手动故障转移
选中testAG这个可用性组,右键-》故障转移


点击“下一步”

点击“下一步”

连接到 WIN-5PMSDHUIOKQ这台辅助副本机器


点击“完成”

开始进行故障转移


再一次执行查询

已经故障转移到WIN-5PMSDHUIOKQ这台机
查看一下testAG可用性组的属性


执行下面SQL语句,将WIN-7107JJJ2BCC机器设置为可读副本
USE [master]
GO
ALTER AVAILABILITY GROUP [testAG]
MODIFY REPLICA ON N'WIN-7107JJJ2BCC' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL))
GO
执行下面SQL语句测试一下
在当前主副本执行
insert into test1 select 3, 'test3'

可以看到数据已经同步过来WIN-7107JJJ2BCC机器,并且数据库可读
可读辅助副本是只读的,如果要对它进行数据更改则会报错
print 'servername: '+@@SERVERNAME insert into [test].[dbo].[test1] select 4, 'test4'

AlwaysOn相关视图
--通过这两个视图可以查询AlwaysOn延迟
SELECT b.replica_server_name ,
a.*
FROM sys.dm_hadr_database_replica_states a
INNER JOIN sys.availability_replicas b ON a.replica_id = b.replica_id --可用性组所在Windows故障转移集群
SELECT * FROM sys.dm_hadr_cluster;
SELECT * FROM sys.dm_hadr_cluster_members ;
SELECT * FROM sys.dm_hadr_cluster_networks;
SELECT * FROM sys.dm_hadr_instance_node_map;
SELECT * FROM sys.dm_hadr_name_id_map --可用性组
SELECT * FROM sys.availability_groups;
SELECT * FROM sys.availability_groups_cluster;
SELECT * FROM sys.dm_hadr_availability_group_states ; --可用性副本
SELECT * FROM sys.availability_replicas;
SELECT * FROM sys.[availability_read_only_routing_lists]
SELECT * FROM sys.dm_hadr_availability_replica_cluster_nodes;
SELECT * FROM sys.[dm_hadr_availability_replica_cluster_states]
SELECT * FROM sys.[dm_hadr_availability_replica_states] --可用性数据库
SELECT * FROM sys.availability_databases_cluster;
SELECT * FROM sys.dm_hadr_database_replica_cluster_states;
SELECT * FROM sys.[dm_hadr_auto_page_repair]
SELECT * FROM sys.[dm_hadr_database_replica_states] --可用性组listener
SELECT * FROM sys.availability_group_listener_ip_addresses;
SELECT * FROM sys.availability_group_listeners;
SELECT * FROM sys.dm_tcp_listener_states; --添加只读路由列表
ALTER AVAILABILITY GROUP [agtest2]
MODIFY REPLICA ON N'WIN-5PMSDHUI0KQ' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS= READ_ONLY)); ALTER AVAILABILITY GROUP [agtest2]
modify REPLICA ON N'WIN-5PMSDHUI0KQ' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://192.168.66.157:1433')) ALTER AVAILABILITY GROUP [agtest2]
MODIFY REPLICA ON N'WIN-4AE61RVA6UV' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS= READ_ONLY)); ALTER AVAILABILITY GROUP [agtest2]
modify REPLICA ON N'WIN-4AE61RVA6UV' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://192.168.66.158:1433'))
总结
AlwaysOn搭建步骤就介绍到这里,希望大家跟着我来体验一下AlwaysOn的强大
同样的,添加一个辅助副本的操作: 加域、加入故障转移集群、更改仲裁配置、添加辅助副本
按照文章的来操作相信添加辅助副本也不难
还有一个就是遇到问题多看看SQL Server errorlog和WSFC的事件日志


对于更多信息可以参考《SQLSERVER2012实施与管理实战指南》书本
地址: http://product.dangdang.com/1419881008.html
相关文章
http://www.cnblogs.com/stswordman/p/3821538.html
http://www.cnblogs.com/stswordman/p/3850570.html
http://www.cnblogs.com/stswordman/p/3936584.html
http://www.cnblogs.com/stswordman/p/3252549.html#3229105
http://blogs.msdn.com/b/psssql/archive/2012/09/07/how-it-works-sql-server-alwayson-lease-timeout.aspx
http://blogs.msdn.com/b/alwaysonpro/archive/2014/11/26/diagnose-unexpected-failover-or-availability-group-in-resolving-state.aspx
https://msdn.microsoft.com/zh-cn/library/ff878308%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
http://www.bubuko.com/infodetail-930336.html 创建了一个弱事件,但它位于错误对象上 下载补丁解决 (https://www.microsoft.com/en-us/download/details.aspx?id=36468)
http://blogs.msdn.com/b/alwaysonpro/archive/2013/10/30/errors-while-trying-to-create-an-availability-group-listener.aspx 19471错误
创建侦听器错误19471,19476 问题
http://blogs.msdn.com/b/alwaysonpro/archive/2013/10/30/errors-while-trying-to-create-an-availability-group-listener.aspx
http://blogs.msdn.com/b/alwaysonpro/archive/2014/03/25/create-listener-fails-with-message-the-wsfc-cluster-could-not-bring-the-network-name-resource-online.aspx
如有不对的地方,欢迎大家拍砖o(∩_∩)o
2015-11-13补充

两个节点的AlwaysOn ,用共享文件夹做见证磁盘
当自动故障切换的时候,有时候出现,辅助副本正在解析的现象,之前以为是仲裁丢失(WSFC与文件共享见证失去联系),导致WSFC挂掉,后来发现原因是WSFC控制面板里的角色属性里面的最大故障数的问题而导致的
推荐将指定时段内的最大故障数设置为10


2015-12-9补充
卸载集群
1、先逐个逐出节点

2、集群node(随便一个集群node)上执行下面命令,不能在DC上执行,因为DC没有安装故障转移集群,sqltestdemo1为集群名
Get-Cluster sqltestdemo1 | Remove-Cluster -Force -CleanupAD
3、集群最后一个节点不能逐出,只能销毁集群

4、销毁集群后在每个集群上的powershell里运行下面命令,以清除一些垃圾
Clear-ClusterNode

5、在域控的AD用户和计算机界面里面把集群虚拟名称删除掉

6、重新启用和禁用alwayson,在alwayson的各个节点上都要操作一遍

删除可用性组
1、删除辅助副本
USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE REPLICA ON N'SQLSVR2';
GO
2、删除可用性数据库
USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE DATABASE [SQLDB02];
GO
3、删除侦听器
USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE LISTENER N'SQLAG01';
GO
4、删除可用性组
USE [master]
GO
DROP AVAILABILITY GROUP [HAGroup01];
GO
5、在域控的AD用户和计算机界面里面把侦听器虚拟名称删除掉

alwayson注意问题
http://www.cnblogs.com/lyhabc/articles/5310781.html
关于AlwaysOn备份
msdn上和《SQL Server2012实施与管理实战指南》上都没有说道主副本所支持的备份类型
经过测试,主副本跟单实例的SQL Server一样,完整备份、差异备份、日志备份都支持

故障切换判断条件
第一步
lookalive 5秒/次 telnet 1433端口 超时30秒
第二步
isalive 60秒/次 sp_server_diagnoist 超时60秒 超时后再执行3次以防误判
从sql server2012开始使用sp_server_diagnoist比select @@servername判断更准确
防止sqlserver压力大导致的误判
《SQL Server2012实施和管理实战指南》 P42 P50 P53
副本之间 10秒/次 相互ping,如果不通,比如辅助副本不通,会显示为disconnect
AlwaysOn注意问题:http://www.cnblogs.com/lyhabc/articles/5310781.html
关于仲裁:http://www.tech-coffee.net/understand-failover-cluster-quorum/
(转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)的更多相关文章
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
原文地址: http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
这一篇是从0开始搭建SQL Server 2012 AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 操作步骤: 1.安装SQL server ...
- (转载) 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
这一篇是从0开始搭建SQL Server AlwaysOn 的第四篇,这一篇开始搭建异地机房节点 注意点1 注意异地节点最好至少有2个AG节点,否则在本地节点进行手动故障转移的时候会出现仲裁警告,提示 ...
- (转载) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 步骤 这一篇依然使用step by step的方式 ...
- (转载) 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁 ...
随机推荐
- 让姑姑不再划拳 码农也要有原则 : SOLID via C#
“姑娘,别这样.我们是有原则的.” “一个有原则的程序猿是不会写出 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去.” “对,是时候和那些只会滚键盘的麻瓜不同了, ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- CoreCRM 开发实录——想用国货不容易
昨天(2016年12月29日)发了开始开发的文章.本来晚上准备在 Coding.NET 上添加几个任务开始搞起了.可是真的开始用的时候才发现:Coding.NET 的任务功能只针对私有的任务开放.我想 ...
- 和 Thrift 的一场美丽邂逅
一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的.每次搜索 “java序列化” + “方式”.“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化 ...
- .NET Core的日志[1]:采用统一的模式记录日志
记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断框架(相关A ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- 【C#公共帮助类】 ToolsHelper帮助类
这个帮助类,目前我们只用到了两个,我就先更新这两个,后面有用到的,我会继续更新这个Helper帮助类 在Tools.cs中 有很多方法 跟Utils里是重复的,而且Utils里的方法更加新一点,大家可 ...
- Nexus(一)环境搭建
昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...
- springmvc SSM shiro redis 后台框架 多数据源 代码生成器
A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单 下载地址 ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类 ...
- BPM配置故事之案例12-触发另外流程
还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...