配置SQL Server 2016无域AlwaysOn(转)

时间:2022-03-08 17:37:51

Windows Server 2016 以及 SQL Server 2016出来已有一段时间了,因为Windows Server 2016可以配置无域的Windows群集,因此也能够以此来配置无域的SQL Server AlwaysOn 高可用。

下面就来一步一步配置无域的SQL AlwaysOn

环境准备:

(1)操作系统:Windows Server 2016 Datacenter

(2)SQL Server 2016

注意:只有Windows Server 2016 才能无域配置群集

在每一个群集节点上以管理员方式运行Powershell:

new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1

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

可用性组名称:SQLAG

SQL侦听器名称:JFSQL01   IP地址:10.2.218.133

注意事项:

1,两个节点的Windos Server 2016 都已Administrator账户运行,并且两台服务器的Administrator密码相同。

2,两个节点的SQL Server 2016 服务启动账户都设置成Administrator 。

一:首先配置Windows群集

第一步:安装Windows故障转移群集(所有节点都需要安装)

第二步:每个节点的计算机不需要加入域,但需要添加DNS后缀,且每个节点的后缀必须要相同,如下图所示的操作。

第三步:在每个节点上都添加一个用户,且用户名以及密码每个节点都一致。

第四步:在每个节点的 hosts 文件中添加节点的计算机信息、群集信息、侦听器信息。

hosts文件路径:C:\Windows\System32\drivers\etc

hosts文件可以用记事本打开

第五步:设置允许应用或功能通过防火墙,两个节点均要设置,按照下面图中红框框出的地方设置,注意选项后面打勾的位置。

第六步:在DB1这个节点上,用以管理员方式运行Power Shell ,使用脚本创建Windows群集。因为无域的群集没有图形化界面可设置,所以只能使用PowreShell 。

注意:如果登陆Windows Server 2016服务器的账户不是Administrator,需要先以管理员方式运行PowerShell,执行下面的命令:

new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1

因为我登陆Windows Server 2016用的是Administrator,所以跳过执行上面的命令,直接运行下面的命令:

Power Shell 脚本:  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代码如下:

--共享文件夹路径: ---\\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)
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成功。

---------------------
作者:左君右峰
来源:CSDN
原文:https://blog.csdn.net/roven257/article/details/78691892
版权声明:本文为博主原创文章,转载请附上博文链接!