天天看點

手把手 教你部署SqlServer2019高可用叢集(二)

作者:凡人兔子張

(接 一)

四。部署Sql Server 2019 的高可用叢集

1. 設定證書存放的檔案夾

在C槽中建立一個gdmk檔案夾(3台都要建)

2. 安裝SqlServer資料庫

選擇 全新 SQLServer 獨立安裝即可,無需選擇故障安裝

3. 注意:叢集所有電腦安裝的Sql Server版本、安裝路徑、賬号密碼、安裝所選項都要一樣

4. 選擇混合模式驗證,一路按正常單機安裝一樣,直到安裝完成

5. 所有節點資料庫開啟Always On

打開配置工具 SQL Server 2019 配置管理器

選擇 SQL Server服務,選擇 SQL Server(MSSQLSERVER),右鍵

在 啟用Always On 可用性組 頁籤,勾選 啟用Always On 可用性組

6.(重點)在資料庫裡面安裝證書(特别特别要小心)

主資料庫236,在SSMS中執行

USE master;
GO
--建立主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123';
--建立證書 這裡有兩個"CERTxxx",建議每台機器都改成不同的名稱以作區分
CREATE CERTIFICATE CERT236 WITH SUBJECT = 'CERT236', START_DATE = '2021-01-01',EXPIRY_DATE = '2099-12-30';
--把剛才建立的證書備份到檔案 這裡也有兩個CERTxxx要改
BACKUP CERTIFICATE CERT236 TO FILE = 'C:\gdmk\CERT236.cer';
--建立終結點,設為證書驗證 這裡第二行有1個CERTxxx要改
CREATE ENDPOINT [group0_endpoint] AUTHORIZATION [sa] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL,AUTHENTICATION = CERTIFICATE CERT236, ENCRYPTION = REQUIRED ALGORITHM AES)
GO           

7. 在其他2台伺服器生成自己的證書,注意需要修改 所有CERTxxx 為對應的名稱

8. 将自己的證書分别拷貝至對方伺服器的證書存儲目錄中,保證每台伺服器都存在自己的和其他所有伺服器的證書

9. (重點)互換和載入對方的證書,這裡要特别注意,不要載入錯了,注意CERTxxx的對應關系

*********

資料庫236

*********

CREATE CERTIFICATE CERT236 FROM FILE = 'C:\gdmk\CERT236.cer';
CREATE CERTIFICATE CERT237 FROM FILE = 'C:\gdmk\CERT237.cer';
CREATE CERTIFICATE CERT238 FROM FILE = 'C:\gdmk\CERT238.cer';           

-- 這步必須在叢集IP上建立

10. 建立可用性組(此操作在連接配接叢集ip上進行操作,可以在其它工作電腦,用SSMS通過叢集IP連接配接到SqlServer後操作)

為需要同步的資料庫建立完整備份(必須要做完整備份後才能加入高可用組)

選擇 Always On 可用性組,右鍵,選擇 建立可用性組向導

填寫 名稱,下一步

選擇剛才做了備份的資料庫,下一步

添加 副本

可用性模式選擇 同步模式,可讀輔助副本選擇是,故障轉移選擇自動

備份首選項 選擇任意副本

偵聽器暫時可不設定

下一步,選擇自動種子設定,下一步

下一步,直到完成

11. 設定完成,使用資料庫管理工具SSMS直接連叢集IP,即可使用

12. 添加新的資料高 可用組内,隻要先做完整備份,在添加即可

13. 新加的資料庫 需要等到兩邊已經同步完後,才能開始使用

五。Always On 可用性 增加 使用者

1. 在主庫上建立使用者

2. 使用以下語句查詢出建立使用者的語名

USE master
GO
SELECT 'CREATE LOGIN [' + p.name + '] '
+ CASE WHEN p.type IN ( 'U', 'G' ) THEN 'FROM windows '
ELSE ''
END + 'WITH ' + CASE WHEN p.type = 'S'
THEN 'password = '
+ master.sys.fn_varbintohexstr(l.password_hash)
+ ' hashed, ' + 'sid = '
+ master.sys.fn_varbintohexstr(l.sid)
+ ', check_expiration = '
+ CASE WHEN l.is_expiration_checked > 0
THEN 'ON, '
ELSE 'OFF, '
END + 'check_policy = '
+ CASE WHEN l.is_policy_checked > 0
THEN 'ON, '
ELSE 'OFF, '
END
+ CASE WHEN l.credential_id > 0
THEN 'credential = ' + c.name
+ ', '
ELSE ''
END
ELSE ''
END + 'default_database = '
+ p.default_database_name
+ CASE WHEN LEN(p.default_language_name) > 0
THEN ', default_language = ' + p.default_language_name + ';'
ELSE ''
END
FROM sys.server_principals p
LEFT JOIN sys.sql_logins l
ON p.principal_id = l.principal_id
LEFT JOIN sys.credentials c
ON l.credential_id = c.credential_id
WHERE p.type IN ( 'S', 'U', 'G' )
AND p.name NOT IN ( 'sa')
AND p.name NOT LIKE '%##%'
AND p.name NOT LIKE '%NT SERVICE%'
AND p.name NOT LIKE '%NT AUTHORITY%'           

3. 在執行結果中找到所需建立使用者的語句,複制該語句到副庫執行建立使用者

繼續閱讀