2010 年刚到上海, 在 HP 谋了一份商务智能的开发工作。做的是世界五百强的 ITIL 数据仓库项目。在这里见识到了书上讲的一些工具和应用,比如 Kimball《维度建模》中提到的各种维度模型,数据仓库之父 Inmon 对于数据集市原型的理论,开发工具更是类目纷繁,SQL Server , Oracle, SSIS, SSAS, SSRS, SAP BusinessObjects, BIEE, Hyperion, ProClarity, Performance Point Server, SharePoint Server, Excel Service, Crystal Reports(当时已被 BO 收购),ERWin 等等。要迁移 500 强集团各自的工具,需要的技术栈不是小团队能接手的,所以 HP 容纳了我们近 200 多号人。

随着项目的尾声,我们也陆陆续续有些人奔赴了其他岗位,而我收到了一份 Offer, 是当时乃至现在的存储业大佬开出的 SQL Server DBA 一职,薪资是 25K/M。 2008 年之前我看的书最多还是在 DBA 技巧上面,不论是 SQL Server 还是 Oracle ,只要是文档,拿来不拒。而 2010年参加完 ITIL 这份项目之后,我将重心移到了 BIDW 领域,甚至已经有心看 Hadoop 等分布式的数据系统,所以自然也就没接收。

如今项目中需要 SQL Server 的一些高可用属性,才想起当时 SQL Server DBA 一职面试的时候,问道过 SQL Server 的一些高级属性,比如复制,灾备以及高并发处理等等。然已经不看文档好久,趁此机会做个总结,也好下回应用有个参照。所以这会是个系列文档,慢慢写来。

高可用 (High Availability )可以保障 应用 7*24 小时在线。实现 SQL Server 高可用的方案有很多,不同版本提供的方案也不同。从完整的历史角度来整理,会有这些:

备份机制

Failover集群

Replication – Log:shipping, publish/subscribe, CDC, database mirroring

Alwayson Availability Group

有些已经退出历史舞台了,时下 Alwayson Availability Group 是头等公民。

Alwayson Availability Group 的实现,从架构上来看,是得益于主从模式(Master-Slave,Primary – Secondary). 在主库上支持读写,而在从库上只支持读操作。一旦主库不能访问了,就切换到从库,将从库提升为主库角色。

要确保应用数据可用,维护其一致性,首先要做到主从库之间的数据,实时同步。只要有一点延迟,主从切换就会导致数据丢失。《Design Data-Intensive Applications》主从库的同步机制讲得更细,应用分布式的设计方案。

Alwayson Availability Group,其从库可以达到 8 个之多,如果都从主库读取数据,可想,对主业务库会产生不可预知的负载,因此从库之间的复制就变得十分必要了。这是我一开始猜测的想法,结果和MSDN文档描述的大不一样。

AAG 从概念上分类,主要分为 Primary Replica 和 Secondary Replica. Primary Replica 负责管理所有的数据库主本,这些数据库是指定需要 Alwayson Availability Group 特性的一个或者多个数据库,Primary Replica 将监控这些数据库主本的日志,将其实时送到 Secondary Replica , 再由 Secondary Replica 将日志应用到本地的服务器上,还原主库的数据,以达到数据一致。在 Secondary Replica 副本数( 存储副本的服务器)大于 3 个的时候,其中两个服务器的日志需要和主库保持实时同步。这和《Data-Intensiv》讲述的是一致的。整个集群中,至少有3 台机器的数据,始终保持一致。

在同步主从库日志的过程中,MSDN强调 Primary Replica 负责了将日志从主库上同步到其他从库,而不是用从库上读取日志,同步到其他从库,那么在从库数量很多的配置中,主业务库将成在不可预知的查询量。为了降低这份查询量,我们需要设计 primary replica 从日至文件中读取增量日志来同步,存储在单独的 primary replica 的机器上,然后再分发。类似于kafka 分流的架构。

上述结构是将 primay replica 节点单独拿出来,作为中转服务器,与CDC的distributor起到一样的功用。如果不单独拎出来,与数据库服务器共存,共享服务器资源也能很好的工作。与CDC不同的是,CDC 可以控制延迟,而 AlwaysOn Availability Group 副本之间,是要严格保持同步的,有了 Primary Replica 这一层中间节点,怎么保证同步呢?

主从库同步机制以及从库的升级竞争机制 是隐藏在 Alwayson Availability Groups 操作背后的机理。无论我们的 AAG 是为了 failover 还是 read loadbalance 而设计,都需要对这两个原理着重理解。

主从库的同步,分为两阶段。第一阶段是全量同步,也就是从库的初始化。在实现初始化的阶段,运用的是备份恢复机制。对主库进行全备份,将备份文件在从库服务器上还原 ( restore with no recovery) ,并保持不恢复的状态,此时将这些从库加入到 Alwayson Availablity Groups,接着进行恢复。恢复的过程中,从库开始接受主库的日志,进行数据同步。为了减少同步的时间,越早进行从库的还原,恢复时候使用的时间越少;第二阶段是增量同步。增量同步是Primary Replica 进行的数据同步操作。这一阶段同步的成本高在事务等待时间,主库需要等待从库的写入安全的完成,才写入主库日志。显然写操作的延时会巨大。

