MongoDB高级集群架构设计

news2024/11/17 15:36:51

两地三中心集群架构设计

容灾级别

image.png

RPO & RTO

RPO(Recovery Point Objective):即数据恢复点目标,主要指的是业务系统所能容忍的数据丢失量。
RTO(Recovery Time Objective):即恢复时间目标,主要指的是所能容忍的业务停止服务的最长时间,也就是从灾难发生到业务系统恢复服务功能所需要的最短时间周期。
image.png

MongoDB 两地三中心方案:复制集跨中心部署

双中心双活+异地热备 = 两地三中心
image.png
image.png
image.png
image.png
MongoDB 集群两地三中心部署的考量点

  • 节点数量建议要 5 个,2+2+1 模式
  • 主数据中心的两个节点要设置高一点的优先级,减少跨中心换主节点
  • 同城双中心之间的网络要保证低延迟和频宽,满足 writeConcern: Majority 的双中心写需求
  • 使用 Retryable Writes and Retryable Reads 来保证零下线时间
  • 用户需要自行处理好业务层的双中心切换

两地三中心复制集搭建

环境准备

3 台 Linux 虚拟机,准备 MongoDB 环境,配置环境变量。
一定要版本一致(重点)

整体架构

image.png

配置域名解析

在 3 台虚拟机上分别执行以下 3 条命令,注意替换实际 IP 地址

echo "192.168.65.97 mongo1 mongo01.com mongo02.com" >> /etc/hosts
echo "192.168.65.190 mongo2 mongo03.com mongo04.com" >> /etc/hosts
echo "192.168.65.200 mongo3 mongo05.com " >> /etc/hosts

启动 5 个 MongoDB 实例

(1)在 mongo1 上执行以下命令

mkdir -p /data/member1/db /data/member1/log /data/member2/db /data/member2/log
mongod --dbpath /data/member1/db --replSet demo --bind_ip 0.0.0.0 --port 10001 --fork --logpath /data/member1/log/member1.log
mongod --dbpath /data/member2/db --replSet demo --bind_ip 0.0.0.0 --port 10002 --fork --logpath /data/member2/log/member2.log

(2)在 mongo2 上执行以下命令

mkdir -p /data/member3/db /data/member3/log /data/member4/db /data/member4/log
mongod --dbpath /data/member3/db --replSet demo --bind_ip 0.0.0.0 --port 10001 --fork --logpath /data/member3/log/member3.log
mongod --dbpath /data/member4/db --replSet demo --bind_ip 0.0.0.0 --port 10002 --fork --logpath /data/member4/log/member4.log

(3)在 mongo3 上执行以下命令

mkdir -p /data/member5/db /data/member5/log
mongod --dbpath /data/member5/db --replSet demo --bind_ip 0.0.0.0 --port 10001 --fork --logpath /data/member5/log/member5.log

初始化复制集

mongo mongo01.com:10001
# 初始化复制集
rs.initiate({
  "_id" : "demo",
  "version" : 1,
  "members" : [
    { "_id" : 0, "host" : "mongo01.com:10001" },
    { "_id" : 1, "host" : "mongo02.com:10002" },
    { "_id" : 2, "host" : "mongo03.com:10001" },
    { "_id" : 3, "host" : "mongo04.com:10002" },
    { "_id" : 4, "host" : "mongo05.com:10001" }
  ]
})
# 查看复制集状态
rs.status()

配置选举优先级

把 mongo1 上的 2 个实例的选举优先级调高为 5 和 10 (默认为 1),给主数据中心更高的优先级

mongosh mongo01.com:10001
conf = rs.conf()
conf.members[0].priority = 5
conf.members[1].priority = 10
rs.reconfig(conf)

启动持续写脚本(每2秒写一条记录)

在 mongo3 上,执行以下 mongo shell 脚本

mongosh --retryWrites
mongodb://mongo01.com:10001,mongo02.com:10002,mongo03.com:10001,mongo04.com:10002,mongo05.com:10001/test?replicaSet=demo ingest-script

