• 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 实例创建独立的配置文件,指定不同的端口、数据目录和日志文件路径。以下是三个实例的配置文件示例:

    # 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 实例:

    mongod --config /path/to/mongod1.conf  
    mongod --config /path/to/mongod2.conf  
    mongod --config /path/to/mongod3.conf
    
    3.5 初始化副本集

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

    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() 命令来检查副本集的状态,确保所有成员都健康且已正确配置。

    rs.status()
    

    四、故障转移测试

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

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

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

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

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

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

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

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

  • 相关阅读:
    让AI为您自动生成独特的商品标题,商品描述和营销文案
    LeetCode每日一题——672. 灯泡开关 Ⅱ
    CLion 总是提示 “This file does not belong to any project target xxx” 的解决方法
    第一次接触web前端开发
    Linux系统中sh脚本编写
    ES挂载不上怎么处理?
    InnoDB & index页-mysql详解(二)
    哈工大李治军老师操作系统笔记【11】:操作系统的那棵“树”(Learning OS Concepts By Coding Them !)
    @Autowired注解底层是如何实现的
    [Python]语音识别媒体中的音频到文本
  • 原文地址:https://blog.csdn.net/mwm0213/article/details/140438671