最近搭建了一套SQLServer2016 AlwaysOn。 筆者是採用修改各節點的hosts文件,以及修改電腦名的dns尾碼,來避免需要另外一臺DNS伺服器。 上面128,129,130三個IP屬於AlwaysOn的三個節點伺服器 IP100屬於可用性組偵聽器IP IP150屬於群集 途中遇到的 ...
最近搭建了一套SQLServer2016 AlwaysOn AG。
(後記:經實際測試,使用SQLServer2012 也同樣可以在Winserver2016上搭建基於工作組的AlwaysOn AG,其實基於工作組的AG僅僅只是WindowsServer2016的WSFC新功能。)
筆者是採用修改各節點的hosts文件,以及修改電腦名的dns尾碼,來避免需要另外一臺DNS伺服器。
上面128,129,130三個IP屬於AlwaysOn的三個節點伺服器
IP100屬於可用性組偵聽器IP
IP150屬於群集
途中遇到的問題點記錄於此:
1.如果不是採用administrator這個內置管理員賬號而採用其它的管理員帳戶(每個節點都需要同樣的管理員帳戶),則在搭建群集前,需要使用Powershell添加如下註冊表項:
new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1
否則,在創建群集添加伺服器時會報錯。
----------------------------------------------------------------------------------------
2.在執行
ALTER DATABASE [SQL2016] SET HADR AVAILABILITY GROUP = [AG2016]
時出錯,sp_readerrorlog可以找到如下錯誤:
Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'. [CLIENT: 192.168.206.128]
解決方法:
這其實以前在玩鏡像時也遇到過,一種解決方法是修改SQL Server實例的屬性,將登錄身份改為同樣的本地管理員帳戶,並將該用戶添加到SQLServer的登錄名中,同時需要給sysadmin授權。修改之後,重啟SQL Server實例。(各節點都需要操作一遍)
另一種方法是按照上面報錯信息,將NT AUTHORITY\ANONYMOUS LOGON添加到SQLServer的登錄名中,同時需要給sysadmin授權。修改之後,重啟SQL Server實例。(各節點都需要操作一遍)
----------------------------------------------------------------------------------------
3.添加偵聽器時遇到如下錯誤:
消息 41066,級別 16,狀態 0,第 3 行
無法使 Windows Server 故障轉移群集(WSFC)資源(ID“32b92e1c-37e2-4ae1-a045-d691c45011a7”)聯機(錯誤代碼 5942)。WSFC 服務可能未在運行、可能在其當前狀態下無法訪問,或是 WSFC 資源未處於可接受請求的狀態。有關此錯誤代碼的信息,請參閱 Windows 開發文檔中的“系統錯誤代碼”。
消息 19476,級別 16,狀態 4,第 3 行
嘗試為偵聽器創建網路名稱和 IP 地址失敗。WSFC 服務可能未在運行或在其當前狀態下無法訪問,或者為網路名稱和 IP 地址提供的值可能不正確。請檢查 WSFC 群集的狀態並且由網路管理員來驗證該網路名稱和 IP 地址。
解決方法:
這是因為未將偵聽器IP的DNS記錄添加到hosts文件中導致,添加即可。
----------------------------------------------------------------------------------------
4.只讀路由的負載均衡不起作用
因為我仍然按照以前SQLServer2012時期的腳本來搭的AlwaysOn只讀路由。
創建SQLServer2016的負載均衡只讀路由的腳本應該如下:
ALTER AVAILABILITY GROUP ag MODIFY REPLICA ON N’WIN02′ WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘WIN01’, ‘WIN03’), ‘WIN02’)));
跟以前的變更之處上上邊(‘WIN01’, ‘WIN03’)的腳本處。
使用腳本查詢路由可以得到這樣的結果(WIN01和WIN03節點都是第一路由優先順序):
select b.replica_server_name ,a.routing_priority ,c.replica_server_name from sys.availability_read_only_routing_lists a left join sys.dm_hadr_availability_replica_cluster_states b on a.replica_id = b.replica_id left join sys.dm_hadr_availability_replica_cluster_states c on a.read_only_replica_id = c.replica_id order by a.replica_id
使用SQLCMD測試時,幾乎是以1:1的比例來分配的負載。而使用SSMS時則不是這樣,會出現連續N次都是WIN01,之後連續N次都是WIN03。
----------------------------------------------------------------------------------------
最後,使用最新的SSMS管理工具,可以直接從圖形化界面進行操作創建AlwaysOn可用性組(稍老的版本好像會缺少部分腳本)。
本文鏈接地址:http://www.cnblogs.com/ajiangg/p/6424900.html
參考鏈接:
http://www.cnblogs.com/ajiangg/p/3636019.html
http://www.cnblogs.com/ajiangg/p/3668936.html
http://www.cnblogs.com/ajiangg/p/3636082.html