1 主机集群安装信息
软件准备准备:
SQL Server 2016
cn_sql_server_2016_enterprise_x64_dvd_8699450.iso
注意:只有Windows Server 2016 才能无域配置群集
IP以及名称规划:
节点1:d1 IP地址:192.168.56.131
节点2:d2 IP地址:192.168.56.130
Windows群集名称:clusterA IP地址:192.168.56.140
可用性组名称:TESTAG
SQL侦听器名称:JTSQL01 IP地址:192.168.56.150
2 安装软件
2.1 安装cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso软件
2.1 配置SqlManager用户添加到administrators组里
2.3 配置hosts文件
2.4 设置允许应用或功能通过防火墙,两个节点均要设置,按照下面图中红框框出的地方设置,注意选项后面打勾的位置。
3. 配置SQL Server AlwaysOn
3.1 在d1和d2上启用AlwaysOn
启用AlwaysOn会要求重启服务,重启就可以
3.2 重启服务后,查看服务器属性,确保 HADR 为 True
既然节点没有加入域,那么就不能用域认证,只能用证书认证,因此需要创建证书和端点。
3.3 分别在两个节点数据库上创建证书,并且彼此还原对方的证书,SQL代码如下:
d1服务器执行:
--(1)创建证书
USE master
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd0'; --改密码可修改,如下类似,但必须保持一致
GO
--DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
WITH SUBJECT = 'HOST_A certificate',START_DATE = '01/01/2016',EXPIRY_DATE = '01/01/2100'; --时间可以无限大,如下类似
GO
--(2)创建连接的端点
--DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022 --此端口可修改,但必须保持一致,如下类似。
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_A_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = PARTNER
);
GO
--(3)备份证书以备建立互联
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\backup\HOST_A_cert.cer';
GO
--(4)互换证书
将备份到C:\backup\的证书进行互换,即d1服务器的HOST_A_cert.cer复制到d2服务器的C:\backup\;d2服务器器的HOST_B_cert.cer复制到d1服务器的C:\backup\
d2服务器执行
--(1)创建证书
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd0';
GO
--DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
WITH SUBJECT = 'HOST_B certificate', START_DATE = '01/01/2016',EXPIRY_DATE = '01/01/2100';
GO
--(2)创建连接的端点
--DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_B_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = PARTNER
);
GO
--(3)备份证书以备建立互联
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\backup\HOST_B_cert.cer';
GO
--(4)互换证书
将备份到C:\backup\的证书进行互换,即d1服务器的HOST_A_cert.cer复制到d2服务器的C:\backup\;d2服务器器的HOST_B_cert.cer复制到d1服务器的C:\backup\
d1服务器执行
--添加登录名、用户
--为入站连接配置Host_A
--1.在HOST_A 上为HOST_B 创建一个登录名。
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = 'P@ssw0rd0';
GO
--2.创建一个使用该登录名的用户。
--DROP USER HOST_B_user
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
GO
--3.使证书与该用户关联。
--DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
AUTHORIZATION HOST_B_user
FROM FILE = 'C:\backup\HOST_B_cert.cer'
GO
--4.授予对远程镜像端点的登录名的CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
d2服务器执行
--添加登录名、用户
--1,为入站连接配置Host_B
--在HOST_B 上为HOST_A 创建一个登录名。
USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = 'P@ssw0rd0';
GO
--2,创建一个使用该登录名的用户。
--DROP USER HOST_A_user
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
GO
--3,使证书与该用户关联。
-- DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
AUTHORIZATION HOST_A_user
FROM FILE = 'C:\backup\HOST_A_cert.cer'
GO
--4,授予对远程镜像端点的登录名的CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO
3.4 节点 d1 创建测试数据库,完整模式,并备份恢复到d2 norecovery状态,涉及脚本
USE [master]
GO
BACKUP DATABASE demo1
TO DISK = 'C:\backup\demo1.BAK' WITH INIT,FORMAT,COMPRESSION
GO
--恢复数据库
USE [master]
GO
RESTORE DATABASE demo1
FROM DISK = 'e:\backup\demo1.BAK'
WITH FILE = 1,
MOVE 'E6PlateformMain_PRI_File1_Data' TO 'C:\Databases\MSSQLSERVERA\demo1.mdf',
MOVE 'DBName_log' TO 'C:\Databases\MSSQLSERVERA\demo1_log.ldf',
MOVE 'E6PlateformMain_PRI_File1_Data' TO 'C:\Databases\MSSQLSERVERA\demo1.ndf',
MOVE 'DBName_log' TO 'C:\Databases\MSSQLSERVERA\demo1_log.ldf',
RECOVERY
注:DBName,DBName_log可以使用
RESTORE FILELISTONLY from disk='C:\backup\MSSQLSERVER\demo1.BAK'
3.4 配置可用性组,接下来就和以前版本的配置是一样的了,不再描述,按照下面的截图一步一步配置
3.5 最后创建侦听器,当然,创建侦听器也可以在上一步设置。
最后,可以使用侦听器来进入数据库,配置无域AlwaysOn成功。
4 AlwaysOn添加可用性数据库
AlwaysOn搭建成功后,主从数据库已经实现数据同步。但我们经常还需要向已经建好的AlwaysOn可用性组中添加数据库。目前只有一个数据库demo1。
在主库新建数据库demo2,并建一张新表。然后进行完整备份和日志备份并以此还原到从库中,注意还原时采用norecovery选项。
此时先决条件已经准备好,接下来可以进行添加数据库操作。
AlwaysOn高可用性-可用性组-TESTAG-可用性数据库-右键 添加数据库。注意这一步只能在主库的可用性组上进行操作。
单击下一步,选中要添加的数据库。
单击下一步,选择仅连接,单击下一步,此时需要连接现有的辅助副本,默认是未连接状态。
参考技术
AlwaysOn 可用性组 (SQL Server) https://docs.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-2016