[========]
AlwaysOn
搭建 WSFC
配置計算機的 DNS 后綴
-
配置計算機的 DNS 后綴,注意在同個工作組
-
每個節點的機器都要做域名解析,修改 host 文件
C:\Windows\System32\drivers\etc
安裝故障轉移集群
-
節點服務器添加故障轉移群集功能
-
等待安裝完成
驗證集群
- 打開故障轉移集群管理工具
- 點擊驗證配置
- 添加集群節點
- 運行所有測試
- 可以點擊查看驗證報告,勾選立即使用經過驗證的節點創建集群
創建集群
-
配置集群的管理名稱和管理IP
-
等待配置完成
-
可以查看集群報告,稍后配置文件共享見證
創建文件共享見證
由於我們是兩個節點的故障轉移集群,所以需要加上共享文件夾,如果是奇數節點,這一步是不需要做的!
- 配置集群仲裁
- 選擇文件共享見證
- 在集群節點之外的一台服務器上創建共享文件夾
\\XIANGMU4TEST01\share
,並設置 Everyone 完全控制的權限
配置 AlwaysOn
-
開啟 AlwaysOn
-
需要重啟 SQL Server 服務
-
檢查,如果 AlwaysOn 啟用成功,在服務器屬性里可以看到啟用HADR為True
-
查看各節點的投票數
SELECT * FROM sys.dm_hadr_cluster_members;
- 查看 cluster
SELECT * FROM SYS.[dm_hadr_cluster]
新建可用性組
但是既然節點沒有加入AD,那么久不能用域認證,只能用證書認證,因此需要創建證書和端點。在配置可用性組前各節點進行證書認證信任。
-
修改 SQL 服務登陸賬號為本機管理員賬號
-
創建證書,兩個節點都要創建證書,注意修改證書名稱
--節點二:創建主密鑰/證書,備份證書。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'AAA111aaa';
GO
CREATE CERTIFICATE Cert_server228
WITH SUBJECT = 'Cert_server228',
START_DATE = '2017-01-01',EXPIRY_DATE = '2099-12-30';
GO
BACKUP CERTIFICATE Cert_server228
TO FILE = 'C:\Storage\Cert_server228.cer';
GO
注意:備份證書的文件夾要先創建好,並且賦予權限
- 將創建好的證書放到另一台節點服務器,並加入證書
--節點二:創建其他節點證書
USE master;
GO
CREATE CERTIFICATE Cert_server227
FROM FILE = 'C:\Storage\Cert_server227.cer';
GO
證書創建好后如下
- 重新創建端點,授權賬號設置為本機管理員賬號,驗證方式使用上面創建的證書
--節點:創建端點
CREATE ENDPOINT [testag_endpoint]
AUTHORIZATION [POSTEST2-2016\Administrator]
STATE=STARTED
AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_server228, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
如果存在已有的端點,則需要將已有端點刪除
-
在主節點服務器操作新建可用性組。
-
設置可用性組名稱,建議勾選數據庫級別運行狀況檢測。
- 在之前的 AlwaysOn 2012 和 2014 中,如果實例健康出現問題,將觸發故障轉移。如果有一個數據庫有問題,只要實例OK,可用性組就不會故障轉移。
- 在 AlwaysOn 2016 中,勾選之后,不論是一個實例有問題,還是一個或多個數據庫有問題,都會發生故障轉移。
-
選擇數據庫,要求數據庫已經進行了完整備份
-
添加副本節點,並勾選自動故障轉移,設置輔助副本為可讀副本
-
將端點 URL 設置為 IP 方式,這里端點會顯示為我們上面創建的端點,登陸賬號為我們上面設置的賬號
-
“備份首選項”和“偵聽器”不需要設置,保持默認就行,可用性偵聽器我們后面再添加,可以直接點擊“下一步”
-
數據同步這里建議使用完整的數據庫和日志備份的方式更方便,需要有一個共享文件夾,並且節點服務器要有相同的數據庫文件目錄結構
-
等待可用性組創建成功
-
創建成功后數據庫狀態顯示為已同步
故障轉移集群會顯示擁有一個群集角色
-
顯示面板可以查看集群信息
創建偵聽器
一個偵聽器包括虛擬IP地址、虛擬網絡名稱、端口號三個元素,一旦創建成功,虛擬網絡名稱會注冊到DNS中,同時為可用性組資源添加IP地址資源和網絡名稱資源。用戶就可以使用此名稱來連接到可用性組中。
-
添加偵聽器
-
選擇使用靜態 IP
-
創建成功后,在故障轉移集群管理器里的角色節點,可以看到客戶端訪問名稱和 IP 地址
-
連接數據庫時使用偵聽器的地址
可讀副本的負載均衡
SQL Server 2016 支持多個只讀副本負載分擔只讀操作。
右鍵一個可用性副本可以查看副本的只讀性設置:
主角色中的連接
主角色中支持的連接訪問類型:
- 允許所有連接(ALL):主數據庫同時允許讀寫連接和只讀連接。這是主角色的默認行為。
- 僅允許讀/寫連接(READ_WRITE):允許
ApplicationIntent=ReadWrite
或未設置連接條件的連接。不允許ApplicationIntent=ReadOnly
的連接。僅允許讀寫連接可幫助防止客戶錯誤地將讀意向工作負荷連接到主副本。
修改腳本:
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE))
GO
可讀輔助副本
輔助角色支持的連接訪問類型:
- 無連接(NO):不允許任何用戶連接。輔助數據庫不可用於讀訪問。這是輔助角色中的默認行為。
- 僅讀意向連接(READ_ONLY):輔助數據庫僅接受連接參數
ApplicationIntent=ReadOnly
的連接,其它的連接方式無法連接。 - 允許任何只讀連接(ALL):輔助數據庫全部可用於讀訪問連接。此選項允許較低版本的客戶端進行連接。
修改腳本:
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))
GO
設置數據庫實例監聽端口
-
Sql Server 配置管理工具找到數據庫實例的網絡配置,
-
右鍵 TCP/IP,默認配置的是動態端口
-
這里修改為固定端口 1433
-
最后需要重啟 Sql Server 服務。
配置可用性組只讀路由
執行下面 sql 獲取可用性組名稱:
select name,* from sys.availability_groups
執行下面 sql 獲取要配置的可用性副本名稱(服務器實例):
select replica_server_name,* from sys.availability_replicas
- 為可用性副本(服務器實例)配置只讀路由 URL,路由地址可以填 IP 或者計算機名,端口填數據庫實例綁定的 TCP/IP 端口。
執行腳本:
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST1-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.227:1433'))
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON N'POSTEST2-2016\POSTEST' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = N'TCP://10.98.98.228:1433'))
GO
也可以右鍵可用性組選擇屬性,通過 UI 方式更改
- 每個自動轉移副本配置只讀路由列表
USE [master]
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST1-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST2-2016\POSTEST'),'POSTEST1-2016\POSTEST')));
GO
ALTER AVAILABILITY GROUP [posTestAg]
MODIFY REPLICA ON
N'POSTEST2-2016\POSTEST' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('POSTEST1-2016\POSTEST'),'POSTEST2-2016\POSTEST')));
GO
使用“()”對只讀路由列表進行分組,
List 1: 'POSTEST1-2016\POSTEST'
List 2: 'POSTEST2-2016\POSTEST'
按如下方式工作:
-
路由到第一個列表中的副本,如果第一個列表存在多個副本,則對讀取連接進行輪詢分發。
-
如果第一列表中任一副本不可用了,路由將繼續到第一個列表中的其他可用副本。
-
如果第一個列表中的所有副本都不可訪問,將會路由到下一個列表
-
如果第一個列表中的任一副本可用,將會恢復路由到第一個列表
-
測試只讀路由效果,sqlcmd 使用 Readonly 指定為只讀連接,
sqlcmd -S 10.98.98.231 -K Readonly -d test -Q "select @@servername" -e
只讀連接被連接到輔助副本
使用 SSMS 或者 EF 等需要在連接字符串設置參數ApplicationIntent=ReadOnly
注意:
想要使用輔助副本負載讀操作,必須要在連接字符串中配置為只讀連接,然后在程序中指定使用只讀連接進行數據庫讀取操作,AlwaysOn 自身不能自動負載均衡。
配置賬號
為每個數據庫節點配置登陸賬號,然后通過監聽器使用該賬號登陸數據庫。
-
主副本創建登陸賬號 satest
-
查看主庫上該賬號的 sid 為庫名
SELECT * FROM [test]..sysusers
- 在副本數據庫上創建對應賬號,其中 sid對應的值是主庫上所查到的sid的值
CREATE LOGIN [satest] WITH PASSWORD=N'xxxxxxx',
SID =0x99AD266AFD26F841B3E49EF9633B0D4B, DEFAULT_DATABASE=[test],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
使用故障轉移
建議使用 SSMS 中 AlwaysOn 進行手動故障轉移。
文章參考:
SQL Server 2016 無域群集配置 AlwaysON 可用性組
SQL Server 2016 AlwaysOn 安裝及配置介紹
SQL SERVER 2016 AlwaysOn 無域集群+負載均衡搭建與簡測
https://www.cnblogs.com/ajiangg/p/3668936.html