分布式系统容灾部署方案
本文主要以OceanBase部署来说明分布式系统容灾部署方案
分布式系统提供持续可用的服务尤为重要。
好的分布式系统根据需求提供不同等级的的高可用与容灾级别。
而在分布式系统中,数据库系统又是最核心最关键的系统。
我们以数据库分布式系统为主,考虑其容灾部署方案。
数据库分布式系统容灾部署方案,首先需要满足足业务服务延时的需求,然后需要满足我们约定的容灾原则,再有就是灾部署需要较多物理资源,需要尽可能通过技术降低使用成本。
根据经验,容灾需要遵守以下原则:
-
RPO等于0,可以保证数据不丢
-
RTO为秒级,在发生故障后,恢复服务时间尽可能短
-
分布式系统通过多副本提供高可用
-
通过多数派一致性协议保证多副本数据一致性
根据以上容灾部署原则,我们讨论几种的容灾部署方案:
-
同机房三副本
-
同城三机房三副本
-
两地三中心三副本
-
两地三中心五副本
-
三地三中心五副本
-
三地五中心五副本
容灾部署中基本概念:
-
地域:指数据中心所在的地理区域,通常按照数据中心所在的城市划分。例如,华北1(青岛)地域表示数据中心所在的城市是青岛。
-
容灾部署方案中,机房与中心均指数据中心(IDC)。
-
容灾部署方案中,Zone为一个逻辑概念,表示集群内逻辑划分的一组节点。如属于一个机架的一组节点,属于一个数据中心的一组节点。
考虑网络延时,以下为一组IDC间的网络延时:
-
同城延时2ms
-
相邻异地延时8ms
-
远程异地延时30ms
可以看到相邻异地延时与远程异地延时都非常高,一个事务包含6~15条SQL语句,累计耗时非常高,所以一定要提前考虑好业务对服务延时的需求与业务SQL优化等问题。
同时为了降低成本,可以考虑
-
部署日志副本替代全功能副本
-
部署仲裁服务替代全功能副本
方案对比
| 容灾方案 | 网络延时 | 容灾级别 | RPO | RTO | 部署成本 |
| 同机房三副本 | 1ms | 机器/机架 | 0 | 8s 内 | 1个IDC,6个节点 |
| 同城三机房三副本 | 2ms | 机房 | 0 | 8s 内 | 3个IDC,6个节点 |
| 两地三中心三副本 | 2ms | 机房 | 0 | 8s 内 | 2个城市,3个IDC,6个节点 |
| 两地三中心五副本 | 2ms | 机房 | 0 | 8s 内 | 2个城市,3个IDC,10个节点 |
| 三地三中心五副本 | 8ms | 地域 | 0 | 8s 内 | 3个城市,3个IDC,10个节点 |
| 三地五中心五副本 | 8ms | 地域 | 0 | 8s 内 | 3个城市,5个IDC,10个节点 |
同机房三副本
这一方案可用于非生产环境,同时可以支持机架容灾级别。

-
1个机房,3个Zone,3个副本
-
业务容忍同机房数据同步延时
-
部署
-
1个数据中心(机房)
-
3个Zone
-
2 * 3 = 6个节点
-
1个机房,按照机架部署3个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时不变
-
单Zone故障,不丢数据,服务可用,服务延时不变
-
-
成本优化
同城三机房三副本
这一方案支持机房级容灾。

-
1个城市,3个机房,3个Zone,3个副本
-
业务容忍同城数据同步延时
-
部署
-
3个数据中心(机房)
-
3个Zone
-
2 * 3 = 6个节点
-
同城3个机房,每个机房部署3个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时不变
-
单Zone故障,不丢数据,服务可用,服务延时不变
-
单机房故障,不丢数据,服务可用,服务延时不变
-
-
成本优化
-
为了降低成本,第三机房部署仲裁服务(无需同步日志)。
-
两地三中心三副本
两地三中心是一类实现高可用和异地容灾的部署模式,这种模式也是监管机构对金融行业数据中心的基本要求。
相比传统金融业的两地三中心(一主一备,一冷备),提供RPO=0,RTO在8秒内。传统部署很难做到RPO=0,也很难在秒级内恢复服务。

-
2个城市,3个机房,3个Zone,3个副本
-
业务容忍同城数据同步延时
-
部署
-
3个数据中心(机房)
-
3个Zone
-
2 * 3 = 6个节点
-
主城市2个机房,备城市1个机房,每个机房部署一个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时变大
-
主城市单机房故障,不丢数据,服务可用,服务延时变大
-
-
成本优化
两地三中心五副本
这一方案是两地三中心三副本部署方案的进化,用于解决两地三中心三副本部署方案在多副本所在城市发生机房故障时引入的事务提交跨城市问题 。
这一方案可以在备城市建立备用集群,做到有损地域容灾。

