通俗易懂浅谈一下服务器异地容灾备份

article/2025/8/23 5:10:34

最近关于服务器异地容灾备份等话题热度逐渐上升,服务端的网络、机房硬件等一旦出现故障,将有可能导致大规模的服务瘫痪,商城订单下降等,进而对公司造成经济损失。

服务端灾备不仅是运维人员的工作,前后端开发人员也有必要了解一些基本知识,在灾难发生的时候,才能较好的配合工作,快速恢复服务。下面的内容转自腾讯云,比较通俗易懂,记录一下学习笔记。整体而言,灾备的核心有两方面:流量切换,数据安全。

服务器灾备解决方案–两地三中心(图文详解)[通俗易懂]

说明

灾备: 是指容灾和备份。容灾是为了在遭遇灾害时能保证信息系统能正常运行,帮助企业实现业务7*24小时连续性的目标,备份是为了应对灾难来临时造成的数据丢失问题。容灾备份产品的最终目标是帮助企业应对人为误操作、软件错误、病毒入侵等“软”性灾害以及硬件故障、自然灾害等“硬”性灾害。

两地三中心:

  • 两地是指同城、异地
  • 三中心是指生产中心、同城容灾中心、异地容灾中心。

备端在线两地三中心灾备方案网络设计如下:

在这里插入图片描述

容灾系统 衡量指标

衡量容灾系统的主要指标有

  • RPO(Recovery Point Object) :灾难发生时允许丢失的数据量
  • RTO(Recovery Time Objective) : 系统恢复的时间
  • 容灾半径: 生产系统和容灾系统之间的距离
  • ROI(Return of Investment): 容灾系统的投入产出比

RPO 是指业务系统所允许的灾难过程中的最大数据丢失量(以时间来度量),这是一个灾备系统所选用的数据复制技术有密切关系的指标,用以衡量灾备方案的数据冗余备份能力。

RTO 是指“将信息系统从灾难造成的故障或瘫痪状态恢复到可正常运行状态,并将其支持的业务功能从灾难造成的不正常状态恢复到可接受状态”所需时间,其中包括备份数据恢复到可用状态所需时间、应用系统切换时间、以及备用网络切换时间等,该指标用以衡量容灾方案的业务恢复能力。例如,灾难发生后半天内便需要恢复,则 RTO 值就是十二小时。

容灾半径是指生产中心和灾备中心之间的直线距离,用以衡量容灾方案所能防御的灾难影响范围。

容灾方案的 ROI 也是用户需要重点关注的,它用以衡量用户投入到容灾系统的资金与从中所获得的收益的比率。

显然,具有零 RTO 、零 RPO 和大容灾半径的灾难恢复方案是用户最期望的,但受系统性能要求、适用技术及成本等方面的约束,这种方案实际上是不大可行的。所以,用户在选择容灾方案时应该综合考虑灾难的发生概率、灾难对数据的破坏力、数据所支撑业务的重要性、适用的技术措施及自身所能承受的成本等多种因素,理性地作出选择。

做灾备你面临最大的挑战是什么?

  • Scalability(可扩展性)
  • Availability(可用性)
  • Performance(性能)
  • Flexibility(灵活性)

容灾级别

按照容灾系统对应用系统的保护程度可以分为数据级容灾 、 应用级容灾 和 业务级容灾。

数据级容灾 仅将生产中心的数据复制到容灾中心,在生产中心出现故障时,仅能实现 存储 系统的接管或是数据的恢复 。容灾 中心的数据可以是本地生产数据的完全复制( 一般 在同城实现) , 也可以比生产数据略微落后,但必定是可用的 (一般 在异地实现) , 而差异的数据 通常 可以通过一些工具( 如 操作记录、日志等) 可以 手工补回。基于数据容灾 实现 业务恢复的速度 较慢 ,通常情况下 RTO 超过 24 小时, 但是这种 级别 的容灾系统运行维护成本较低。

应用级容灾 是在数据级容灾的基础上,进一步实现应用 可用性 ,确保业务的快速恢复。这就 要求 容灾系统 的 应用不能改变原有业务处理逻辑,是对生产中心系统的基本复制 。因此 ,容灾中心需要建立起一套和本地生产相当的备份环境,包括主机、网络、应用、 IP 等 资源均有配套,当 生产 系统发生灾难时,异地系统可以 提供 完全可用的生产环境。 应用级 容灾的 RTO 通常 在 12 个 小时 以内 ,技术复杂度较高,运行维护的成本也比较高。

