分布式系统容灾部署方案
本文主要以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函数用于将字符串转换成格式化数据。 接下来是第一个大问题:我怎么记忆呢&…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
