SQLSERVER2016 無域控AlwaysOn 實施步驟
步驟:
一、安裝3個windows server 2016系統
1)在3台機器建立具有administrators權限的相同賬號密碼,本例子直接使用administrator;
2)分別修改計算機名稱為 sqldb1,sqldb2,sqldb3;
3)配置dns,如testag.com;
4)在3台服務器上做好hosts映射,如:
192.168.40.128 sqldb1
192.168.40.128 sqldb1.testag.com
192.168.40.129 sqldb2
192.168.40.129 sqldb2.testag.com
192.168.40.130 sqldb3
192.168.40.130 sqldb3.testag.com
192.168.40.100 testcluster
192.168.40.100 testcluster.testag.com
192.168.40.200 sqllistner
192.168.40.200 sqllistner.testag.com
二、配置故障轉移群集
1)在3台機器上分別安裝故障轉移群集;
2)建立故障轉移群集 testcluster.testag.com;
三、每台機器單獨安裝SQLSERVER 2016
1)在3台機器上分別安裝SQLSERVER2016,獨立安裝,非群集安裝;
2)給3台服務器的SQLSERVER配置相同的啟動賬號;
3)配置證書;
四、配置Alwayson
1)在另外2台輔助副本機器上恢復要加入alwayson的數據庫;
2)用SSMS的GUI創建alwayson;注:我使用的SSMS按本會丟失兩個關鍵語句,導致創建失敗,https://www.cnblogs.com/double-K/p/5994166.html 該博有說明,這兩個語句是:
------------這部分代碼是圖形化工具中缺失的步驟
:Connect sqldb2
ALTER AVAILABILITY GROUP [sqldbag] JOIN;
Go
ALTER DATABASE [testdb2] SET HADR AVAILABILITY GROUP = [sqldbag];
GO
:Connect sqldb3
ALTER AVAILABILITY GROUP [sqldbag] JOIN;
GO
ALTER DATABASE [testdb2] SET HADR AVAILABILITY GROUP = [sqldbag];
GO
3)創建偵聽器 sqllistner,做好hosts映射;
4)創建只讀路由,讓alwayson支持讀寫分離;
ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://sqldb1.testag.com:1433')); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://sqldb2.testag.com:1433')); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb3' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb3' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'tcp://sqldb3.testag.com:1433')); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('sqldb2','sqldb3','sqldb1'))); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('sqldb3','sqldb1','sqldb2'))); ALTER AVAILABILITY GROUP sqldbag MODIFY REPLICA ON N'sqldb3' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('sqldb2','sqldb1','sqldb3')));
ssms要讓只讀路由生效,必須具備兩點:
1)連接到制定數據庫,而不是默認;

2)增加連接參數 ApplicationIntent=ReadOnly

參考文檔:
https://www.cnblogs.com/double-K/p/5994166.html
http://www.cnblogs.com/lyhabc/p/6498712.html
----------------------------------
注意問題和事項:
1)所有sqlserver服務器創建相同密碼的administrators權限的windows賬號,用作sqlserver的啟動賬號,避免權限問題;
2)本人使用的ssms2016版本創建alwayson丟失語句,導致創建alwayson失敗;
3)無域控,需要對所有資源做hosts映射,包含
sqldb1, sqldb2, sqldb3, sqldb1.testag.com, sqldb2.testag.com, sqldb3.testag.com,
群集服務器 testcluster.testag.com,
偵聽器 sqllistner, sqllistner.testag.com
4)忘記創建只讀路由,通過偵聽器無法連接到只讀副本;
5)當alwayson的輔助副本中的 可讀輔助副本 設置為 僅讀意向 時,ssms無法打開數據庫,需要配置 ApplicationIntent=ReadOnly 連接參數才可打開

