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 原理及故障排除相关推荐

  1. SQL Server AlwaysOn可用性及故障转移

    SQL Server AlwaysOn可用性及故障转移 杜飞 在 AlwaysOn 可用性组中,"可用性模式"是一个副本属性,该属性确定某一给定可用性副本是否可在同步提交模式下运行 ...

  2. SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group

    本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的S ...

  3. SQL Server AlwaysOn中的几个误区

    SQL Server AlwaysOn中的几个误区 原文: SQL Server AlwaysOn中的几个误区 AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨 ...

  4. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http:// ...

  5. 配置SQL Server AlwaysOn高可用性组

    In this article, we will learn the step by step configuration of SQL Server AlwaysOn High availabili ...

  6. 管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控

    本文属于管理SQL Server AlwaysOn 系列文章 前言: 前面几节提到了如何对AlwaysOn做常规管理,这一节和接下来的一节专门对"监控"进行解释和演示.管理和监控这 ...

  7. Sql server AlwaysOn搭建常见问题

    Sql server AlwaysOn搭建容易出现的一些问题 在搭建AlwaysOn的时候碰到了一些问题,在网上也很难找到一些针对性的解决方法,所以记录一下我碰到的一些问题. 在搭建window故障转 ...

  8. SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

    本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Se ...

  9. SQL Server AlwaysOn读写分离配置

    SQL Server AlwaysOn读写分离配置 pursuer.chen 备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都 ...

最新文章

  1. 用 CentOS 做一个 BGP 路由器
  2. 另类设计:12个基于桌面视图的网页设计作品
  3. svn错误:Two top-level reports with no target
  4. linux shell 数组对比,bash shell之数组使用(牛逼篇)
  5. centos 如何登陆mysql_CentOS 配置MySQL允许远程登录
  6. sqlserver 遇到以零作除数错误的处理 不报错的解决方法
  7. BZOJ1013球形空间产生器sphere 高斯消元
  8. python token flask_flask 实现token机制
  9. python deap_DEAP(Distributed Evolutionary Algorithms in Python)1.2.2文档(一)
  10. 使用vue-pdf-signature实现pdf预览
  11. 部署外网网站(一)——内网穿透实现外网访问
  12. 明珠三国java最新_新明珠三国下载-新明珠三国最新版下载v5.0-三国在线
  13. gtk如何修改combobox的下拉箭头_如何管理你的思维导图?
  14. 测试岗位面试前复习之【测试基础知识篇】
  15. android平台开发板外接罗技C525摄像头不支持扫码有什么办法解决
  16. Packet Tracer学习小结(基本SwitchPort VLan)
  17. matlab 信号生成,Matlab产生信号的方法
  18. 八数码(Eight Digits)问题:宽度优先搜索、全局择优搜索、A*算法(C语言实现)
  19. c语言倍增算法,用倍增公式选股
  20. 颁发证书的时候报错:

热门文章

  1. 2019.03.04【ZJOI2018】【BZOJ5213】【洛谷P4339】迷宫(自动机)(数论)
  2. 树状数组 + 二分 - Query HDU - 4339
  3. FPGA高速ADC接口实战——250MSPS采样率ADC9481
  4. 安全架构--3--附-安全制度管理
  5. Windows系统安全学习手册
  6. ElementUi Table复选框回显
  7. Loj 538 递推数列
  8. demo-原生js实现你说我猜小游戏
  9. JFrame的一些简单操作
  10. 《向往的生活》乔杉在男生宿舍躺着抽电子烟