-
2个城市,3个机房,5个Zone,5个副本
-
业务容忍同城数据同步延时
-
部署
-
3个数据中心(机房)
-
5个Zone
-
2 * 5 = 10个节点
-
主城市2个机房,分别部署两个Zone,备城市部署一个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时不变
-
单Zone故障,不丢数据,服务可用,服务延时不变
-
两Zone故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变
-
单机房故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变
-
单地域故障,主地域故障,会丢数据,服务不可用;备地域故障,不丢数据,服务可用,服务延时不变
-
备用城市建设一个独立的 3 副本集群,做为一个备库,从主库 "异步同步" 到备库。一旦主城市遭遇灾难,备城市可以接管业务。(有损地域容灾)
-
-
成本优化
-
为了降低成本,可以分别将 IDC1 和 IDC2 的各 1 个副本部署为日志副本。日志副本不提供服务,仅仅接受日志用于故障恢复,从而只需要存储并服务 3 份数据。
-
为降低成本,Region2可以只部署仲裁服务(无需同步日志)。
-
三地三中心五副本
两地三中心部署方案的问题在于不支持异地容灾。为了支持地域级无损容灾,至少需要 3 个地域.

-
3个城市,3个机房,5个Zone,5个副本
-
业务容忍异地数据同步延时
-
部署
-
3个数据中心(机房)
-
5个Zone
-
2 * 5 = 10个节点
-
每个城市一个机房,相邻两个城市的机房分别署两个Zone,剩下一个城市的机房部署一个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时不变
-
单Zone故障,不丢数据,服务可用,服务延时不变
-
两Zone故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变
-
单机房故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变,此时跨地域容灾RPO不为0
-
单地域故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变,此时跨地域容灾RPO不为0
-
-
成本优化
-
为降低成本,Region3 可以只部署日志型副本(只有日志)。
-
三地五中心五副本
与三地三中心五副本相比,该部署方案进一步强化机房容灾能力。单机房故障不影响服务。

