SQL SERVER 2016 AlwaysOn 無域集羣+負載均衡搭建與簡測

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

CREATE AVAILABILITY GROUP [KK_AG_2016]
WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
DB_FAILOVER = OFF,
DTC_SUPPORT = NONE)
FOR DATABASE [AWO_2016]
REPLICA ON N'SQL16NODE1' WITH (ENDPOINT_URL = N'TCP://SQL16NODE1:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)),
    N'SQL16NODE2' WITH (ENDPOINT_URL = N'TCP://SQL16NODE2:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)),
    N'SQL16NODE3' WITH (ENDPOINT_URL = N'TCP://SQL16NODE3:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL));

GO

------------這部分代碼是圖形化工具中缺失的步驟
:Connect sql16node2
ALTER AVAILABILITY GROUP [KK_AG_2016] JOIN; GO ALTER DATABASE [AWO_2016] SET HADR AVAILABILITY GROUP = [KK_AG_2016]; GO :Connect sql16node3 ALTER AVAILABILITY GROUP [KK_AG_2016] JOIN; GO ALTER DATABASE [AWO_2016] SET HADR AVAILABILITY GROUP = [KK_AG_2016]; GO


 

建立監聽

:Connect sql16node1

USE [master]

GO

ALTER AVAILABILITY GROUP [KK_AG_2016]
ADD LISTENER N'L_KK_AWO2016' (
WITH IP
((N'192.168.3.121', N'255.255.255.0')
)
, PORT=8000);

GO

 

測試

高可用測試

  簡單的看起來與以前沒有什麼差異,依然依賴故障轉移羣集,仲裁的的方式與2012R2基本相同,可使用仲裁磁盤、仲裁文件夾或動態節點投票(偶數個節點依然會動態分配投票權),值得關注的是在windows2016的集羣中添加了雲仲裁,這個雲端配置先不說,真是對於以前配置的跨機房的集羣的福音。

 

負載均衡測試

配置負載均衡(此處只是簡單的作了一下主節點的負載)

alter availability group kk_ag_2016
modify replica on 'sql16node1'
with
(
primary_role
(
read_only_routing_list = (('sql16node2','sql16node3'),'sql16node1')
)
)



alter availability group kk_ag_2016
modify replica on N'sql16node1'
with
(
    secondary_role (read_only_routing_url = N'tcp://sql16node1.kk.com:1433')
)
go
alter availability group kk_ag_2016
modify replica on N'sql16node2'
with
(
    secondary_role (read_only_routing_url = N'tcp://sql16node2.kk.com:1433')
)
go
alter availability group kk_ag_2016
modify replica on N'sql16node3'
with
(
    secondary_role (read_only_routing_url = N'tcp://sql16node3.kk.com:1433')
)
go

 

  測試的例子比較簡單,也沒使用什麼壓力工具就直接用SSMS管理工具。

  使用監聽名稱鏈接或監聽IP加端口

  

  另外必須在鏈接參數中指定ApplicationIntent=ReadOnly

  

 

  開了5個窗口執行語句:

  

 

  使用profiler抓取結果

  

 

  

 

  只是看看能不能負載均衡,咋一看微軟還真沒騙人。可是要了解這只是只讀副本的負載,而不是寫入也能夠負載!

  另外要注意AlwaysOn的數據同步是有時間延遲的(就算是同步模式)!這點能夠參見我另外一篇的測試:AlwaysOn 同步時間的測試

 

--------------博客地址------------------------------------------------------------------------------

原文地址: http://www.cnblogs.com/double-K/

若有轉載請保留原文地址! 

 

-----------------------------------------------------------------------------------------------------

總結 : 文章只是簡單的搭建和測試了一下沒有作深刻的研究,也許會給有興趣瞭解2016AlwaysOn集羣的朋友一點幫助吧,尤爲是搭建過程,網上找到的基本都是英文文檔,對於我這種看見鷹就發觸的選手,也算是一點福音吧。

  2016的AlwaysOn可用組不須要域環境,能夠負載均衡,還真的是有不小的吸引力。

相關文章
相關標籤/搜索