SQL SERVER Alwayson 原理及故障排除
SQL SERVER Alwayson 是SQL SERVER 分布式数据库的一种形式,使用的公司可能不是很多,对于快速开发和高可用,是一种很不错的解决方法。但在使用中,也会有TROUBLE的问题,我们今天来聊聊SQL SERVER 的ALWAYS ON 的原理以及一些故障,希望对大家有帮助。
SQL SERVER 的Always on 是基于PAXOS 协议的,其实说到底WINDOWS Failover Cluster 也应该是基于 PAXOS (如果有不对,希望 WINDOWER 们来指正我哈)
这张图就是一个SQL SERVER ALWAYS ON 2016 -2017 的架构图,SQL SERVER 2017 支持 1个主 8个从节点的架构,不过一般来说都是1个主 两个从的使用方式是一个主流。那SQL SERVER 的 ALWAYS ON 和 MYSQL的 MGR 有什么不同
1 MYSQL 的MGR 支持 多主的模式, SQL SERVER 不支持
2 SQL SERVER 的AWO 支持 同步和异步模式 MYSQL 的 MGR 你可以视为是强一致的同步模式。
3 SQL SERVER 和 MYSQL 都是通过日志的方式来进行复制的。
4 MYSQL 的 MGR 是使用整体数据库复制的方式 ORACLEER们可以理解,而 SQL SERVER 的集群,不是基于 INSTANCE 而是基于数据库的(不是ORACLE 理解的数据库,ORACLE的ER 们可以理解为一组 SCHEMA,用户拥有的表),从这点看 SQL SERVER 还是比较灵活的和友好的。
那下面还是的在深入的说一下 ALWAYS ON的原理
上面的图很好的诠释了ALWAYS ON 的整个信息的同步流程
1 SQL SERVER 将 LDF 日志刷入磁盘,并且此时LDF 的日志必须要复制到从节点发送和主库的日志写入的顺序是一致的。(这是不是想起MYSQL的 BINLOG,但不是很一样,为什么自己想,上面写了哦,想不起来,文章结尾会写)
2 日志会复制到对应的从库的日志队列,然后捕捉的线程会一直运行,将传送过来的数据进行数据的同步,如果由于某些原因,复制出现问题,那LOG SEND队列就建立起来了。
3 信息在每个数据库中的复制队列被拿出然后通过网络传输到从库中
4 从库接受并且将数据快速 cache 起来
5 LOG 被物理的FLUSH 到从库的LDF 文件中,并且会给 主库一个 ACK(这让我想起MYSQL 的半同步)
6 启动REDO 线程,将数据刷入到 MDF NDF 文件中。
看上去很简单,但实际的工作绝对不比MYSQL的 BINLOG 复制简单。
另外在主,从副本中是要有流量控制的,以一个数据包来说 包含了 8192个 MESSAGES ,同时对于数据库等级也是有控制的,一个数据库最大一次传输 11200 MESSAGES ,(以那个为准,这个问题估计你不是SQL SERVER DBAER,文章结尾也会提到) ,这个两个标准以先到先得的标准,在对方不应答的情况下,传送LOG的服务会等到对方应答,接受到这么多的日志后,传送方会继续传送。同时还有一个隐藏的发送标准就是LSN号,主从库的差异,当然通过 last commit的时间也是可以判断主从节点之间的同步状态是怎样的。具体请参考 SQL SERVER DMV 的 hard_database_replica_states
同时由于ALWAYSON 的 FAILOVER 功能,在进行FAILOVER 也是要评判当前的切换的主机是否和从库的 LSN 吻合,这样就演化出判断AWO的性能的两个参数 RTO 和 RPO 两个参数通过这两个参数可以判断出AWO如果目前遇到主机故障,是否可以快速切换。让我想起 MYSQL的 MHA的功能以及其存在的意义。这里不再做详细的解释,感兴趣 GOOGLE 就可以,一堆解释和脚本。
一般ALWAYSON 的故障常见的故障或问题,
数据延迟,这是一种,(AWO 有两种,异步和同步),这里即使你使用了同步的方式进行复制,那其实主库和从库还是有时间差异的(尤其在I/O 和网络性能不好的情况下)
在SQL SERVER 里面这样的问题叫 HIGH HADR_SYNC_COMMIT
那引起这个问题是哪几部可能存在这样的问题,
事务在主节点初始化
主复制不作transaction logs 并且发送到 secondary 复制
从库复制接受并且硬化日志并发送给从库
下面的图中,就是有可能产生性能问题的地方,但用大白话来说
1 大事务
2 糟糕的网络
3 糟糕的I/0
同时通过SQL SERVER 性能监控器的 DATABASE REPLICA 中的 事务延迟和 事务镜像同步 都可以看出延迟了多长时间。
所以打破一个概念就是 SQL SERVER AWO 同步复制,主从数据就一定百分百时间一致,NO NO NO 我查看了 目前的生产库, MYSQLER们可以理解为 behind master 当然 SQL SERVER 高大上,时间都显示了,差多少都心里有数。
好了回答上面的, 有人不知道的问题
MYSQL 5.6 的复制 和 MYSQL 5.7 的复制有什么不同,不知道这里就不提了,这里拿MYSQL 5.6 多线程复制 对比 SQL SERVER AWO 复制,可以类比,因为都是一个库一个线程(SQL SERVER AWO 看上去也是),MYSQL 5.7 以后 到 8.0 可都是要 多线程复制,并且GR 的复制方式,这里就慢慢和 AWO 不能进行类比了。另外SQL SERVER 的复制是按照数据库日志,而MYSQL 的复制是按照 BINLOG (FILTER database replication 那也是过滤和SQL SERVER 的复制还是不一样,所以这点是不能类比的。
顺便给SQL SERVER 打个广告 SQL SERVER 2019 直接整合 SPARK ,做大数据库的 可以关注一下,虽然不见得有多好,但至少多一个选择,短平快,数据量一般的还是可能享受到一波 ”宏利“
SQL SERVER Alwayson 原理及故障排除相关推荐
- SQL Server AlwaysOn可用性及故障转移
SQL Server AlwaysOn可用性及故障转移 杜飞 在 AlwaysOn 可用性组中,"可用性模式"是一个副本属性,该属性确定某一给定可用性副本是否可在同步提交模式下运行 ...
- SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group
本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的S ...
- SQL Server AlwaysOn中的几个误区
SQL Server AlwaysOn中的几个误区 原文: SQL Server AlwaysOn中的几个误区 AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨 ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http:// ...
- 配置SQL Server AlwaysOn高可用性组
In this article, we will learn the step by step configuration of SQL Server AlwaysOn High availabili ...
- 管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控
本文属于管理SQL Server AlwaysOn 系列文章 前言: 前面几节提到了如何对AlwaysOn做常规管理,这一节和接下来的一节专门对"监控"进行解释和演示.管理和监控这 ...
- Sql server AlwaysOn搭建常见问题
Sql server AlwaysOn搭建容易出现的一些问题 在搭建AlwaysOn的时候碰到了一些问题,在网上也很难找到一些针对性的解决方法,所以记录一下我碰到的一些问题. 在搭建window故障转 ...
- SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?
本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Se ...
- SQL Server AlwaysOn读写分离配置
SQL Server AlwaysOn读写分离配置 pursuer.chen 备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都 ...
最新文章
- 用 CentOS 做一个 BGP 路由器
- 另类设计:12个基于桌面视图的网页设计作品
- svn错误:Two top-level reports with no target
- linux shell 数组对比,bash shell之数组使用(牛逼篇)
- centos 如何登陆mysql_CentOS 配置MySQL允许远程登录
- sqlserver 遇到以零作除数错误的处理 不报错的解决方法
- BZOJ1013球形空间产生器sphere 高斯消元
- python token flask_flask 实现token机制
- python deap_DEAP(Distributed Evolutionary Algorithms in Python)1.2.2文档(一)
- 使用vue-pdf-signature实现pdf预览
- 部署外网网站(一)——内网穿透实现外网访问
- 明珠三国java最新_新明珠三国下载-新明珠三国最新版下载v5.0-三国在线
- gtk如何修改combobox的下拉箭头_如何管理你的思维导图?
- 测试岗位面试前复习之【测试基础知识篇】
- android平台开发板外接罗技C525摄像头不支持扫码有什么办法解决
- Packet Tracer学习小结(基本SwitchPort VLan)
- matlab 信号生成,Matlab产生信号的方法
- 八数码(Eight Digits)问题:宽度优先搜索、全局择优搜索、A*算法(C语言实现)
- c语言倍增算法,用倍增公式选股
- 颁发证书的时候报错: