从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 作准备的html

 


步骤node

这一篇依然使用step by step的方式介绍怎麽搭建AlwaysOnsql

 

请先使用本地用户Administrator登陆这两个集群节点并执行下面的操做,先不要用域用户DCADMIN登陆shell

 

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

 

二、各个集群节点本地都要准备好相关软件,在各个节点上独立安装SQL Server 2012(不能使用群集方式安装),保证各个节点中使用相同的安装目录结构和排序规则!服务器

 

 选择全新SQL Server独立安装,不要选择新的SQL Server故障转移集群安装网络

 

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

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

 

 

注意:若是一开始使用域用户DCADMIN来登陆集群节点机器,并安装SQL Server的时候会遇到一个坑,SQL Server安装程序会链接故障转移集群,可是实际上单机安装SQL Server根本不须要链接故障转移集群测试

本人排查了好久都找不到缘由,为何SQL Server安装程序会链接故障转移集群,下面是SQL Server安装日志

若是一开始就使用集群节点本地用户Administrator登陆来安装SQL Server就不会踩到这个坑

 

 

三、注销集群节点计算机,而后使用域用户DCADMIN登陆,而后设置SQL Server的启动帐户为域用户DCADMIN

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

 

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

点击“高级”

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

点击“肯定”

 

输入域用户DCADMIN的密码

 

重启一下SQL代理服务

 重启以后能够看到登陆用户为DCADMIN@abc.com

 

一样,SQL引擎服务也须要一样的设置

 

这样,SQL引擎服务和SQL代理服务都用域用户DCADMIN启动

另外一个集群节点的SQL Server也须要作一样的操做

 

注意:在集群节点脱离域以后,SQL引擎服务和SQL代理服务都要用本地服务账号来启动,不能再用域用户来启动

 

 

四、将DCADMIN域用户加入到两个集群节点的SQL Server登陆用户中,服务器角色选择sysadmin

先用sa登陆SQL Server

添加登陆用户,跟SQL 服务添加启动帐户的步骤同样,将DCADMIN域用户添加为登陆用户

 

 给予sysadmin权限

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

 

 

 

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

注意:集群节点必定要能进行通讯,若是集群节点之间断开通讯,那么启用AlwaysOn的时候会报错

 

重启SQL Server

若是AlwaysOn启用成功,在服务器属性里能够看到启用HADR为True

 

六、在其中一个集群节点的SQL Server中验证各节点的投票数 ,在其中一个集群节点的SQL Server上执行
使用下面SQL语句

SELECT * FROM  sys.dm_hadr_cluster_members;

SELECT * FROM SYS.[dm_hadr_cluster]

 

七、再次确保各节点已经关闭防火墙,若是防火墙没有关闭,那么在建立可用性组的时候会弹出下面错误

没法将数据库“test”联接到可用性副本“xxx”的可用性组“xx”

针对主副本的链接未处于活动状态。没法处理该命令(错误:35250)

 

 

 

八、咱们使用自行初始化数据库的方式,因此这一步须要新建一个测试库和测试表并插入一些测试数据(这些动做就不演示了),而后对数据库作一个完整备份 和 日志备份

而后把完整备份文件和日志备份文件搬到WIN-5PMSDHUI0KQ机器上依次进行还原,完整备份-》还原完整备份-》日志备份-》还原日志备份
脚本

复制代码
--在win-7107jjj2bcc上执行
CREATE DATABASE [test]

USE [test]
CREATE TABLE [test1]([id] INT,[name] VARCHAR(100))
INSERT INTO [test1] SELECT 1,'test'
复制代码
复制代码
--在win-7107jjj2bcc上执行
DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200)
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','')

        
--(test 数据库完整备份)
SET @FileName = 'c:\DBBackup\test_FullBackup_' + @CurrentTime+'.bak'
BACKUP DATABASE [test]
TO DISK=@FileName WITH FORMAT ,COMPRESSION


  --(test 数据库日志备份) 
SET @FileName = 'c:\DBBackup\test_logBackup_' + @CurrentTime+'.bak'
BACKUP log [test]
TO DISK=@FileName WITH FORMAT ,COMPRESSION
复制代码
复制代码
--在WIN-5PMSDHUI0KQ上执行

USE [master]
RESTORE DATABASE [test] FROM  DISK = N'C:\DBBackup\test_FullBackup_2015_07_30_093949.bak' WITH  FILE = 1, 
MOVE N'test' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test.mdf', 
MOVE N'test_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_log.ldf', 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5