业务级容灾 是生产中心 与容灾中心对业务请求同时进行 处理 的容灾方式,能够确保 业务 持续可用。这种 方式 业务 恢复 过程的自动化程度高, RTO 可以 做到 30 分钟 以内 。 但是 这种容灾级别 的 项目 实施难度大, 需要从 应用层对系统进行改造,比较适合流程固定 的 简单业务系统 。 这种 容灾系统 的运行维护成本最高。

同城容灾

同城容灾 是在同城或相近区域内 ( ≤ 200KM )建立两个数据中心 : 日常情况下可同时分担业务及管理系统的运行,并可切换运行;灾难情况下可在基本不丢失数据的情况下进行灾备应急切换,保持业务连续运行。

与异地灾备模式相比较,本地双中心具有投资成本低、建设速度快、运维管理相对简单、可靠性更高等优点;异地灾备中心是指在异地建立一个备份的灾备中心,用于双中心的数据备份,当双中心出现自然灾害等原因而发生故障时,异地灾备中心可以用备份数据进行业务的恢复。

异地容灾

异地容灾 主备中心之间的距离较远 (> 200KM ) , 因此一般采用异步镜像,会有少量的数据丢失。异地灾难备份不仅可以防范火灾、建筑物破坏等可能遇到的风险隐患,还能够防范战争、地震、水灾等风险。由于同城灾难备份和异地灾难备份各有所长,为达到最理想的防灾效果,数据中心应考虑采用同城和异地各建立一个灾难备份中心的方式解决。

备端在线容灾系统设计

1)当生产服务器处于正常工作状态时,把生产服务器的监控代理软件连接至服务器。当监控代理检测到主存储数据变化后,将捕获变化的数据实时的复制到备用存储上,实现了实时的复制。具体部署如下图:
在这里插入图片描述

2)当生产服务器故障,或者存储故障导致生产系统无法正常提供业务支持时,本地容灾服务器可直接接替生产服务器工作保障业务系统的持续运行;当本地机房发生灾难时,异地机房的容灾服务器可直接接替生产服务器工作保障业务系统的持续运行。具体部署如下图:

在这里插入图片描述

3)当生产系统恢复工作后,代理软件会继续其生产服务器的复制工作,并且在这之前会通过回切工具保障主备系统数据一致,具体部署如下图:

在这里插入图片描述

异地容错的容灾系统设计

如果本地机房发生故障,将异地容灾服务器中备份的数据进行手动恢复,可以直接恢复到原生产服务器(也可恢复到新服务器)。备份存储系统保存了应用系统任意时刻的数据,恢复时可恢复到任意时间点,实现容错,具体部署如下图:

在这里插入图片描述

