概述
一、说明
配置环境
Windows server 2019
SqlServer 2017
设备
PC1(主节点):JF-SQLDB01 IP地址 192.168.50.199
PC2(节点):orangePC IP地址 192.168.50.230
PC3(节点):pearPC IP地址 192.168.50.18
PC4(测试机):DESKTOP-46PCO3Q
群集名及侦听规划
Windows群集名称:jfqun
可用性组名称:SQLAG
SQL侦听器名称:jfqunLis IP地址:192.168.50.201(虚拟IP)
DNS 后缀: jf.cn
二、 配置操作系统环境
- 修改计算机名添加 dns 后缀名 (所有节点)
- 以administrator 登录并添加密码(所有节点)
- 打开 路径 C:WindowsSystem32driversetc 下 的hosts 文件配置相关映射 (所有节点+测试机)
- 打开防火墙设置允许通过的应用和功能(所有节点)
- 网络设置去掉 ipv6、设置 dns 后缀 、禁止 NetBIOS (所有节点)
- 控制面板-》所有控制面板项-》网络和共享中心-》更改高级共享设置 -》启用网络发现 (所有节点)
- 添加故障转移群集功能(所有节点)
- 创建故障转移群集(主节点)
三、 配置故障转移
- 安装 SqlServer 2017 和 SSMS (过程略)
- 配置SQL Server AlwaysOn (所有节点)
- 添加共享文件夹(主节点)
- 创建数据库的证书(所有节点)
--主节点上执行:创建主密钥/证书/端点,备份证书到共享文件夹中。
USE master;
GO
--drop master key 如果操作失误用这个命令删除
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'a_123456'; ----密码
GO
CREATE CERTIFICATE Cert_DB01
WITH SUBJECT = 'Cert_DB01',
START_DATE = '2017-12-01',EXPIRY_DATE = '2099-12-31'; --证书的有效时间
GO
--要开启 sql server的 xp_cmdshell 否则后面命令会拒绝访问
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
USE master
exec master..xp_cmdshell 'net use \Jf-sqldb01SQLAlwaysOnShare a_123456 /user:192.168.50.199administrator '--
BACKUP CERTIFICATE Cert_DB01
TO FILE = '\Jf-sqldb01SQLAlwaysOnShareCert_DB01.cer';
GO
CREATE ENDPOINT [SQLAG_Endpoint]
AUTHORIZATION [Jf-sqldb01administrator]
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 CERTIFICATE Cert_DB02
FROM FILE = '\Jf-sqldb01SQLAlwaysOnShareCert_DB02.cer';
GO
------------------------------------------
USE master;
GO
CREATE CERTIFICATE Cert_DB03
FROM FILE = '\JF-SQLDB01SQLAlwaysOnShareCert_DB03.cer';
GO
- 新增可用性组(主节点)
一路下一步
- 设置完后添加侦听器
四、 配置读写分离
20200528 今天试了下界面可以多选的,按住Ctrl 键 多选添加就行
USE [master]
GO
ALTER AVAILABILITY GROUP [SQLAG]
MODIFY REPLICA ON N'PEARPC' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ((N'ORANGEPC',N'JF-SQLDB01'),N'PEARPC')))
GO
USE [master]
GO
ALTER AVAILABILITY GROUP [SQLAG]
MODIFY REPLICA ON N'ORANGEPC' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ((N'PEARPC',N'JF-SQLDB01'),N'ORANGEPC')))
GO
USE [master]
GO
ALTER AVAILABILITY GROUP [SQLAG]
MODIFY REPLICA ON N'JF-SQLDB01' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ((N'PEARPC',N'ORANGEPC'),N'JF-SQLDB01')))
GO
五、 测试读写分离负载均衡
-
遇到的问题
1.网络发现设置不了
计算机(右键)----管理----服务与应用程序----服务
分别启动以下服务,
Function Discovery Resource Publication
SSDP Discovery
UPnP Device Host
2.可用性组创建失败
如果出现这个错误,就在【SqlServer 配置管理器】中禁用,再启用 alwaysOn,并重启服务
3.如果遇到群集节点加不上去
,请查看是否所有节点都正常,且要加的节点上连上 群集管理器
4.要是出现了侦听器添加失败的问题
,很不幸,找不到原因,只有切换下主从节点多试几次看看,会有差不多1/8 的几率会成功。
也可能是【故障转移群集】界面中 SQLAG 下的 侦听器对象没有清理掉,手动清理掉后再在 【SSMS】 界面重新加一下。
5.遇到测试电脑连接 侦听器 实现只读连接连不上
,请在测试电脑上配置下hosts 文件
6.如果销毁了群集重新搭建时发现副本数据库配置不上,
就把副本的SqlServer实例的服务属性的 “AlwaysOn” 勾选去掉保存,再勾上再重新启动就可以了。
7. 遇到数据库节点状态是 “未同步/可疑”
可疑节点 SqlServer 服务重启了下 变成了 “未同步” 还是没连上,
把问题节点删除下,重新再加入一下,会变成 “正在恢复” 过一会儿就好了
如果在添加副本的时候出现,连不上集群,就打开故障转移集群面板连上再,添加一次副本就好
8.重新添加可用性副本的时候要选择【仅连接】就好
9.如果使用【always on ApplicationIntent=ReadOnly】无法访问数据库了
请检查下面的路由URL路径是否配置正确
参考文章
配置SQL Server 2016无域AlwaysOn_左君右峰的博客-CSDN博客
https://www.cnblogs.com/lyhabc/p/6498712.html
https://www.cnblogs.com/chenmh/p/7000236.html
感谢几位博主
在某云搭建问题
正常原理是
SqlServer alwayson 侦听器:对外一个ip 访问群集数据库,通过识别数据库连接是否有
ApplicationIntent = ReadOnly 来区分 是要【读写】还是【只读】,
如果是【读写】就只走主副本,如果是【只读】就走 辅助副本,
尝试一:
配置:默认SqlServer Always On配置
问题:出现侦听器ip 对外无法访问
尝试二:
配置:默认SqlServer Always On配置 + 阿里slb替代侦听器(配置加入了读库写库的地址,配置成侦听器的ip,)
问题:出现slb 不能区分读库写库,会往 读库 里写入造成报错。
结论:slb不能实现上面提到的侦听器所能识别主、辅库,但是能负载均衡功能。
尝试三:
配置:写连接直接连主库,读连接连接阿里slb
问题:
结论: 不能实现自动故障转移,能实现读写分离 和 读的故障转移负载均衡
最后
以上就是安详摩托为你收集整理的SqlServer2017 AlwaysOn 读写分离 无域控的全部内容,希望文章能够帮你解决SqlServer2017 AlwaysOn 读写分离 无域控所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复