天天看点

配置SQL Server 2016无域AlwaysOn

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

下面就来一步一步配置2个节点的无域的SQL AlwaysOn 

环境准备:

(1)2台物理服务器,也可以是2台虚拟机。操作系统:Windows Server 2016 Datacenter  

(2)2台服务器上均安装SQL Server 2016 (也可以是SQL Server 2012)

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 (虚拟IP)

可用性组名称:SQLAG

SQL侦听器名称:JFSQL01   IP地址:10.2.218.133(虚拟IP)

注意事项:

1,只有Windows Server 2016 操作系统才能配置不依赖域的群集 ,2台服务器的操作系统,安全补丁,SQL Server版本要完全一致。

2,两个节点的Windos Server 2016 都以Administrator账户登录,并且两台服务器的Administrator密码相同,无特殊意义,只是为了方便后续的操作。

3,两个节点的SQL Server 2016 服务启动账户都设置成Administrator 。2个节点的数据库都有Administrator的登录名,也就是使用Administrator登录服务器时,可用Windows身份验证登录SQL Server。

      即:

           节点1的SQL Server上有:JF-SQLDB01\administrator  ;节点2上有:JF-SQLDB02\administrator ;这2个登录账号,在安装SQL Server的时候可创建。均有sysadmin权限。

一:首先配置Windows故障转移群集(2个节点均使用Administrator登录)

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

配置SQL Server 2016无域AlwaysOn

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

配置SQL Server 2016无域AlwaysOn

第三步:在每个节点上都添加一个用户(我增加的用户名称是DCAdmin),且用户名以及密码每个节点都一致,添加此用户的目的是为了2台服务器能访问共享文件夹。

配置SQL Server 2016无域AlwaysOn

第四步:在每个节点的 hosts 文件中添加每个节点的服务器IP地址和名称、群集IP地址和名称、侦听器IP地址和名称,如下所示。

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

hosts文件可以用记事本打开

配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn

服务器名称,填写的是计算机全名,也就是服务器名带上之前设置的DNS名称后缀的名称,例如:JF-SQLDB01.test.cn。host文件需要在2个节点的服务器上都进行相同的操作。

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

配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn

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

配置SQL Server 2016无域AlwaysOn

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

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

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

 New-Cluster -Name JF-AlwaysOn -Node JF-SQLDB01,JF-SQLDB02 -StaticAddress 10.2.218.130 -AdministrativeAccessPoint DNS 

--获取集群名

Get-Cluster  

--群集详情  

Get-ClusterResource

配置SQL Server 2016无域AlwaysOn

使用Power Shell 安装群集后,在故障转移群集管理器中是看不到群集信息的,需要手动连接到群集,如下面图所示:

配置SQL Server 2016无域AlwaysOn

打开故障转移群集管理器后,在管理器处右键鼠标,选择“连接到群集” :

配置SQL Server 2016无域AlwaysOn

在弹出的对话框中手动输入群集的名称:

配置SQL Server 2016无域AlwaysOn

这样就能在故障转移群集管理器中看到群集的信息了。同样的方法在DB2的节点上再重复设置即可在DB2上看到群集信息。

配置SQL Server 2016无域AlwaysOn

二:配置SQL Server AlwaysOn 

SQL Server的安装这里就不描述,直接从配置AlwaysOn开始操作。

1 ,这里配置AlwaysOn,我采用的是共享文件夹的方式,所以首先在DB1这个节点上创建一个共享文件夹添加之前在每个节点上都创建的用户DCAdmin,这样DB2这个节点也能访问。

配置SQL Server 2016无域AlwaysOn

2,在DB1和DB2上设置启用AlwaysOn

配置SQL Server 2016无域AlwaysOn

启用AlwaysOn会要求重启服务,重启就可以。

3,重启服务后,查看服务器属性,确保 HADR 为 True 

配置SQL Server 2016无域AlwaysOn

既然节点没有加入域,那么就不能用域认证,只能用证书认证,因此需要在每个节点的数据库中创建其他节点的数据库证书。(请留意我连接数据库的账户,在创建端口的代码中有用到)

因此在配置可用性组前先在各节点配置证书认证信任。

4,分别在两个节点数据库上创建证书,并且彼此还原对方的证书,SQL代码如下:

注:我是在节点1上用administrator登录服务器,使用Windows身份登录SQL Server。在节点2上也是用administrator登录服务器,使用Windows身份登录SQL Server

--共享文件夹路径: ---\\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)   ---侦听端口,1024 和 32767 之间的任何数字都有效。侦听IP地址,默认值为 ALL,表示侦听器将接受任何有效 IP 地址上的连接

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,配置可用性组,接下来就和以前版本的配置是一样的了,不再描述,按照下面的截图一步一步配置

配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn

6,最后创建侦听器,当然,创建侦听器也可以在上一步设置。

配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn
配置SQL Server 2016无域AlwaysOn

最后,可以使用侦听器名称来连接数据库,数据库显示已同步,配置无域AlwaysOn成功。

配置SQL Server 2016无域AlwaysOn

继续阅读