博客
关于我
MongoDB两地三中心集群架构设计、全球多写集群架构设计
阅读量:797 次
发布时间:2023-02-09

本文共 2998 字,大约阅读时间需要 9 分钟。

文章目录

高级集群架构设计

两地三中心集群架构设计

容灾级别

在这里插入图片描述

RPO&RTO

RPO(Recovery Point Objective):即数据恢复点目标,主要指的是业务系统所能容忍的数据丢失量。

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

在这里插入图片描述

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

双中心双活+异地热备=两地三中心

在这里插入图片描述

两地三中心部署的考量点

• 节点数量建议要5个,2+2+1模式

• 主数据中心的两个节点要设置高一点的优先级,减少跨中心换主节点

• 同城双中心之间的网络要保证低延迟和频宽,满足 writeConcern: Majority 的双中心写需求

• 使用 Retryable Writes and Retryable Reads 来保证零下线时间

• 用户需要自行处理好业务层的双中心切换

两地三中心复制集搭建

环境准备

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

整体架构

在这里插入图片描述

配置域名解析

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

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

启动5个 MongoDB 实例

在mongo1上执行以下命令

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

在mongo2上执行以下命令

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

在mongo3上执行以下命令

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

初始化复制集

[root@localhost mongodb]# mongosh 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:10001conf = rs.conf()conf.members[0].priority = 5conf.members[1].priority = 10rs.reconfig(conf)

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

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

#vim ingest-scriptdb.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);}
# 使用--retryWrites参数  即使出现数据中心故障,对前端业务没有任何中断 (Retryable Writes 在4.2以后就是默认设置)mongosh --retryWrites mongodb://mongo01.com:10001,mongo02.com:10002,mongo03.com:10001,mongo04.com:10002,mongo05.com:10001/test?replicaSet=demo ./ingest-script

测试结果

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

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

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

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

总结

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

全球多写集群架构设计

在这里插入图片描述

转载地址:http://fjffk.baihongyu.com/

你可能感兴趣的文章
MQTT共享订阅:实现高效的消息通信
查看>>
MQTT协议 - 安全问题
查看>>
MQTT协议知识梳理,看完你就懂了!
查看>>
MQTT协议简介和基本概念
查看>>
MQTT发消失给HA客户端执行失败Stopped because an error was encountered at not a valid value for dictionary value
查看>>
MQTT工作笔记0005---CONNECT控制报文2
查看>>
MQTT工作笔记0006---CONNECT控制报文3
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0008---服务质量
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
MQTT工作笔记0010---订阅主题和订阅确认2
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MQTT(1):MQTT协议介绍
查看>>
MQTT(2):MQTT协议原理
查看>>
MQ选型 | 为什么是RocketMQ而不是Kafka?
查看>>
Mr Cao 的提问
查看>>
MS COCO数据集介绍
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
Ms Sql 2000 & Ms Sql 2005 & Ms Sql 2008更改 tempdb 数据库的物理位置
查看>>
ms sql server 2008 sp2更新异常
查看>>