# vim ingest-script
db.test.drop()
for(var i=1;i<1000;i++){
  db.test.insert({item: i});
  inserted = db.test.findOne({item: i});
  if(inserted)
  	print(" Item "+ i +" was inserted " + new Date().getTime()/1000);
  else
  	print("Unexpected "+ inserted)
  sleep(2000);
}

测试: 模拟从数据中心故障

停止 mongo2 上所有 mongodb 进程,观察 mongo3 上的写入未受中断。

测试:模拟主数据中心故障

停止 mongo1 上所有 mongodb 进程,观察 mongo3 上的写入未受中断。

总结

  • 搭建简单,使用复制集机制,无需第三方软件
  • 使用 Retryable Writes 以后,即使出现数据中心故障,对前端业务没有任何中断(Retryable Writes 在 4.2 以后就是默认设置)

全球多写集群架构设计

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

余震强度预测能力升级,Nature 刊文认证基于神经网络的模型性能优于传统模型

作者&#xff1a;李宝珠 编辑&#xff1a;李玮栋、xixi&#xff0c;三羊 地震的发生涉及诸多变量&#xff0c;「预测」存在挑战&#xff0c;但余震发生次数及强度的预测已取得重大进展。 2023 年 12 月 18 日 23 时 59 分&#xff0c;甘肃省临夏州积石山县发生 6.2 级地震&…

DQL-条件查询

1.语法 SELECT 字段列表 FROM 表名 WHERE 条件列表; 2.条件

RDD算子——Action 操作

reduce reduce 和 reduceByKey 有什么区别&#xff1a; reduce 是一个 Action 算子&#xff0c;reduceByKey 是一个转换算子 假设一个 RDD 里面有一万条数据&#xff0c;大部分 Key 是相同的&#xff0c;有十个不同的 Key。 rdd.reduceByKey 生成 10 条数据 而rdd.reduce 生成…

VScode/Xshell连接学校服务器

vscode连学校服务器 1.连接atrust VPN2.Xshell连接服务器2.1创建一个自己的用户 3.xftp传文件4.vscode连接服务器4.1下载remote-ssh4.2连接服务器4.3激活conda环境4.4运行代码 5. pytorch版本不兼容解决方案 1.连接atrust VPN 如果是使用的是校园网&#xff0c;可以不连接 2…

已删除数据恢复,4个简单有效方法分享!

“我前段时间不小心将电脑里重要的几个文件删除了&#xff0c;今天查找这些文件时才发现我的数据都没有了&#xff0c;这可怎么办呢&#xff1f;还有恢复的机会吗&#xff1f;” 很多用户在使用电脑时&#xff0c;会选择直接将重要的文件保存在电脑上&#xff0c;这就不可避免在…

Android 架构 - 模块化

参考文章 谷歌官方指南 一、概念 将大型、复杂问题拆解成一个个小的、简单问题&#xff0c;从而可以做到各个击破。模块化简单讲就是把多功能高耦合的代码逻辑拆散成多个功能单一职责明确的模块。模块指 Android 项目中的 module&#xff0c;通常会包含 Gradle 构建脚本、源代…

TS 36.213 V12.0.0-PDSCH相关过程(1)-收到PDSCH的UE过程

本文的内容主要涉及TS 36.213&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

基础数据结构第九期 堆(数组+STL)

前言 堆是一种重要的数据结构&#xff0c;因此应该熟练掌握。 一、堆的基本概念 堆的基本&#xff1a; 堆的结构实际上是一棵完全二叉树&#xff0c;堆可以分为大根堆和小根堆 大根堆&#xff1a; 小根堆&#xff1a; 堆的储存&#xff1a; 若节点小标为i&#xff0c;则左子…

虚拟机VMware安装Linux

关于安装&#xff0c;安装版本是CentOS 7&#xff0c;选择最小安装即可 第一步&#xff1a;选择创建新的虚拟机 第二步&#xff1a;默认典型&#xff0c;点击下一步 第三步&#xff1a;选择稍后安装操作系统 第四步&#xff1a;选择Linux和版本 第五步&#xff1a;输入虚拟机名…

