天天看点

手把手 教你部署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. 在执行结果中找到所需创建用户的语句,复制该语句到副库执行创建用户

继续阅读