当前位置:首页 > 问答 > 正文

SQL Server高可用那些事儿,先聊聊基础别急着深入

主要参考了微软官方的文档和一些像“数据库技术爱好者社区”这样的技术论坛里常见的讨论思路,就是把复杂的东西先掰开揉碎了说。

SQL Server高可用那些事儿,先聊聊基础别急着深入

咱们今天聊SQL Server的高可用性,一听这个词儿,可能很多人就觉得头大,觉得这是一堆复杂的技术和英文缩写堆起来的,别急,咱们今天不往深了钻,就聊聊它最根本的东西,就像盖房子之前,得先明白为什么要打地基,以及地基有哪几种打法。

高可用性到底是个啥?

说白了,高可用性就是让你的数据库系统“尽量不停机”,注意,是“尽量”,不是“绝对”,因为世界上没有100%不停机的东西,总会有各种意外,比如服务器硬件坏了、机房断电了、甚至人为误操作把数据删了,高可用性方案的目标就是,当这些倒霉事发生时,能尽快地把服务恢复过来,让用户感觉不到或者只感觉到很短时间的中断。

这里有个很重要的概念叫“恢复时间目标(RTO)”,你可以把它理解成“系统允许宕机多久”,老板说:“数据库挂了必须在5分钟内恢复!”那这5分钟就是你的RTO,高可用方案就是帮你达成这个目标的工具。

那为啥需要高可用呢?

想象一下,如果一个电商网站的数据挂掉一个小时,会损失多少订单?一个在线游戏服务器宕机,会被多少玩家骂?现在很多业务都是7x24小时运转的,数据库作为核心,它停摆了,整个业务也就瘫痪了,高可用不是炫技,是实实在在的业务需求。

SQL Server高可用那些事儿,先聊聊基础别急着深入

常见的“地基”打法有哪些?(不深入技术细节)

SQL Server提供了几种实现高可用性的基础技术,我们可以把它们想象成不同级别的“备用方案”。

  1. 数据库备份与还原

    • 这是最基础、最根本的! 就像给重要的文件在U盘上做个拷贝,如果电脑坏了,你至少还能用U盘里的备份恢复过来。
    • 它主要用来应对一些“大灾难”,比如硬盘彻底损坏、数据被误删了,它的恢复过程通常比较慢(RTO较长),需要停下来恢复数据,所以不适合解决“秒级”恢复的问题,但它是所有其他高可用方案的底线和最后保障,任何时候都不能忽视备份。
  2. 日志传送

    SQL Server高可用那些事儿,先聊聊基础别急着深入

    • 这可以看作是备份还原的“自动化加强版”,你可以设置一个主数据库,然后定时(比如每15分钟)自动把产生的日志备份文件,拷贝到另一台服务器的备用数据库上,并恢复进去。
    • 好处是备用数据库的数据只比主数据库落后一小段时间(比如15分钟),当主数据库出问题时,你可以手动将这个备用数据库恢复上线,顶替主数据库的工作,它比单纯备份还原要快一些,但仍然是手动切换,有一定延迟。
  3. 复制

    • 这个思路不太一样,它更像是一种“数据分发”,它可以把主数据库(发布服务器)上指定的表或数据,同步到一台或多台备用数据库(订阅服务器)上。
    • 它通常用于不同的目的,比如做报表查询(让报表查询在备用库上跑,减轻主库压力),或者跨地域的数据同步,虽然它也能提供一份数据副本,但它的同步机制和目的与纯粹的高可用方案侧重点不同,配置和管理也相对复杂一些。
  4. 数据库镜像

    • 这是SQL Server历史上一个非常重要的高可用功能,但现在微软已经明确表示不再推荐使用,逐渐被“Always On可用性组”取代,不过了解它有助于理解演进。
    • 你可以把它想象成“实时影子”,它需要两台服务器,一台主库,一台镜像库,主库上任何数据变化,都会几乎实时地同步到镜像库,它有两种模式:一种是高性能模式,数据可能有一点点极小的丢失风险;另一种是高安全模式,保证数据零丢失,但性能开销大一点,出问题时,可以快速切换到镜像库,这个功能被更先进的Always On技术吸收和超越了。
  5. Always On 可用性组(这是现在的重头戏)

    • 这是目前SQL Server最主流、功能最强大的高可用和灾难恢复解决方案,你可以把它理解为“数据库镜像”的超级升级版。
    • 它厉害在哪呢?一个“可用性组”可以包含多个数据库(镜像只能一个一个来),它可以配置多个备用副本(比如一个同步副本在本地机房用于快速故障转移,一个异步副本在异地机房用于防灾),最重要的是,这些备用副本可以被用来做只读查询和备份操作,大大提高了硬件资源的利用率,不再是白白闲置的“冷备胎”了。
    • 它通常需要依赖一个叫“Windows Server故障转移集群”的底层技术来提供服务器级别的监控和自动故障转移能力,实现自动化“秒切”。

总结一下基础观念

在急着去配置那些复杂的技术之前,一定要先想清楚几个基础问题:

  • 你的业务能容忍多久的停机?(决定了你的RTO,也决定了你需要选择哪种级别的方案)
  • 你的业务能容忍丢失多少数据?(比如是要求一秒不丢,还是允许丢几分钟的数据?)
  • 你愿意为高可用花多少钱?(越高级的方案,需要越多的服务器、软件许可和更复杂的网络,成本越高)

从简单的备份还原,到日志传送,再到强大的Always On可用性组,本质上都是在用“冗余”(准备备用的东西)来换取“可用性”,选择哪个方案,不是看哪个技术最牛,而是看哪个最符合你业务的实际需求和成本预算,先把这些基础概念弄明白了,再去看具体的配置步骤,才会觉得心中有数,而不是被一堆术语牵着鼻子走。