具体实施面临的问题

  1. 分类
    根据是否需要数据同步大体分为三类:
  • 1、必须同步型。(比如数据库)
  • 2、无须同步型。比如缓存,仅仅是当做缓存,就可以这样做(这个有待商榷,其实缓存也需要同步的,严格来说的话)。
  • 3、只能单活(对全局原子要求较高),不接受有一定时延的“不一致”窗口。
  1. 核心问题
  • 数据同步、网络时延。
  1. 切换方式
  • 1、自动切换。自动切换表现为当灾难来临时,程序内部可以自动识别出问题然后切换至可用机房。
  • 2、手动切换。通过简单的配置,在几分钟或者一两小时内切换到另外的机房。
  1. 异地多活面临的挑战
  • 1、切换问题。切换问题不仅仅是灾难发生自动切换到好的机房,还有另外一个问题,就是灾难机房恢复能力后,如何再切换回去,切换回去的数据同步问题又是需要解决的。

  • 2、跨机房流量问题。
    跨机房的流量是花钱的。所以不是无限大的。控制跨机房消息体大小,越小越好。然而,很多时候要想保证数据同步是一件很耗费流量的事情。但跨机房流量真的是一座山。
    既然跨机房流量有限制,而且不稳定。所以有一种解决方案就是不跨机房。既然不跨机房就要做用户分区,确保每个用户只能访问自己所在的区,这样至少能保证该用户自己的数据的完整。

  • 3、所有的业务都适合做异地双活吗?异地多活效果看起来很诱人,但如果不假思索贪大求全的要求所有业务都实现异地多活的话,就会把自己带到坑里去。

  • 第一个原因是异地多活是有成本的,包括开发成本和维护成本。需要实现异地多活的业务越多,方案越复杂,投入的设计开发时间越多;同时维护成本也会越高,需要更多的机器,需要更多的带宽。

  • 第二个原因是有的业务理论上就无法实现异地多活。典型的有“余额”和“库存”这两个业务。

  • 以余额为例,假设我们实现了余额的异地多活业务,用户小明有10000块钱,在A机房给女友转账了5000块,还剩余5000块;如果此时A机房异常且数据还没同步到B机房,小明登录到B机房发现自己又有10000块了,小明感觉中彩票了,赶紧又转了10000块给女友,最后出现了小明只有10000块却转账了15000块的问题,对于和资金相关的业务,这样的问题是绝对无法容忍的,哪怕一个用户有问题都不行。

  • 所以,异地多活也不能保证所有业务都异地多活,在设计异地多活方案的时候,需要从业务和用户的角度出发,识别出核心和关键业务,明确哪些业务是必须实现异地多活,哪些是可以不实现异地多活,哪些是不能实现异地多活的。比如“登录”必须实现异地多活、“注册”和“修改用户信息”不一定要实现异地多活。

  • 4、冷备还是热备。冷备了以后,一直冷备,当真正出现问题,你还有勇气去切换到那个一直冷的机房吗?恐怕需要点勇气。

  • 5、数据一致性问题。解决方案:
    (1)守护进程同步。
    (2)客户端双写。
    (3)不去解决。不需要解决的前提是用户分区。分区后,从本质上说,其实是没有做到双活的。只是看起来一个业务确实被分到了多个机房而已。

  • 6、读取问题。这个相对来说要好解决一些,就是就近读取。 业务以及基础组件异地双活方案

数据库的异地双活

Zookeeper异地双活

先来点背景知识:
1、zookeeper中的server机器之间会组成leader/follower集群,1:n的关系。采用了paxos一致性算法保证了数据的一致性,就是leader/follower会采用通讯的方式进行投票来实现paxos。

2、zookeeper还支持一种observer模式,提供只读服务不参与投票,提升系统。

异地多活决定了我们需要进行跨机房操作,比如杭州,美国,中国

港,青岛等多个机房之间进行数据交互。

跨机房之间对应的网络延迟都比较大,比如中美机房走海底光缆有ping操作200ms的延迟,杭州和青岛机房有70ms的延迟。

为了提升系统的网络性能,在部署zookeeper网络时会在每个机房部署节点,多个机房之间再组成一个大的网络保证数据一致性。(zookeeper千万别再搞多个集群)。
说明:
a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node)

b. node节点可以有failover/loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)

在这里插入图片描述

业务实例异地双活

业务实例的异地双活。这个相对来说要简单一些,只要做到无状态,再如果通过Docker这些容器结束,基本上是相对来说容易一些。

消息队列的异地双活

rabbitmq 每个机房部署一套server,然后每个机房的业务使用各自机房的mq。通过haproxy自动映射到本机房的broker。topic同步,通过REST API读取到

配置文件,然后同步到另外一个机房的rabbitmq下。

具体REST API:

http://17X.XXX.X.XXX:15672/api/definitions

以上只是同步了rabbitmq的元数据,而且是全量同步。

消息同步问题:如果不同步会导致消息丢失。所以mq消息其实也是需要同步的。

同步可以通过客户端双写,或者服务端复制。双写更加容易。

Redis的异地双活

Redis 的异地双活。就是分别在每个机房搭建一套Redis集群。 然后每个机房的业务都去访问各自机房的Redis集群。

但这样只是能保证基本的缓存能力。如果业务中涉及到一些全局的原子操作,那么这样的做法显然不能满足需求。

原因很简单,比如你使用redis incr自增命令:

a 机房 加1 后变为了1,b机房的业务也加1, 本来应该是2。结果由于各自都是访问了自己的redis,所以全局计数显然是有问题的。

怎么解决呢?就需要涉及到全局操作的业务,去单独的连接 一个全局的唯一的那个 redis集群,这个redis集群专门用于 业务的全局操作。

