MongoDB教程(六):mongoDB复制副本集

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

文章目录

引言

MongoDB 的复制副本集(Replica Set)是 MongoDB 实现高可用性和数据冗余的重要机制。本文将详细介绍 MongoDB 复制副本集的工作原理、架构、配置步骤,并通过一个详细的案例来说明如何搭建一个基本的 MongoDB 复制副本集。

一、MongoDB 复制副本集概述

MongoDB 的复制副本集是一组维护相同数据集合的 mongod 实例,这些实例协同工作以确保数据的高可用性和冗余。副本集包括一个主节点(Primary)和多个从节点(Secondary),所有客户端的写操作都通过主节点进行,而从节点则从主节点复制数据以保持数据的一致性。当主节点出现故障时,副本集会自动从从节点中选举出一个新的主节点,从而确保服务的连续性。

1.1 复制副本集的优势

高可用性和故障转移:自动选举新的主节点,确保服务不中断。

数据冗余:通过在不同节点上存储数据副本,提高数据的可靠性和安全性。

读写分离:从节点可以处理读操作,提高系统的读取能力。

灾难恢复:在数据中心故障时,可以快速切换到异地备份。

二、复制副本集的架构

2.1 PSS 模式

PSS 模式是 MongoDB 推荐的复制副本集模式,由一个主节点和两个从节点组成(Primary+Secondary+Secondary)。此模式始终提供数据集的两个完整副本,保证了数据的高可用性。

2.2 PSA 模式

PSA 模式由一个主节点、一个从节点和一个仲裁者节点组成(Primary+Secondary+Arbiter)。仲裁者节点不存储数据副本,也不参与读写操作,仅用于在选举过程中提供投票。此模式在资源有限时很有用,因为它仅提供一个完整的数据副本,同时减少了资源消耗。

三、复制副本集的配置步骤

3.1 环境准备

首先,需要准备至少三台服务器或虚拟机来部署 MongoDB 实例。在本文的案例中,我们将使用同一台机器上的不同端口来模拟三个不同的 MongoDB 实例。

3.2 安装 MongoDB

确保 MongoDB 已安装在所有服务器上,并配置好环境变量。在本文的案例中,我们假设 MongoDB 已安装在 /data/program/software/mongodb 目录下。

3.3 创建配置文件

为每个 MongoDB 实例创建独立的配置文件,指定不同的端口、数据目录和日志文件路径。以下是三个实例的配置文件示例:

bash 复制代码
# mongod1.conf  
dbpath=/data/db1  
logpath=/data/db1/mongod.log  
port=27017  
bindIp=0.0.0.0  
replSet=rs0  
fork=true  
logAppend=true  
  
# mongod2.conf  
dbpath=/data/db2  
logpath=/data/db2/mongod.log  
port=27018  
bindIp=0.0.0.0  
replSet=rs0  
fork=true  
logAppend=true  
  
# mongod3.conf  
dbpath=/data/db3  
logpath=/data/db3/mongod.log  
port=27019  
bindIp=0.0.0.0  
replSet=rs0  
fork=true  
logAppend=true
3.4 启动 MongoDB 实例

使用上述配置文件启动三个 MongoDB 实例:

bash 复制代码
mongod --config /path/to/mongod1.conf  
mongod --config /path/to/mongod2.conf  
mongod --config /path/to/mongod3.conf
3.5 初始化副本集

连接到其中一个 MongoDB 实例(例如,连接到 27017 端口的主机),并初始化副本集:

bash 复制代码
mongo --port 27017  
rs.initiate({  
  _id: "rs0",  
  members: [  
    { _id: 0, host: "localhost:27017" },  
    { _id: 1, host: "localhost:27018" },  
    { _id: 2, host: "localhost:27019" }  
  ]  
})
3.6 验证副本集状态

使用 rs.status() 命令来检查副本集的状态,确保所有成员都健康且已正确配置。

bash 复制代码
rs.status()

四、故障转移测试

为了验证副本集的故障转移功能,可以模拟主节点故障:

  1. 停止主节点的 MongoDB 实例。
  2. 等待一段时间,观察副本集是否自动选举出一个新的主节点。
  3. 再次执行 rs.status() 命令,查看新的主节点和副本集的状态。

五、实际应用中的考虑因素

  1. 网络延迟:副本集节点之间的网络延迟会影响数据同步的效率和故障转移的速度。
  2. 数据一致性:根据应用的需求,合理配置读偏好(Read Preference)来控制从哪个节点读取数据,以满足不同的一致性要求。
  3. 资源分配:为每个节点分配足够的资源,包括 CPU、内存和存储,以确保它们能够正常运行和处理数据。

喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘

💝💝💝如有需要请大家订阅我的专栏【MongoDB系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

MongoDB相关文章索引 文章链接
MongoDB教程(一):Linux系统安装mongoDB详细教程 MongoDB教程(一):Linux系统安装mongoDB详细教程
MongoDB教程(二):mongoDB引用shell MongoDB教程(二):mongoDB引用shell
MongoDB教程(三):mongoDB用户管理 MongoDB教程(三):mongoDB用户管理
MongoDB教程(四):mongoDB索引 MongoDB教程(四):mongoDB索引
MongoDB教程(五):mongoDB聚合框架 MongoDB教程(五):mongoDB聚合框架

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关推荐
广州智造3 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥6 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸8 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1238 小时前
Redis解析
数据库·redis·缓存
数据库幼崽8 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd8 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou9 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh9 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵11 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多11 小时前
Linux——mysql主从复制与读写分离
数据库·mysql