-
3个城市,5个机房,5个Zone,5个副本
-
业务容忍异地数据同步延时
-
部署
-
5个数据中心(机房)
-
2 * 5 = 10个节点
-
两个相邻城市,每个城市部署两个机房,剩下一个城市部署一个机房,每个机房部署一个Zone
-
-
容灾
-
单节点故障,不丢数据,服务可用,服务延时不变
-
单机房故障,不丢数据,服务可用,服务延时不变
-
两机房故障,不丢数据,服务可用,服务延时变大。集群降级为3副本,服务延时不变
-
单地域故障,不丢数据,服务可用,服务延时变大,集群降级为3副本,服务延时不变,此时跨地域容灾RPO不为0
-
-
成本优化
-
为降低成本,Region3 可以只部署日志型副本(只有日志)。
-
为降低成本,Region3 部署仲裁服务以降低成本(无需同步日志)。
-
总结
分布式系统容灾部署需要考虑众多因素
-
服务响应延迟要求
-
服务容灾级别、RPO、RTO
-
服务部署成本
权衡以上因素,选择合适的容灾部署方案。
考虑大部分应用需要做到机房级(IDC)容灾,同时要求服务响应较快,可以使用 两地三中心五副本 容灾部署方案。如果资源有限,应用可以容忍故障期间延时变大,可以采用 两地三中心三副本 容灾部署。
参考
-
ECS的服务地域
-
OceanBase 集群高可用方案简介
-
OceanBase 容灾部署方案
相关文章:
分布式系统容灾部署方案
本文主要以OceanBase部署来说明分布式系统容灾部署方案 分布式系统提供持续可用的服务尤为重要。 好的分布式系统根据需求提供不同等级的的高可用与容灾级别。 而在分布式系统中,数据库系统又是最核心最关键的系统。 我们以数据库分布式系统为主,考虑…...
Python 爬虫性能相关总结
这里我们通过请求网页例子来一步步理解爬虫性能 当我们有一个列表存放了一些url需要我们获取相关数据,我们首先想到的是循环 简单的循环串行 这一种方法相对来说是最慢的,因为一个一个循环,耗时是最长的,是所有的时间总和 代码…...
Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)
Baumer工业相机堡盟工业相机如何设置网口的IP地址(工业相机连接的网口设置IP地址步骤)Baumer工业相机Baumer工业相机设置网络端口IP地址匹配设置网络端口IP地址和工业相机IP地址匹配第一次打开CameraExplorer软件确认问题为IP地址不匹配问题打开网络连接…...
Android MediaCodec设置H264 Profile到High
H264 High Profile压缩率高,能降低码率,这里记录下MediaCodec Profile设置到High遇到的一些问题。 Android 4.1 就引入了MediaCodecInfo.CodecProfileLevel类,下面截取H264(AVC)的Profile和Level定义: /** Copyright (C) 2012 The Android O…...
QT之QSysInfo(查看电脑信息)
文章目录前言一、API使用总结前言 QSysInfo是Qt中用于获取有关运行应用程序的系统信息的类。 我们可以获取以下信息: 返回系统产品类型,如ios,windows,Linux等 返回当前系统的产品版本。 返回当前系统的内核类型。 返回当前系统的…...
中国塑料编织袋产业竞争状况及投资前景预测报告2023-2029年
中国塑料编织袋产业竞争状况及投资前景预测报告2023-2029年 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK 《报告编号》: BG451639 《出版时间》: 2023年4月 《出版机构》: 中智正业研究院 免费售后 服务一年,具体内容及订购流程欢迎咨询客服人员 内容简介&…...
从头用脚分析FFmpeg源码 - av_read_frame
av_read_frame作用 /*** Return the next frame of a stream.* This function returns what is stored in the file, and does not validate* that what is there are valid frames for the decoder. It will split what is* stored in the file into frames and return one f…...
第17章_触发器
第17章_触发器 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…...
3956. 截断数组
3956. 截断数组 - AcWing题库 3956. 截断数组 【题目描述】 给定一个长度为 nn 的数组 a1,a2,…,ana1,a2,…,an。 现在,要将该数组从中间截断,得到三个非空子数组。 要求,三个子数组内各元素之和都相等。 请问,共有多少种不同…...
React Labs: 我们最近在做什么——2023 年 3 月
原文:https://react.dev/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023 React Server Components React Server Components(下文简称 RSC) 是由 React 团队设计的新应用程序架构。 我们首先在一个介绍性演讲和一个RFC中分享了我们对 RSC 的…...
文件系统设计详解
抽象的文件系统以目录的形式来组织文件,我们可以利用该文件系统来读取某个文件的内容,也可以对目录或者文件实施监控并及时获取变化的通知。 IChangeToken IChangeToken对象就是一个与某组监控数据相关联的“令牌”(Token)&#x…...
好看~立马启动python实现美女通通下
人生苦短,我用python一、环境版本使用二、代码实现思路三、代码展示:导入模块伪装(请求头)四、部分好看截图,更多的就自己去采集噜~吃饭放松的时候哇一不小心看见了很多好看的东西 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 独乐乐不如众乐乐…...
Git 安装设置
1、安装 安装以下三个软件: Git-2.13.3-64-bit.exe TortoiseGit-2.4.0.2-64bit.msi TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi 安装过程中不用填写、不用选择,全部点"下一步",完成后需要重启机器。 2、基本设…...
Python-闭包
介绍 Python的闭包是一种高级的编程技巧,它可以在函数内部定义另一个函数,并返回该函数的引用。这个内部函数可以访问外部函数的变量和参数,即使外部函数已经执行完毕 好处 1)闭包可以避免全局变量的污染,使得代码更…...
Gitlab中Pipeline语法四
Gitlab中Pipeline语法 cache cache:paths 在job build中定义缓存,将会缓存target目录下的所有*.jar文件当全局定义了cache:paths会被job中覆盖.以下实例将缓存target目录 buld:script: buildcache:paths:- target/*.jar#设置key可以解决cache被覆盖 cache:paths:- my/files…...
Go语言精修(尚硅谷笔记)第五章
五、程序流程控制 5.1 单分支控制 package main import ("fmt" )func main() {//请大家看个案例[ifDemo.go]://编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大//于18,要对自己的行为负责!"//分析 //1.年龄 > var age int…...
三、MySQL 高级(DML 增删改)
三、MySQL 高级(DML 增删改) 3.1 DML 数据操纵语言 DML(Data Manipulation Language)DML对数据库中表记录的执行操作 插入(INSERT) 插入单行数据 插入多行数据 将查询结果插入到新表 更新(…...
面向AI编程的本质是什么?
面向AI编程的本质是什么? 面向AI编程的本质是编程的第五代编程语言,与自然语言非常相似,但是是有区别的。 因此出现了针对与AI通话的提示工程。 简单地回顾一下编程语言的发展史, 第一代编程语言是机器语言,它直接使…...
深入浅出——深度学习训练中的warmup
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
你知道如何用C语言将格式化数据和字符串相互转换吗?
今天重点介绍2个函数,分别是sprintf和sscanf,用来将格式化数据和字符串相互转换。它们的作用分别是: sprintf函数用于将格式化数据转换成字符串。sscanf函数用于将字符串转换成格式化数据。 接下来是第一个大问题:我怎么记忆呢&…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
