Windows Server 2016 以及 SQL Server 2016出來已有一段時間了,因為Windows Server 2016可以配置無域的Windows群集,是以也能夠以此來配置無域的SQL Server AlwaysOn 高可用。
下面就來一步一步配置2個節點的無域的SQL AlwaysOn
環境準備:
(1)2台實體伺服器,也可以是2台虛拟機。作業系統:Windows Server 2016 Datacenter
(2)2台伺服器上均安裝SQL Server 2016 (也可以是SQL Server 2012)
IP以及名稱規劃:
節點1(實體伺服器或虛拟機):JF-SQLDB01 IP位址:10.2.218.131
節點2(實體伺服器或虛拟機):JF-SQLDB02 IP位址:10.2.218.132
Windows群集名稱:JF-AlwaysOn IP位址:10.2.218.130 (虛拟IP)
可用性組名稱:SQLAG
SQL偵聽器名稱:JFSQL01 IP位址:10.2.218.133(虛拟IP)
注意事項:
1,隻有Windows Server 2016 作業系統才能配置不依賴域的群集 ,2台伺服器的作業系統,安全更新檔,SQL Server版本要完全一緻。
2,兩個節點的Windos Server 2016 都以Administrator賬戶登入,并且兩台伺服器的Administrator密碼相同,無特殊意義,隻是為了友善後續的操作。
3,兩個節點的SQL Server 2016 服務啟動賬戶都設定成Administrator 。2個節點的資料庫都有Administrator的登入名,也就是使用Administrator登入伺服器時,可用Windows身份驗證登入SQL Server。
即:
節點1的SQL Server上有:JF-SQLDB01\administrator ;節點2上有:JF-SQLDB02\administrator ;這2個登入賬号,在安裝SQL Server的時候可建立。均有sysadmin權限。
一:首先配置Windows故障轉移群集(2個節點均使用Administrator登入)
第一步:安裝Windows故障轉移群集(所有節點都需要安裝)

