以前和不少羣友聊天發現對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