分布式系统容灾部署方案
本文主要以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函数用于将字符串转换成格式化数据。 接下来是第一个大问题:我怎么记忆呢&…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