主从库的同步,需要配置主从库的 Availability Mode. Mode 分为 Asynchronous-commit mode 和 Synchronous-commit mode. 当availability replica 设置为asynchronous-commit mode, replica 中配置的database, 不需要和主库实时同步;当设置为 synchronous-commit mode, 则replica 中配置的database,需要和主库保持实时同步,主库必须等待secondary replica 中的database 写入完成,才完成自己的写入。

主从库的设计主要就是了防范数据库失效故障事件,所以详细了解故障事件发生后主从库会有哪些操作,才会让我们在处理故障时游刃有余。AlwaysOn Availability Group 在处理失效故障事件时,一般都有三种切换主从库的 方式:手工切,自动切,强制切。设置了synchronous-commit mode的 availability replica,可以实现自动切和手工切,但是如果配置了 SQL Server Failover Cluster Instances( FCIs)的实例,就只能手工切了。也好理解,因为 primary database 如果有了FCI, 本身就带着 HA 特性来的,不需要自动切到 Secondary database 上去;如果设置的是 asynchronous-commit mode , 那么只能支持强制切,因为在 asynchronous-commit mode 下,主从库数据不会实时保持同步,会导致数据不一致,因此强制切是在了解了切换可能带来的风险下作的有效决定。

25K 月薪的 SQL Server DBA 面试一题相关推荐

  1. SQL Server DBA工作内容详解

    原文:SQL Server DBA工作内容详解 在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色. ...

  2. 一名小小的SQL Server DBA想谈一下SQL Server的能力

    一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章,至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章:<比 ...

  3. iotop iostat_适用于SQL Server DBA的有用的Linux命令– iotop和iostat

    iotop iostat In the article, we will learn how to use the 'iotop' and 'iostat' commands with various ...

  4. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令

    linux扩展磁盘空间命令 In this article, we will explore the different Linux commands related to the disk spac ...

  5. 2年SQL Server DBA调优方面总结

    2年SQL Server DBA调优方面总结 原文:2年SQL Server DBA调优方面总结 2年SQL Server DBA调优方面总结 当2年dba 我觉得,有些东西需要和大家分享探讨,先书单 ...

  6. 货拉拉sql互联网大厂面试真题在线练习

    货拉拉sql面试真题在线练习 一.sql刷题目的 二.互联网大厂货拉拉sql面试题 1.货拉拉sql数据表介绍 2.货拉拉订单练习题sql语句 (1)用车方和司机被禁止(banned=1)的比率分别为 ...

  7. 为什么这个SQL Server DBA学习PowerShell--SQL任务

    我开始学习PowerShell,是因为我在寻找一种快速和高效的方式收集有关我的SQL Servers的信息和更好地管理我的服务器工作负载的方式.我以为,我正在学习是另一门新的脚本语言,它能帮我做到前面 ...

  8. 为什么这个SQL Server DBA学习PowerShell--SMO任务及杂项

    SMO是一个对象集合,它允许你自动化任何Microsoft SQL  Server相关的管理任务.同样的,对于不熟悉面向对象编程的DBA来说,最大的障碍就是使用更令人生畏的对象模型.同样的,像WMI一 ...

  9. 为什么SQL Server DBA对Python感兴趣?

    If we follow blogs and publications on the technological advancement with respect to SQL, we notice ...

最新文章

  1. zimbra邮件服务器配置,Zimbra邮件服务器无需登录任意邮箱伪造漏洞修复
  2. 网页css样式中英对照,css中文样式(含中英文对照表).doc
  3. scala reduceLeft和reduceRight执行分析
  4. boost::uuid模块实现不同形式随机生成器的基准的测试程序
  5. 使用纯粹的ABAP位操作实现两个整数相加
  6. HTML DOM知识点补充:
  7. 第一百二十五期:程序员的自我救赎,使用Python开发性格分析工具
  8. Windows Embedded CE 6.0开发初体验(五)构建CE平台
  9. python对象属性赋值_关于python对象 中dict属性赋值的疑问
  10. mysql+安全性语言实验,实验四--数据库的安全性、完整性控制
  11. 织梦标签把","逗号改成空格技巧
  12. 【iOS开发】如何用 Swift 语言进行LBS应用的开发?
  13. ubuntu 12.04 LTS 安装配置JDK1.6.0_45
  14. exchange2013 OWA界面使用公有计算机或私有计算机选项
  15. Python实现将一个长度为n的列表划分 ,每个子列表中包含m个元素
  16. HTTP Content-type整理
  17. 将知网格式的.caj文件转换为.pdf文件
  18. Java:如何将多个JAR打包成单个可执行JAR(executable jar)
  19. 高端计算机教室,惟义楼高端智慧教室!360°高清全景抢先看
  20. 现场直播:域名转出的黑幕和愤怒!(商务中国BIZCN和美橙互联CNDNS)

热门文章

  1. Forrester:AI 科技与商业严重脱节,系统优化才是企业 AI 应用之道
  2. 捷克杀毒软件开发商Avast获得1亿美元投资
  3. RG-AP3220 产品介绍
  4. 7.3 字符串类型及内置方法
  5. Delectus dolorum impedit tempora facilis minimaFehlen Monate tragen immer draußen machen Hunge eius.
  6. 电影分析案例-分析导演、演员拍电影盈利和票房(2021/07/25)
  7. pygame 飞机大战 让子弹再飞一会儿
  8. zblog网站副标题去掉短线 - 桃源侠
  9. 3D游戏建模 高模“神仙药瓶”次世代全流程
  10. 如果后端API一次返回10万条数据,前端应该如何处理?