第二步:每個節點的計算機不需要加入域,但需要添加DNS字尾,且每個節點的字尾必須要相同(例如:test.cn),如下圖所示的操作。
第三步:在每個節點上都添加一個使用者(我增加的使用者名稱是DCAdmin),且使用者名以及密碼每個節點都一緻,添加此使用者的目的是為了2台伺服器能通路共享檔案夾。
第四步:在每個節點的 hosts 檔案中添加每個節點的伺服器IP位址和名稱、群集IP位址和名稱、偵聽器IP位址和名稱,如下所示。
hosts檔案路徑:C:\Windows\System32\drivers\etc
hosts檔案可以用記事本打開
伺服器名稱,填寫的是計算機全名,也就是伺服器名帶上之前設定的DNS名稱字尾的名稱,例如:JF-SQLDB01.test.cn。host檔案需要在2個節點的伺服器上都進行相同的操作。
第五步:設定允許應用或功能通過防火牆,兩個節點均要設定,按照下面圖中紅框框出的地方設定,注意選項後面打勾的位置。
第六步:在DB1這個節點上,以管理者方式運作PowerShell ,使用腳本建立Windows群集。因為無域的群集沒有圖形化界面可設定,是以隻能使用PowerShell 進行建立。
注意:如果登陸Windows Server 2016伺服器的賬戶不是Administrator,需要先以管理者方式運作PowerShell,并執行下面的腳本:
new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1
因為我登陸Windows Server 2016用的是Administrator,是以跳過執行上面的指令,直接運作下面的PowerShell腳本:
New-Cluster -Name JF-AlwaysOn -Node JF-SQLDB01,JF-SQLDB02 -StaticAddress 10.2.218.130 -AdministrativeAccessPoint DNS
--擷取叢集名
Get-Cluster
--群集詳情
Get-ClusterResource
使用Power Shell 安裝群集後,在故障轉移群集管理器中是看不到群集資訊的,需要手動連接配接到群集,如下面圖所示:
打開故障轉移群集管理器後,在管理器處右鍵滑鼠,選擇“連接配接到群集” :
在彈出的對話框中手動輸入群集的名稱:
這樣就能在故障轉移群集管理器中看到群集的資訊了。同樣的方法在DB2的節點上再重複設定即可在DB2上看到群集資訊。
二:配置SQL Server AlwaysOn
SQL Server的安裝這裡就不描述,直接從配置AlwaysOn開始操作。
1 ,這裡配置AlwaysOn,我采用的是共享檔案夾的方式,是以首先在DB1這個節點上建立一個共享檔案夾添加之前在每個節點上都建立的使用者DCAdmin,這樣DB2這個節點也能通路。
2,在DB1和DB2上設定啟用AlwaysOn
啟用AlwaysOn會要求重新開機服務,重新開機就可以。
3,重新開機服務後,檢視伺服器屬性,確定 HADR 為 True
既然節點沒有加入域,那麼就不能用域認證,隻能用證書認證,是以需要在每個節點的資料庫中建立其他節點的資料庫證書。(請留意我連接配接資料庫的賬戶,在建立端口的代碼中有用到)
是以在配置可用性組前先在各節點配置證書認證信任。
4,分别在兩個節點資料庫上建立證書,并且彼此還原對方的證書,SQL代碼如下:
注:我是在節點1上用administrator登入伺服器,使用Windows身份登入SQL Server。在節點2上也是用administrator登入伺服器,使用Windows身份登入SQL Server
--共享檔案夾路徑: ---\\JF-SQLDB01\SQLAlwaysOnShare 使用共享檔案夾是為了友善讀取每個節點的證書
--節點一上執行:建立主密鑰/證書/端點,備份證書到共享檔案夾中。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'JFAlwaysOnShare2016'; ----密碼
GO
CREATE CERTIFICATE Cert_DB01
WITH SUBJECT = 'Cert_DB01',
START_DATE = '2017-12-01',EXPIRY_DATE = '2099-12-31'; --證書的有效時間
GO
----導出證書,将證書放在共享檔案夾裡面
BACKUP CERTIFICATE Cert_DB01
TO FILE = '\\JF-SQLDB01\SQLAlwaysOnShare\Cert_DB01.cer';
GO
---建立端點
CREATE ENDPOINT [SQLAG_Endpoint]
AUTHORIZATION [JF-SQLDB01\administrator] ----此賬戶是連接配接資料庫的賬戶
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) ---偵聽端口,1024 和 32767 之間的任何數字都有效。偵聽IP位址,預設值為 ALL,表示偵聽器将接受任何有效 IP 位址上的連接配接
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_DB01, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--節點二上執行:建立主密鑰/證書,備份證書。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'JFAlwaysOnShare2016';
GO
CREATE CERTIFICATE Cert_DB02
WITH SUBJECT = 'Cert_DB02',
START_DATE = '2017-12-01',EXPIRY_DATE = '2099-12-31';
GO
BACKUP CERTIFICATE Cert_DB02
TO FILE = '\\JF-SQLDB01\SQLAlwaysOnShare\Cert_DB02.cer';
GO
CREATE ENDPOINT [SQLAG_Endpoint]
AUTHORIZATION [JF-SQLDB02\administrator]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_DB02, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--節點一上執行:建立節點二的證書
USE master;
GO
CREATE CERTIFICATE Cert_DB02
FROM FILE = '\\JF-SQLDB01\SQLAlwaysOnShare\Cert_DB02.cer';
GO
--節點二上執行:建立節點一的證書
USE master;
GO
CREATE CERTIFICATE Cert_DB01
FROM FILE = '\\JF-SQLDB01\SQLAlwaysOnShare\Cert_DB01.cer';
GO
5,配置可用性組,接下來就和以前版本的配置是一樣的了,不再描述,按照下面的截圖一步一步配置
6,最後建立偵聽器,當然,建立偵聽器也可以在上一步設定。
最後,可以使用偵聽器名稱來連接配接資料庫,資料庫顯示已同步,配置無域AlwaysOn成功。