GO





--注意必定要用NORECOVERY来还原备份
USE [master]
RESTORE DATABASE [test] FROM  DISK = N'C:\DBBackup\test_logBackup_2015_07_30_105949.bak' WITH  FILE = 1, 
NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5

GO
复制代码

 

自行初始化数据库的好处是:若是咱们的辅助副本是跨机房的咱们均可以控制初始化的时间,也就是备份和还原的时间,不须要SQL Server来帮咱们备份还原数据库

在WIN-5PMSDHUI0KQ上还原日志备份以后的样子

 

 

九、在“Alwayson高可用性”节点上右键选择“新建可用性组向导

注意:加入到AlwaysOn可用性组的数据库必须符合下面要求

(1)数据库的恢复模式必须是“完整”恢复模式

(2)数据库已进行了一次完整备份

(3)须要是用户库,系统库不能加入可用性组

(4)数据库能够读写,只读库不能加入到可用性组

(5)数据库处于多用户模式

(6)数据库没有使用AUTO_CLOSE

(7)不属于任何其余的可用性组

(8)数据库没有配置数据库镜像

一个可用性组最大支持100个数据库

 

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

 

 

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

 

十二、点击“下一步”,使用添加副原本将其余节点添加到可用性组中,并选择自动故障转移节点和同步提交节点,由于咱们只有两个节点

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

1三、点击“端点”tab页面设置端点

注意:端点URL使用IP的方式,不要用FQDN长名的方式,由于服务器一般会有两个网卡,一个public网卡,一个private网卡,端点建议使用private网卡地址

这样在端点直接传送的数据就会经由private网卡来传送,使用TCP://test.abc.com:5022 这种FQDN长名的方式是不能保证端点数据经过private网卡来传送

SQL Server服务帐户使用域用户DCADMIN来进行身份验证,避免使用证书的方式

 

1四、“备份首选项”和“侦听器”不须要设置,保持默认就行,可用性侦听器咱们后面再添加,能够直接点击“下一步”

点击“是”

 

1五、选择初始数据同步,这里选择“仅联接”模式

 

 

 1六、点击“下一步”来验证配置,对应侦听器配置警告能够忽略,后期来添加侦听器

由于使用的是“仅联接”数据库初始化方式,验证跳过像可用磁盘空间这样的检查

 

 

 

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

 

 

 

1八、全部摘要均成功完成,显示绿色对勾。若是出现黄色警告,则需进行进一步判断是否成功。若出现红色错误,表示AG建立不成功

注意:若是你们使用奇数集群节点,而且仲裁配置使用的是节点多数,那么在建立可用性组完毕的时候,WSFC仲裁投票配置会显示警告

点击警告连接会弹出下面的对话框,这个警告其实能够不用理会

 

 

1九、查看服务器和数据库的变化

主副本

数据库变为已同步

辅助副本

辅助副本这时候是可读的,在主副本上对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

 

报表帐号设置
在主副本中,执行:
use 库名
go
grant exec to 报表帐号链接所用的用户 或grant exec on 存储过程 to 报表帐号链接所用的用户


可用性组的基本管理

注意:尽可能用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.dm_hadr_automatic_seeding
SELECT * FROM sys.dm_hadr_physical_seeding_stats

--可用性副本
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 

 

  View Code

 


2015-12-9补充

卸载集群

一、先逐个逐出节点

二、销毁集群,集群最后一个节点不能逐出只能销毁集群,有两种方法,1用命令  2在界面上右键-》销毁集群

方法一:集群node(随便一个集群node)上执行下面命令,不能在DC上执行,由于DC没有安装故障转移集群,sqltestdemo1为集群名,方法一删除得完全一点

Get-Cluster sqltestdemo1 | Remove-Cluster -Force -CleanupAD

方法二:集群-》更多操做-》销毁集群

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

Clear-ClusterNode

 

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

 

五、从新启用和禁用alwayson,在alwayson的各个节点上都要操做一遍

 

 

删除可用性组

一、删除辅助副本

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE REPLICA ON N'SQLSVR2';
GO

 

二、删除可用性数据库

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE DATABASE [SQLDB02];
GO

 

 

三、删除侦听器

USE [master]
GO
ALTER AVAILABILITY GROUP [HAGroup01]
REMOVE LISTENER N'SQLAG01';
GO

 


四、删除可用性组

USE [master]
GO
DROP AVAILABILITY GROUP [HAGroup01];
GO

 

五、在域控的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/

相关文章
相关标签/搜索