鸿蒙Ability开发-Stage模型下Ability的创建和使用

创建Ability和Page页面 创建两个Ability&#xff1a;EntryAbility&#xff0c;DetailsAbility&#xff0c;其中EntryAbility是由工程默认创建的&#xff0c;这里我们只讲如何创建DetailsAbility。 使用DevEco Studio&#xff0c;选中对应的模块&#xff0c;单击鼠标右键&…

蓝桥杯省赛无忧 竞赛常用库函数 课件7 二分查找

01 二分查找的前提 02 binary_search函数 #include<bits/stdc.h> using namespace std; int main(){vector<int> numbers{1,3,5,7,9};int target 5;//使用binary_search 查找目标元素bool found binary_search(numbers.begin(),numbers.end(),target);if(found){…

利用矩阵特征值解决微分方程【1】

目录 一. 特征值介绍 二. 单变量常微分方程 三. 利用矩阵解决微分方程问题 四. 小结 4.1 矩阵论 4.2 特征值与特征向量内涵 4.3 应用 一. 特征值介绍 线性代数有两大基础问题&#xff1a; 如果A为对角阵的话&#xff0c;那么问题就很好解决。需要注意的是&#xff0c;矩…

强直性脊柱炎=“不死的癌症”?这些常识你不可不知→

对强直性脊柱炎这个疾病&#xff0c;大家最常听说的是&#xff1a;强直性脊柱炎症状重、治疗难&#xff0c;会逐渐引发关节畸形、功能丧失&#xff0c;甚至残疾&#xff0c;被称为「不死的癌症」。 然而&#xff0c;近来越来越多患有强直性脊柱炎的明星活跃在荧幕上&#xff0c…

Azure AI 内容安全Content Safety Studio实战

Azure AI Content Safety 检测应用程序和服务中用户生成和 AI 生成的有害内容。 Azure AI 内容安全包括文本和图像 API&#xff0c;可用于检测有害材料。 交互式 Content Safety Studio&#xff0c;可用于查看、浏览和试用用于检测不同形式的有害内容的示例代码。 关注TechLead…

实践论原文与解读

文章目录 一、原文二、解读1&#xff1a;世界是怎样的&#xff1f;社会是怎样的&#xff1f;每一个单独的个体是怎样和这个世界广泛联系的&#xff1f;想要读懂实践论这是首先要解决的问题。2&#xff1a;认知在生命实践中起怎样的作用&#xff1f;命运是什么&#xff1f;人是否…

C#.Net学习笔记——设计模式六大原则

***************基础介绍*************** 1、单一职责原则 2、里氏替换原则 3、依赖倒置原则 4、接口隔离原则 5、迪米特法原则 6、开闭原则 一、单一职责原则 举例&#xff1a;类T负责两个不同的职责&#xff1a;职责P1&#xff0c;职责P2。当由于职责P1需求发生改变而需要修…

【Java 设计模式】设计原则

文章目录 ✨单一职责原则&#xff08;SRP&#xff09;✨开放/封闭原则&#xff08;OCP&#xff09;✨里氏替换原则&#xff08;LSP&#xff09;✨依赖倒置原则&#xff08;DIP&#xff09;✨接口隔离原则&#xff08;ISP&#xff09;✨合成/聚合复用原则&#xff08;CARP&#…

Golang-strconv库学习笔记

前言&#xff1a; strconv库是go官方提供的一个标准包&#xff0c;主要用于字符串相关的处理。通过参考官方文档、中文文档和其他工具&#xff0c;进行学习记录。学习重点是其中的内置方法。 本文分为Atoi&#xff0c;Format系列&#xff0c;Parse系列&#xff0c;Append系列,…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

UV贴图和展开初学者指南

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 这正是本文的主题——UV贴图——登上舞台的时候。大多数 3D 建…