Sql server 2016 Always on 实现无域高可用
Sql server 2016 Always on 实现无域高可用
上一篇:sql server 2016 Always on 无域部署教程 使用三台服务器组成了sql server 高可用,但是基于成本考虑很多情况下我们只有两台服务器,今天就来测试下用两台服务器来组建sql server 高可用。
一、环境准备
①、服务器及IP规划
| 主机名 | IP地址 | 描述 |
|---|---|---|
| sql3.yishoe.com | 192.168.6.53 | 数据库 |
| sql4.yishoe.com | 192.168.6.54 | 数据库 |
| win-cluster | 192.168.6.56 | 集群侦听IP |
| sqlcluster | 192.168.6.57 | sql 高可用侦听IP |
②、设置集群节点主机名,每个节点都需要设置

修改hosts文件,文件路径:C:\Windows\System32\drivers\etc
192.168.6.53 sql3.yishoe.com
192.168.6.54 sql4.yishoe.com
192.168.6.56 win-cluster.yishoe.com
192.168.6.57 sqlcluster.yishoe.com
直至可以使用主机名互相ping通

③、防火墙放行
注:两台服务器都需要放行
3.1、开启ICMP回显已检测服务器是否可以ping通
3.2、放行1433(Sql Server数据库端口)/5022(数据库镜像端口)
3.3、开启WMI、及远程相关应用和功能防火墙放行。(生产环境不建议关闭防火墙)
回显开启,方便测试服务器是否通达

故障转移集群需要允许通过防火墙


④、安装Windows Failover Cluster Feature(win 故障转移集群)
注:两台服务器都需要安装

⑤、安装sql server
注:两台服务器单独安装

二、创建Win 故障转移集群
①、使用powershell创建故障转移集群
管理员启动powershell
New-Cluster –Name win-cluster -Node sql3.yishoe.com,sql4.yishoe.com -AdministrativeAccessPoint DNS -StaticAddress 192.168.6.56
创建完成

–获取集群名
Get-Cluster

–群集详情
Get-ClusterResource

②、验证集群高可用
先ping一下试试

管理故障转移集群
在服务器管理器–>工具–>故障转移群集–>右键故障转移群集管理器–>连接到群集(N)–>输入集群的名称,如:win-cluster
注:故障转移集群名称必须能ping通,能解析。

我们关闭了一台服务器

将关闭的服务器重新启动
集群恢复正常

三、配置Sql Server 2016 Alwayson
①、sql server 启用always on
注:两台sql server 服务器都需要启用
启用后需要重启下sql server服务

②、sql server 启动用户
百度到的文章都说需要启用单独的统一的用户启动,我这里就是用系统NT Service 用户启动

③、新建一共享文件夹用户
只给administrator 权限

在另外一台服务器测试访问没问题

④、为数据库通信创建证书
注:先两个节点分别执行step1生产证书后,将sql3服务器生产的证书copy到sql4服务器指定目录下(C:\software\cerficates)。
然后再执行step2、step3两个步骤!
sql3 服务器执行
--step1
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '*********'
--创建主密钥
CREATE CERTIFICATE cer_alwayson_063
WITH SUBJECT='alwayson 063 local certificate',
EXPIRY_DATE='9999-12-31'
--创建证书 这里有两个"cer_alwayson_063",建议每台机器都改成不同的名称以作区分
EXEC xp_create_subdir 'C:\software\cerficates'
--创建存放证书目录
BACKUP CERTIFICATE cer_alwayson_063
TO FILE='C:\software\cerficates\cer_alwayson_063.cer'
--将证书保存在本地C:\software\cerficates 路径下
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE cer_alwayson_063,
ENCRYPTION = REQUIRED ALGORITHM AES,
ROLE = ALL)
--创建镜像端点
--step2:
CREATE LOGIN alwayson_user
WITH PASSWORD='*********',
CHECK_POLICY=OFF
--创建镜像用户
USE MASTER
GO
CREATE USER alwayson_user FOR LOGIN alwayson_user
CREATE CERTIFICATE cer_alwayson_064
AUTHORIZATION alwayson_user
FROM FILE='C:\software\cerficates\cer_alwayson_064.cer'
--step3:grant connection right
GRANT CONNECT ON ENDPOINT:: Endpoint_Mirroring TO alwayson_user
sql4服务器执行
--step1
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '***********'
--创建主密钥
CREATE CERTIFICATE cer_alwayson_064
WITH SUBJECT='alwayson 064 local certificate',
EXPIRY_DATE='9999-12-31'
--创建证书 这里有两个"cer_alwayson_064",建议每台机器都改成不同的名称以作区分
EXEC xp_create_subdir 'C:\software\cerficates'
--创建存放证书目录
BACKUP CERTIFICATE cer_alwayson_064
TO FILE='C:\software\cerficates\cer_alwayson_064.cer'
--将证书保存在本地C:\software\cerficates 路径下
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE cer_alwayson_064,
ENCRYPTION = REQUIRED ALGORITHM AES,
ROLE = ALL)
--创建镜像端点
--step2:
CREATE LOGIN alwayson_user
WITH PASSWORD='**********',
CHECK_POLICY=OFF
--创建镜像用户
USE MASTER
GO
CREATE USER alwayson_user FOR LOGIN alwayson_user
CREATE CERTIFICATE cer_alwayson_063
AUTHORIZATION alwayson_user
FROM FILE='C:\software\cerficates\cer_alwayson_063.cer'
--step3:grant connection right
GRANT CONNECT ON ENDPOINT:: Endpoint_Mirroring TO alwayson_user
⑤、建一个测试数据库
sql3作为主数据库服务器创建一个新测试数据库

将sql3上的Demo数据库做一个完整备份和日志备份还原到sql4服务器上
注:恢复状态需设置为RESTORE WITH NORECOVERY
注:按此手动同步数据库,创建可用性组后需要进入副本服务器sql 可用性组中将副本服务器上的数据库手动联接到可用性组

查看sql4上数据库状态

⑥、配置 sql server always on 可用性
此操作在sql3上执行

设置可用性组名称,例如:sqlcluster

选择需要高可用的数据库

指定副本

设置可用性模式为同步提交,且都可读。并勾选自动故障转移!

备份可以在任何副本上执行

创建侦听器:sqlcluster

数据库同步方式
我这里选择手动备份还原,所以跳过初始化同步。


验证没问题就执行下一步

接下来喝杯茶,等着安装完成。

注:上面配置完之后还有一部需要操作,否则查看sql server 可用性组面板显示错误

在副本服务器上将数据库联接到可用性组

再次刷新可用性面板

高可用性就搭建好了!
四、报错处理
①、没有做事务日志还原

解决办法:在主数据库服务器备份最新事务日志还原到报错的节点即可。
参考:配置SQL Server 2016无域AlwaysOn
参考:sql server 2016 AlwaysOn实现无域高可用全教程