以前和不少群友聊天发现对2016的无域和负载均衡满心期待,毕竟能够简单搭建并且能够不适用第三方负载均衡器,SQL本身能够负载了。windows2016已经能够下载使用了,那么这回终于能够揭开使人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。html
本篇主要描述我的集群搭建中遇到的坑和一些注意事项,以及2016无域负载均衡的简单体验测试。node
想要不使用域环境来搭建AlwaysON 必须使用windows 2016 和sql server2016sql
本篇我使用3台虚拟机(主要是为了测试负载均衡,不然2台就能够),为了搭建的纯洁性,我3台机器都是独立安装,没有使用虚机复制。windows
主机名 | IP地址 |
sql16node1 | 192.168.3.113 |
sql16node2 | 192.168.3.114 |
sql16node3 | 192.168.3.115 |
sqlcluster2016(windows集群) | 192.168.3.120 |
L_KK_AWO2016(AlwaysOn监听) | 192.168.3.121 |
16操做系统介质 | ed2k://|file|cn_windows_server_2016_x64_dvd_9327743.iso|6020876288|58F585A340248EF7603A48F832F08B6D|/ |
SQL16介质 | ed2k://|file|cn_sql_server_2016_enterprise_x64_dvd_8699450.iso|2452795392|D8AFD8D6245F518F53F720C48E2819C0|/ |
总体的系统,故障转移集群,AlwaysOn搭建都和2012和2014没有太大差异,因此这里只介绍几个搭建时的特殊注意点。session
1.由于没有域因此须要在”计算机属性“添加计算机的DNS后缀。负载均衡
2.须要作域名解析(域名解析运行——>drivers,每一个节点都须要配置)tcp
3.图形化建立会出现问题,导出脚本查看发现脚本不全工具
下面是建立AWO的脚本(前提是各个节点已经还原的备份文件)post
注: 如下脚本能够经过SSMS工具切换到SQLCMD模式运行测试
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE. :Connect sql16node1 IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0 BEGIN ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED END GO use [master] GO GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER] GO :Connect sql16node1 IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON); END IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START; END GO :Connect sql16node2 IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0 BEGIN ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED END GO use [master] GO GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER] GO :Connect sql16node2 IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON); END IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START; END GO :Connect sql16node3 IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0 BEGIN ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED END GO use [master] GO GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER] GO :Connect sql16node3 IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON); END IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START; END GO :Connect sql16node1 USE [master] GO