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实现无域高可用全教程