一、 准备工作
操作系统:Windows Server 2019 数据中心版
数据库:SQL Server 2016 企业版
注意:Windows Server 2019 也可以无域配置群集
环境规划:
注意事项:
1、 两个节点的Windos Server 2019 都以Administrator账户运行,并且两台服务器的Administrator密码相同。
2、 两个节点的SQL Server 2016 服务启动账户都设置成Administrator 。
3、 两个服务器一定要互换证书!!
4、 注意防火墙
5、注意自增长id
二 、安装 windows 故障转移群集
1、 安装 windows sever 2019 datacenter 系统(2台机器分别安装 windows Server2019,过程略,此为 2 个节点。)
2、 运行账号 (2个节点创建相同用户名和密码的用户,且把此用户加入到服务器本地管理员组,我这里直接用的 Administrator 也符合条件,把密码设置为相同即可。)
3、搭建 windows 故障转移群集。(两台服务器均需要)
1>设置服务器名 DNS 后缀:服务器管理器-本地服务器-点击计算机名-点击更改-点击其他-填写DNS后缀
2>配置注册表把 LocalAccountTokenFilterPolicy 的值设置为 1,配置方法:在 powershell 中执 行如下命令:
new-itemproperty -path
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1
执行成功后:
3、添加故障转移集群功能和添加DNS服务器(故障转移集群功能所有节点都需要安装)
4>配置DNS
*** 我这里是建议每台设备单独配置DNS的,因为我要去中心化,如果只有一台设备配置了DNS,而那台设备如果垮了,就整个垮了.***
5>5在每个节点的 hosts 文件中添加节点的计算机信息、群集信息、侦听器信息。目录为:
C:\Windows\System32\drivers\etc
6>关闭防火墙 ,如果不能关闭防火墙,设置允许应用或功能通过防火墙,2个节点均要设置,按照下 面图中红框框出的地方设置,注意选项后面打勾的位置。
7>创建故障转移集群
三、 配置 Always On
1、 安装 SQLServer2016 每个节点都要独立安装,具体过程和平时安装 SQLServer 一致。
另 2016 的 SSMS 和实例是分开的,需要另外安装。可以用 SQL2017 的 SSMS,官网可以下载。
2、 启用 AlwaysOn 打开 SQLServer2016 管理配置器,配置如下
启用always on 可用组
3、修改 SQLServer 实例启动账户为 Administrator:密码为winserver登录密码
4、确认数据库是否启用高可用
5、建立共享文件夹,授予everyone权限
6、 新建 AlwaysOn 高可用组,我这里使用的 HIS_SLAVE_1 作为主副本,因为刚好上面有 测试用过的库,也可以指定其他节点做主副本。
这里如果远程链接不上,可以检查1433端口或防火墙允许应用或功能通过windows defender防火墙设置
添加副本后注意调整选项,这里可用性模式决定了同步方式,自动故障转移决定了是否可以故障 时主副本的转移方式。刻度辅助副本应该都选是,否则数据不可读。当然这些选项也可以再 alwaysOn 搭建完成后再主副本上进行配置。
点击下一步竟然报错
“端点”选项卡列出至少一个仅使用 Windows 身份验证的端点。但是,该服务器实例可能正以某一非域帐户运行。若要使用列出的端点,请将相应的 SQL Server 服务帐户更改为域帐户。若要继续使用该非域帐户,请更改该端点以便使用证书。
此时 就需要分别在两个节点数据库上创建证书,并且彼此还原对方的证书,SQL代码如下:
--共享文件夹路径: ---\\HIS_SLAVE_1\his_cluster_share_disk
--节点一上执行:创建主密钥/证书/端点,备份证书。
--创建主密钥
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'wxl.1989'; ----密码
GO
--创建证书
CREATE CERTIFICATE CERT_HIS_SLAVE_1
WITH SUBJECT = 'CERT_HIS_SLAVE_1',
START_DATE = '2021-04-04',EXPIRY_DATE = '2099-12-31';
GO
--备份证书
BACKUP CERTIFICATE CERT_HIS_SLAVE_1
TO FILE = '\\HIS_SLAVE_1\his_cluster_share_disk\CERT_HIS_SLAVE_1.cer';
GO
参考:
CREATE ENDPOINT (Transact-SQL)
--创建镜像端点
CREATE ENDPOINT HIS_AG_Endpoint
AUTHORIZATION [sa]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE CERT_HIS_SLAVE_1, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--节点二上执行:创建主密钥/证书/端点,备份证书。
--创建主密钥
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'wxl.1989'; ----密码
GO
--创建证书
CREATE CERTIFICATE CERT_HIS_SLAVE_2
WITH SUBJECT = 'CERT_HIS_SLAVE_2',
START_DATE = '2021-04-04',EXPIRY_DATE = '2099-12-31';
GO
--备份证书
BACKUP CERTIFICATE CERT_HIS_SLAVE_2
TO FILE = '\\HIS_SLAVE_1\his_cluster_share_disk\CERT_HIS_SLAVE_2.cer';
参考:
--创建镜像端点
CREATE ENDPOINT HIS_AG_Endpoint
AUTHORIZATION sa
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE CERT_HIS_SLAVE_2, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--节点一上执行:创建节点二的证书
USE master;
GO
CREATE CERTIFICATE CERT_HIS_SLAVE_2
--authorization sa
FROM FILE = '\\HIS_SLAVE_1\his_cluster_share_disk\CERT_HIS_SLAVE_2.cer';
GO
--节点二上执行:创建节点一的证书
USE master;
GO
CREATE CERTIFICATE CERT_HIS_SLAVE_1
--authorization sa
FROM FILE = '\\HIS_SLAVE_1\his_cluster_share_disk\CERT_HIS_SLAVE_1.cer';
GO
继续创建always on
注意此处副本不能提前还原数据库操作,需要同步,否则出现上图。
添加侦听器
增加侦听器后可以通过侦听器名 aglistener 或者设置的 IP[192.168.1.6]访问 AlwaysOn 高可用组, 系统自动实现负载均衡和故障转移。
注意 测试过程中
删除节点才能删除证书
select * from sys.endpoints
drop ENDPOINT 节点名称
drop certificate 证书名称
测试不容易 看到后的大佬们给点个赞吧~