当前位置: 首页 > news >正文

SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。

  本篇主要描述个人集群搭建中遇到的坑和一些注意事项,以及2016无域负载均衡的简单体验测试。

搭建体验

基础环境

  想要不使用域环境来搭建AlwaysON 必须使用windows 2016 和sql server2016

  本篇我使用3台虚拟机(主要是为了测试负载均衡,否则2台就可以),为了搭建的纯洁性,我3台机器都是独立安装,没有使用虚机复制。

遇到的问题

  整体的系统,故障转移集群,AlwaysOn搭建都和2012和2014没有太大差别,所以这里只介绍几个搭建时的特殊注意点。

  1.因为没有域所以需要在”计算机属性“添加计算机的DNS后缀。

2.需要做域名解析(域名解析运行——>drivers,每个节点都需要配置)

3.图形化创建会出现问题,导出脚本查看发现脚本不全

  下面是创建AWO的脚本(前提是各个节点已经还原的备份文件)

  注: 以下脚本可以通过SSMS工具切换到SQLCMD模式运行

--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect sql16node1IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0
BEGINALTER ENDPOINT [Hadr_endpoint] STATE = STARTED
ENDGOuse [master]GOGRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER]GO:Connect sql16node1IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON);
END
IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START;
ENDGO:Connect sql16node2IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0
BEGINALTER ENDPOINT [Hadr_endpoint] STATE = STARTED
ENDGOuse [master]GOGRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER]GO:Connect sql16node2IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON);
END
IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START;
ENDGO:Connect sql16node3IF (SELECT state FROM sys.endpoints WHERE name = N'Hadr_endpoint') <> 0
BEGINALTER ENDPOINT [Hadr_endpoint] STATE = STARTED
ENDGOuse [master]GOGRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [NT Service\MSSQLSERVER]GO:Connect sql16node3IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON);
END
IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health')
BEGINALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START;
ENDGO:Connect sql16node1USE [master]GOCREATE AVAILABILITY GROUP [KK_AG_2016]
WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
DB_FAILOVER = OFF,
DTC_SUPPORT = NONE)
FOR DATABASE [AWO_2016]
REPLICA ON N'SQL16NODE1' WITH (ENDPOINT_URL = N'TCP://SQL16NODE1:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)),N'SQL16NODE2' WITH (ENDPOINT_URL = N'TCP://SQL16NODE2:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)),N'SQL16NODE3' WITH (ENDPOINT_URL = N'TCP://SQL16NODE3:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL));GO------------这部分代码是图形化工具中缺失的步骤:Connect sql16node2ALTER AVAILABILITY GROUP [KK_AG_2016] JOIN;GO
ALTER DATABASE [AWO_2016] SET HADR AVAILABILITY GROUP = [KK_AG_2016];
GO:Connect sql16node3ALTER AVAILABILITY GROUP [KK_AG_2016] JOIN;GO
ALTER DATABASE [AWO_2016] SET HADR AVAILABILITY GROUP = [KK_AG_2016];
GO

创建监听

:Connect sql16node1USE [master]GOALTER AVAILABILITY GROUP [KK_AG_2016]
ADD LISTENER N'L_KK_AWO2016' (
WITH IP
((N'192.168.3.121', N'255.255.255.0')
)
, PORT=8000);GO

测试

高可用测试

  简单的看起来与之前没有什么差别,依然依赖故障转移群集,仲裁的的方式与2012R2基本相同,可以使用仲裁磁盘、仲裁文件夹或动态节点投票(偶数个节点依然会动态分配投票权),值得关注的是在windows2016的集群中添加了云仲裁,这个云端配置先不说,真是对于之前配置的跨机房的集群的福音。

负载均衡测试

配置负载均衡(此处只是简单的做了一下主节点的负载)

alter availability group kk_ag_2016
modify replica on 'sql16node1'
with
(
primary_role
(
read_only_routing_list = (('sql16node2','sql16node3'),'sql16node1')
)
)alter availability group kk_ag_2016
modify replica on N'sql16node1'
with
(secondary_role (read_only_routing_url = N'tcp://sql16node1.kk.com:1433')
)
go
alter availability group kk_ag_2016
modify replica on N'sql16node2'
with
(secondary_role (read_only_routing_url = N'tcp://sql16node2.kk.com:1433')
)
go
alter availability group kk_ag_2016
modify replica on N'sql16node3'
with
(secondary_role (read_only_routing_url = N'tcp://sql16node3.kk.com:1433')
)
go

测试的例子比较简单,也没使用什么压力工具就直接用SSMS管理工具。

  使用监听名称连接或监听IP加端口

 另外必须在连接参数中指定ApplicationIntent=ReadOnly

 开了5个窗口执行语句:

使用profiler抓取结果

只是看看能不能负载均衡,咋一看微软还真没骗人。但是要了解这只是只读副本的负载,而不是写入也可以负载!

  另外要注意AlwaysOn的数据同步是有时间延迟的(就算是同步模式)!

总结 : 文章只是简单的搭建和测试了一下没有做深入的研究,也许会给有兴趣了解2016AlwaysOn集群的朋友一点帮助吧,尤其是搭建过程,网上找到的基本都是英文文档,对于我这种看见鹰就发触的选手,也算是一点福音吧。

  2016的AlwaysOn可用组不需要域环境,可以负载均衡,还真的是有不小的吸引力。

 产品&服务

SQL专家云数据库智能运维平台

Moebius数据库多活集群

数据库协作运维服务

北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

http://www.lryc.cn/news/499724.html

相关文章:

  • 解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享20241204
  • 【开源免费】基于SpringBoot+Vue.JS中小型医院网站(JAVA毕业设计)
  • Linux CentOS
  • Android SurfaceFlinger layer层级
  • spark-sql配置教程
  • 生成表格pdf格式
  • C++ 游戏开发的前沿趋势:从光线追踪到人工智能的全新挑战
  • 微信小程序3-显标记信息和弹框
  • EasyNVR中HTTP-FLV协议无法播放怎么解决?
  • spring cloud之ribbon复习回顾
  • RFT 强化微调
  • SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
  • 分布式搜索引擎Elasticsearch
  • 在Vue.js中生成二维码(将指定的url+参数 生成二维码)
  • 统信桌面专业版部署postgresql-14.2+postgis-3.2方法介绍
  • 数字图像处理(16):RGB与HSV互转
  • web组态可视化编辑器
  • 数组 - 八皇后 - 困难
  • 【分布式】Redis分布式缓存
  • Ubuntu——extrepo添加部分外部软件源
  • 评估大语言模型(LLM)在分子预测任务能够理解分子几何形状性能
  • 如何查看电脑刷新率
  • mysql集群MHA方式部署
  • 第十七章 使用 MariaDB 数据库管理系统
  • rabbitmq 安装延时队列插件rabbitmq_delayer_message_exchange(linux centOS 7)
  • Unity性能优化---动态网格组合(一)
  • Appium:安装uiautomator2失败
  • 电子信息工程自动化 单片机彩灯控制
  • word poi-tl 表格功能增强,实现表格功能垂直合并
  • LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型