分布式系统容灾部署方案
本文主要以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函数用于将字符串转换成格式化数据。 接下来是第一个大问题:我怎么记忆呢&…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