但这样的后果,就是会涉及到跨机房流量问题,因为这个全局的redis集群无论放在哪个机房,另外一个机房的业务要想访问都得跨机房。

在这里插入图片描述

大数据的问题

数据量最大的当属交易数据,有些金融产品双向交易,交易时间长,所以交易数据的累积相当可观。当交易数据积累到一定数量级,我们就可以从多角度数据挖掘,为决策提供数据支持。

第一个阶分区表
第一个阶段数据分区存储,实施规划是五年之内。五年之内你可以使用分区这种技术存储数据。分许能够保持索引的连续,方便复杂的数据库查询。

第二个阶分库分表
当数据庞大到无论怎么优化都无法提高查询性能是,这时你就要考虑数据库拆分了。

数据库拆分需要遵循几个原则,不仅仅是按照年份或月份分库分表。

数据库拆分

  • 基于用户拆分,要能保证查询某个用户的数据不需要跨库,也不需要联合多表查询,这样会降低查询效率。
  • 基于业务拆分,某些业务所用到的表,集中放在一台服务器上,保证数据查询不需要跨库,或者联合多表查询。
    图. 传统的分表方案

在这里插入图片描述

传统方法,将数据日期切分,这回带来索引的不连续问题,且查询时必须加带日期,以便定位到指定的表中。如果需要做数据挖掘,需要统计四年的数据,必须查询四次,效率大打折扣。
图. 基于用户分表方案

在这里插入图片描述

新的拆分方案,通过哈西算法均匀的将用户分配到指定数据库中或表中。这样所有针对该用户的操作都能在同一个数据库中完成。

图. 基于功能分表方案

在这里插入图片描述

根据不同的功能拆分数据库或表,也是一种非常不错选择。

总结

灾备方案都是有成本和风险的,灾备也没有银弹,不可能打死所有的怪兽。还是随着业务发展,不断的演化才是王道。

参考

https://blog.51cto.com/zhaoshilei/1888923

http://blog.itpub.net/26736162/viewspace-2216584/

https://cloud.tencent.com/developer/article/1082855

https://baike.baidu.com/item/%E5%AE%B9%E7%81%BE%E5%A4%87%E4%BB%BD

https://www.netkiller.cn/journal/trader.html

转自:https://cloud.tencent.com/developer/article/2097034


http://chatgpt.dhexx.cn/article/6ViWspST.shtml

相关文章

容灾数据复制技术的比较

容灾数据复制技术的比较 一、概述 近几年来,容灾已经成为信息数据中心建设的热门课题。很多容灾技术也快速发展起来,对用户来说也有很广阔的选择余地。但由于容灾方案的技术复杂性和多样性,一般用户很难搞清其中的优劣以确定如何选择最适合自…

云计算技术 — 容灾备份技术

目录 文章目录 目录本地多活同城双活多 Region多云异地双活两地三中心异地多活本地多活 同城双活 多 Region AWS Region 是由多个可用区(availability zone,AZ)组成的,每个 AZ 是一个或多个的数据中心,它们具有独立的电源、网络和连接。在一个 Region 的多个 AZ 中运行能…

容灾与备份究竟有什么区别?

更多专业文档请访问 www.itilzj.com 1.容灾备份的区别 容灾 (Disaster Tolerance):就是在上述的灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。 容错 (Fault Tolera…

云数据中心容灾备份方案

云计算中心涵盖系统多、类型复杂、关键性程度不一,因此对于恢复目标也有不同的要求,针对不同恢复目标的业务采取不同的灾备技术,同时考虑到数据中心重要性,需要建立同城灾备数据中心,并规划异地灾备中心,实现两地三中心。 一、数据中心业务分析 业务恢复目标 XX云中心…

数据备份与数据容灾全解析(图)

【IT168 专稿】 许多读者对经常听到的数据容灾这种说法不理解,把数据容灾与数据备份等同起来,其实这是错误的。为此,笔者在本文中要向大家解释数据容灾与数据备份的区别,同时还将介绍几种典型的数据容灾等级和关键技术。首先来看…

数据保护与容灾备份

在云与大数据时代,海量增长的数据容量,给数据的存储和保护带来新的挑战,从传统熟悉的IT架构到以云架构、虚拟化、超融合为代表的技术升级迭代,使得数据保护的技术手段也要加速。 数据保护的重要性 数据是企业重要的生产资料&…

云数据中心备份容灾设计方案

导读:云计算中心 涵盖系统多、类型复杂、关键性程度不一,因此对于恢复目标也有不同的要求,针对不同恢复目标的业务采取不同的灾备技术,同时考虑到数据中心重要性,需要建立同城灾备数据中心,并规划异地灾备中…

云呐数据库的容灾备份,数据容灾包括数据的备份和恢复吗

备份也是容灾的一种方式,应用级的备份是最传统的,在应用层进行复制,一般成本低廉。而这些中小型企业的备份容灾都十分初级,粗糙且不容乐观。这是因为备份容灾的市场,还普遍集中在如金融行业这样的大型企业上。头部厂商…

国内外主流容灾备份厂商介绍

国内外主流容灾备份厂商介绍 国内外主流的容灾备份厂商都有哪些?下面就来带大家了解一下! 1、赛门铁克 国外厂商,他们最早的产品是Ghost,这是一款非常强大的产品,相信很多人都有用过。后来赛门铁克收购了Veritas&…

“容灾”和“备份”的区别?原来如此!

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 后台回复“k8s”,可领取k8s资料 数据中心运行突发故障(如:天灾不可避免的灾难)是无法预测的,计算机里的数据就像扫雷游戏一样,十面…

备份容灾技术基础

备份概念及结构 备份的基本概念: 备份:指将文件系统或数据库系统中的数据加以复制;一旦发生灾难或错误操作时,得以方便而及时地恢复系统的有效数据和正常运作。 备份系统的组成: 备份服务器备份软件存储设备 备份…

【MySQL】数据库备份与容灾详解(实战篇)(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

数据中心“容灾”和“备份”的区别

戳蓝字“CSDN云计算”关注我们哦! 数据中心运行突发故障(如:天灾不可避免的灾难)是无法预测的,计算机里的数据就像扫雷游戏一样,十面埋伏充满雷区,随时都有可能Game Over,容灾备份就是数据安全的最后防线&a…

云呐|什么是容灾备份

什么是容灾备份?帮助企业应对人为误操作、软件错误、病毒入侵等“软”性 灾害以及硬件故障、自然灾害等“硬”性灾害。主要也做容灾备份一体机。  一般而言,设计企业基础设施架构主要包括计算资源架构、网络架构、安全架构、灾备架构四个模块。 …

容灾和备份的区别

本文来说下“容灾”和“备份”的区别 文章目录 概述什么是容灾容灾的分类容灾和备份有什么联系容灾和备份的区别容灾的分类数据级应用级业务级 备份等级本文小结 概述 数据中心运行突发故障(如:天灾不可避免的灾难)是无法预测的,计算机里的数据就像扫雷…

容灾备份——备份技术

目录 基本概念: 备份与容灾的区别: 备份和归档的区别: 备份系统架构: 备份系统的三要素: 备份方案网络: LAN-Base: LAN-Free: Server-Free: Server-Less: 备份…

filter函数的妙用

filter函数的妙用 数组的 filter 函数有一个很重要的用处,可以过滤 null、undefined、 代码 var arr [1, , null, undefined, ] console.log(arr.filter(v > v))

filter函数 与filtfilt函数的效果区别

filter函数 与filtfilt函数的效果区别 filter滤波器称为一维数字滤波器。filtfilt滤波器称为零相位数字滤波。其滤波算法是基于filter而来的。只是filtfilt实现了零相位。其基本实现过程为先让信号用filter滤波,再将信号时域反转再次通过filter滤波,这样…

python filter函数

filter函数就是滤波函数的意思,可以参考信号处理的滤波定义理解。 直接上代码吧: 代码1:利用filter函数过滤掉奇数或者偶数 c[1, 4, 6, 7, 9, 12, 17] def is_odd(x):return x % 2 1 def is_even(y):return y%20 alist(filter(is_odd, c)…

MATLAB之Filter函数的C语言程序实现

MATLAB之Filter函数的C语言实现 前言一、MATLAB的Filter函数二、C语言实现Filter函数1.代码2.计算结果 总结 前言 MATLAB里面有很多现场的滤波器函数,我们在做数据分析的时候,可以直接调用,十分方便,但是有时候我们也需要在嵌入式…