MongoDB(七) - MongoDB副本集安装与配置

文章目录

  • 前言
  • 一、下载MongoDB
    • 1. 下载MongoDB
    • 2. 上传安装包
    • 3. 创建相关目录
  • 二、安装配置MongoDB
    • 1. 解压MongoDB安装包
    • 2. 重命名MongoDB文件夹名称
    • 3. 修改配置文件
    • 4. 分发MongoDB文件夹
    • 5. 配置环境变量
    • 6. 启动副本集
    • 7. 进入MongoDB客户端
    • 8. 初始化副本集
      • 8.1 初始化副本集
      • 8.2 添加副本节点
  • 三、副本集操作
    • 1. 副本集状态介绍
    • 2. 查看副本集成员状态
    • 3. 数据同步
      • 3.1 启用数据同步
      • 3.2 测试数据同步
    • 4. 故障转移
      • 4.1 终止hadoop1的MongoDB的主节点进程
      • 4.2 查看从节点是否有一个自动转为主节点
    • 5. 配置副本集成员
      • 5.1 调整副本集成员的优先级
      • 5.2 配置隐藏节点
      • 5.3 配置延迟节点
      • 5.4 配置副本集成员投票权
      • 5.5 将副本节点转为仲裁节点


前言

本文详细介绍了在Linux环境下安装和配置MongoDB副本集的完整流程。主要内容包括:下载MongoDB安装包并上传至服务器;创建必要的数据和日志目录;解压安装包并配置mongod.conf文件;分发MongoDB到集群节点;配置环境变量;启动副本集服务;以及初始化副本集并添加节点。通过图文并茂的方式展示了每个操作步骤的执行过程和验证方法,最终实现了包含hadoop1(主节点)、hadoop2和hadoop3(副本节点)的三节点MongoDB副本集环境。


一、下载MongoDB

1. 下载MongoDB

MongoDB安装包下载地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.30.tgz

2. 上传安装包

通过拖移的方式将下载的MongoDB安装包mongodb-linux-x86_64-rhel70-5.0.30.tgz上传至虚拟机hadoop1的/export/software目录。

在这里插入图片描述

3. 创建相关目录

目录/export/data/mongodb/data用于存放副本数据,目录/export/data/mongodb/logs用于存放副本集日志,文件/export/data/mongodb/logs/mongodb.log用于保存日志,MongoDB的数据目录和日志目录不会自动创建,需要手动创建。分别在虚拟机hadoop1hadoop2hadoop3执行如下命令创建相关目录。

mkdir -p /export/data/mongodb/data
mkdir -p /export/data/mongodb/logs
touch /export/data/mongodb/logs/mongodb.log

在这里插入图片描述


二、安装配置MongoDB

1. 解压MongoDB安装包

在虚拟机hadoop1上将MongoDB安装包解压至/export/servers目录。

tar -zxvf /export/software/mongodb-linux-x86_64-rhel70-5.0.30.tgz -C /export/servers/

解压完成如下图所示。

在这里插入图片描述

2. 重命名MongoDB文件夹名称

把MongoDB文件夹名称按标准命名方式(软件名-版本号)重命名。

mv /export/servers/mongodb-linux-x86_64-rhel70-5.0.30/ /export/servers/mongodb-5.0.30

在这里插入图片描述

3. 修改配置文件

参数映射说明

命令行参数配置文件路径说明
--port 27017net.portMongoDB服务监听的端口
--bind_ip hadoop1net.bindIp监听的网络接口(主机名或IP)
--dbpath=/export/...storage.dbPath数据文件存储路径
--logpath=/export/...systemLog.path日志文件路径
--logappendsystemLog.logAppend以追加模式写入日志(保留历史记录)
--forkprocessManagement.fork以守护进程模式运行(后台运行)
--replSet bigdata_mongodbreplication.replSetName副本集名称

在虚拟机hadoop1执行如下命令创建配置文件目录,并向配置文件mongod.conf中添加配置内容。

mkdir -p /export/servers/mongodb-5.0.30/conf
cat >/export/servers/mongodb-5.0.30/conf/mongod.conf <<EOF
# 网络配置
net:port: 27017bindIp: 0.0.0.0
# 存储配置
storage:dbPath: /export/data/mongodb/data
# 日志配置
systemLog:destination: filepath: /export/data/mongodb/logs/mongodb.loglogAppend: true
# 进程配置
processManagement:fork: true
# 复制集配置
replication:replSetName: "bigdata_mongodb"
EOF

在这里插入图片描述

4. 分发MongoDB文件夹

把虚拟机hadoop1中的MongoDB文件夹复制到虚拟机hadoop2hadoop3中。

scp -r /export/servers/mongodb-5.0.30/ root@hadoop2:/export/servers/

在这里插入图片描述

scp -r /export/servers/mongodb-5.0.30/ root@hadoop3:/export/servers/

在这里插入图片描述

5. 配置环境变量

分别在虚拟机hadoop1hadoop2hadoop3执行如下命令,向环境变量配置文件/etc/profile追加环境变量内容。配置环境变量后,需要加载环境变量配置文件/etc/profile,使用hadoop的环境变量生效。

echo >> /etc/profile
echo 'export MONGODB_HOME=/export/servers/mongodb-5.0.30' >> /etc/profile
echo 'export PATH=$PATH:$MONGODB_HOME/bin:$MONGODB_HOME/bin' >> /etc/profile
source /etc/profile

在这里插入图片描述

配置好环境变量后,分别在虚拟机hadoop1hadoop2hadoop3执行如下命令验证环境变量是否配置成功。

mongo --version

成功如下图所示。

在这里插入图片描述

6. 启动副本集

以副本集模式启动MongoDB,分别在虚拟机hadoop1hadoop2hadoop3执行如下命令启动MongoDB服务。

mongod -f /export/servers/mongodb-5.0.30/conf/mongod.conf

在这里插入图片描述

7. 进入MongoDB客户端

在虚拟机hadoop1执行如下命令进入hadoop1的MongoDB客户端。

mongo --host hadoop1 --port 27017

在这里插入图片描述

8. 初始化副本集

8.1 初始化副本集

在虚拟机hadoop1执行如下命令初始化副本集。

rs.initiate()

初始化成功如下图所示。

在这里插入图片描述

完成初始化后,节点默认处于SECONDARY(副本节点)状态,等待几秒后自动选举自己为PRLMARY(主节点),如下图所示。

在这里插入图片描述

8.2 添加副本节点

在虚拟机hadoop1执行如下命令将服务器hadoop2hadoop3以副本节点的角色添加到副本集中。

rs.add("hadoop2:27017")
rs.add("hadoop3:27017")

添加成功如下图所示。

在这里插入图片描述

在虚拟机hadoop2执行如下命令进入hadoop2的MongoDB客户端,查看副本集状态。

mongo --host hadoop2 --port 27017

如下图所示,服务器hadoop2是为SECONDARY状态。

在这里插入图片描述

在虚拟机hadoop3执行如下命令进入hadoop3的MongoDB客户端,查看副本集状态。

mongo --host hadoop3 --port 27017

如下图所示,服务器hadoop3是为SECONDARY状态。

在这里插入图片描述


三、副本集操作

1. 副本集状态介绍

以下是 MongoDB 副本集(Replica Set)状态的详细介绍。

分类状态/概念说明
基本架构副本集(Replica Set)由多个 MongoDB 节点组成的集群,实现数据冗余、高可用和故障转移。
主节点(Primary)唯一可写入的节点,处理所有写操作,并将变更同步到从节点(Secondary)。
从节点(Secondary)复制主节点数据,可用于读操作(默认禁止,需配置 readPreference)。
仲裁节点(Arbiter)不存储数据,仅参与选举投票,用于解决脑裂问题(奇数节点时非必需)。
节点状态PRIMARY主节点状态,当前集群唯一写入节点。
SECONDARY从节点状态,同步主节点数据,支持只读(需配置)。
RECOVERING节点正在同步数据(如初次加入副本集或数据同步中),不可读/写。
STARTUP节点刚启动,正在初始化,尚未完成同步。
STARTUP2节点已完成初始化,正在尝试加入副本集。
DOWN节点不可用(如进程停止或网络故障)。
ARBITER仲裁节点状态,仅参与选举,不存储数据。
REMOVED节点已从副本集中移除(但可能仍存在于配置中)。
选举机制主节点选举(Election)当主节点故障时,从节点通过心跳检测和投票机制重新选举新主节点。
心跳(Heartbeat)节点间通过定期心跳(默认2秒)检测存活状态。
多数派原则(Majority)选举需获得副本集多数节点(含主节点)的投票才能生效。
数据同步oplog(操作日志)主节点记录所有写操作的日志,从节点通过回放 oplog 实现数据同步。
同步延迟(Replication Lag)从节点与主节点的数据延迟时间(正常情况下应接近0)。
读写策略读偏好(Read Preference)控制读请求路由到主节点或从节点,支持 primaryprimaryPreferredsecondarysecondaryPreferrednearest 等模式。
管理命令rs.status()查看副本集状态的核心命令,返回各节点状态、同步信息及选举相关参数。
rs.initiate()初始化副本集配置。
rs.add()向副本集添加节点。
rs.remove()从副本集移除节点。
典型场景故障转移(Failover)主节点故障后,从节点自动选举新主节点,业务自动切换(需驱动支持)。
负载均衡(Read Scaling)将读请求分发到从节点,减轻主节点压力(需配置读偏好)。
注意事项节点数量建议推荐奇数个节点(如3/5/7个),避免脑裂(偶数节点需搭配仲裁节点)。
版本兼容性副本集内节点版本必须一致,否则可能导致同步失败或功能异常。

2. 查看副本集成员状态

在虚拟机hadoop1执行如下命令查看副本集成员状态。

rs.status()

返回的部分结果如下图所示。

在这里插入图片描述

状态码对应关系

状态码状态字符串说明
1PRIMARY主节点
2SECONDARY从节点
3RECOVERING数据同步中(不可用)
5STARTUP节点启动中
6ARBITER仲裁节点
8DOWN节点不可用
9UNKNOWN节点状态未知(如网络隔离)

3. 数据同步

3.1 启用数据同步

分别在虚拟机hadoop2hadoop3MongoDB客服端执行如下命令开启数据同步。

rs.secondaryOk()

在这里插入图片描述

3.2 测试数据同步

在虚拟机hadoop1MongoDB客服端执行如下命令,切换到test数据库,并向集合user插入一个文档。

use test
db.user.insert({"name":"zhangsan"})
db.user.find({})

在这里插入图片描述

在虚拟机hadoop2hadoop3MongoDB客服端执行如下命令,测试数据是否已经同步,可用查询到数据说明数据已经同步到hadoop2和hadoop3。

use test
db.user.find({})

如下图所示。

在这里插入图片描述

4. 故障转移

测试方法:终止hadoop1的MongoDB的主节点进程,查看hadoop2和hadoop3这两个从节点是否会有一个自动转为主节点。

4.1 终止hadoop1的MongoDB的主节点进程

查看hadoop1的MongoDB服务进程的PID。

ps -ef | grep mongodb

MongoDB服务进程的PID如下图红框部分所示。

在这里插入图片描述

关闭hadoop1的MongoDB服务进程。

kill -9 <PID>

4.2 查看从节点是否有一个自动转为主节点

如下图所示,在hadoop2和hadoop3这两个从节点中,hadoop2转为了主节点。

在这里插入图片描述

5. 配置副本集成员

5.1 调整副本集成员的优先级

在虚拟机主节点MongoDB客服端执行如下命令把副本集成员信息赋值到变量cfg中。

cfg=rs.conf()

在这里插入图片描述

优先级越高越容易被选举为主节点,优先级的范围是0-100(值越大优先级越高),所有节点的优先级默认为1,优先级为0不能成为主节点。

在虚拟机主节点MongoDB客服端执行如下命令把hadoop1的优先级改为2,并将修改后的配置应用到副本集。

cfg.members[0].priority=2
rs.reconfig(cfg)

配置成功如下图所示。

在这里插入图片描述

重新启动hadoop1的MongoDB服务

在虚拟机hadoop1执行如下命令启动MongoDB服务。

mongod -f /export/servers/mongodb-5.0.30/conf/mongod.conf

启动完成后等待10秒,可以发现hadoop1被重新选举成为主节点(因为hadoop1的优先级比较高),如下图所示。

在这里插入图片描述

5.2 配置隐藏节点

隐藏节点是副本集中持有数据副本、对客户端不可见、但可以参与主节点选举和数据同步的特殊节点,可用于数据备份或离线分析等场景。

在虚拟机主节点MongoDB客服端执行如下命令把副本集成员信息赋值到变量cfg中。

cfg=rs.conf()

在虚拟机主节点MongoDB客服端执行如下命令把hadoop2的优先级改为0,使其不能被选举为主节点。

cfg.members[1].priority=0

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令把hadoop2设置为隐藏节点。

cfg.members[1].hidden=true

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令将修改后的配置应用到副本集。

rs.reconfig(cfg)

在这里插入图片描述

5.3 配置延迟节点

延迟节点(Delayed Node)是副本集中数据落后于主节点指定时间(如1小时)的从节点,用于数据误操作恢复、版本验证等场景。

在虚拟机主节点MongoDB客服端执行如下命令把副本集成员信息赋值到变量cfg中。

cfg=rs.conf()

在虚拟机主节点MongoDB客服端执行如下命令把hadoop2的优先级改为0,使其不能被选举为主节点。

cfg.members[1].priority=0

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令把hadoop2设置为延迟节点,设置延迟时间为3600秒。

cfg.members[1].secondaryDelaySecs=3600

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令将修改后的配置应用到副本集。

rs.reconfig(cfg)

在这里插入图片描述

5.4 配置副本集成员投票权

副本集成员的投票权是指成员在主节点选举中是否具备投票资格,允许有七个拥有投票权的成员,由votes参数控制(默认值为1表示有投票权,0表示无投票权),通常用于控制选举过程或排除特殊节点(如延迟节点、隐藏节点)参与投票。

在虚拟机主节点MongoDB客服端执行如下命令把副本集成员信息赋值到变量cfg中。

cfg=rs.conf()

在虚拟机主节点MongoDB客服端执行如下命令把hadoop2的投票权设置为0,使其不能参与投票。

cfg.members[1].votes=0

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令将修改后的配置应用到副本集。

rs.reconfig(cfg)

在这里插入图片描述

5.5 将副本节点转为仲裁节点

在虚拟机主节点MongoDB客服端执行如下命令把副本集成员信息赋值到变量cfg中。

cfg=rs.conf()

在虚拟机主节点MongoDB客服端执行如下命令把服务器hadoop2从副本集中移除。

rs.remove("hadoop2:27017")

在这里插入图片描述

在虚拟机hadoop2上按Ctrl+C关闭MongoDB客服端,并执行如下操作关闭MongoDB服务进程。

查看hadoop2的MongoDB服务进程的PID。

ps -ef | grep mongodb

MongoDB服务进程的PID如下图红框部分所示。
在这里插入图片描述

关闭hadoop2的MongoDB服务进程。

kill -9 <PID>

在虚拟机hadoop2上执行如下命令备份MongoDB数据存放目录。

mv /export/data/mongodb/data /export/data/mongodb/data-old

在虚拟机hadoop2上执行如下命令创建新的数据存放目录,并重新启动MongoDB服务。

mkdir -p /export/data/mongodb/data
mongod -f /export/servers/mongodb-5.0.30/conf/mongod.conf

在这里插入图片描述

在虚拟机主节点MongoDB客服端执行如下命令以仲裁节点角色将hadoop2添加到副本集中。

rs.addArb("hadoop2:27017")

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

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

相关文章

mac笔记本如何快捷键截图后自动复制到粘贴板

前提&#xff1a;之前只会进行部分区域截图操作&#xff08;commandshift4&#xff09;操作&#xff0c;截图后发现未自动保存在剪贴板&#xff0c;还要进行一步手动复制到剪贴板的操作。 mac笔记本如何快捷键截图后自动复制到粘贴板 截取 Mac 屏幕的一部分并将其自动复制到剪…

WPF 按钮点击音效实现

WPF 按钮点击音效实现 下面我将为您提供一个完整的 WPF 按钮点击音效实现方案&#xff0c;包含多种实现方式和高级功能&#xff1a; 完整实现方案 MainWindow.xaml <Window x:Class"ButtonClickSound.MainWindow"xmlns"http://schemas.microsoft.com/win…

C++ list基础概念、list初始化、list赋值操作、list大小操作、list数据插入

list基础概念&#xff1a;list中的每一部分是一个Node&#xff0c;由三部分组成&#xff1a;val、next、prev&#xff08;指向上一个节点的指针&#xff09; list初始化的代码&#xff0c;见下 #include<iostream> #include<list>using namespace std;void printL…

【Pandas】pandas DataFrame equals

Pandas2.2 DataFrame Reindexing selection label manipulation 方法描述DataFrame.add_prefix(prefix[, axis])用于在 DataFrame 的行标签或列标签前添加指定前缀的方法DataFrame.add_suffix(suffix[, axis])用于在 DataFrame 的行标签或列标签后添加指定后缀的方法DataFram…

【ROS2】创建单独的launch包

【ROS】郭老二博文之:ROS目录 1、简述 项目中,可以创建单独的launch包来管理所有的节点启动 2、示例 1)创建launch包(python) ros2 pkg create --build-type ament_python laoer_launch --license Apache-2.02)创建启动文件 先创建目录:launch 在目录中创建文件:r…

GitHub 趋势日报 (2025年05月23日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1All-Hands-AI/OpenHands&#x1f64c;开放式&#xff1a;少代码&#xff0c;做…

鸿蒙OSUniApp 实现的数据可视化图表组件#三方框架 #Uniapp

UniApp 实现的数据可视化图表组件 前言 在移动互联网时代&#xff0c;数据可视化已成为产品展示和决策分析的重要手段。无论是运营后台、健康监测、还是电商分析&#xff0c;图表组件都能让数据一目了然。UniApp 作为一款优秀的跨平台开发框架&#xff0c;支持在鸿蒙&#xf…

[ctfshow web入门] web124

信息收集 error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];// 长度不允许超过80个字符if (strlen($content) > 80) {die("太长了不会算");}/…

Vue 技术文档

一、引言 Vue 是一款用于构建用户界面的渐进式 JavaScript 框架&#xff0c;具有易上手、高性能、灵活等特点&#xff0c;能够帮助开发者快速开发出响应式的单页面应用。本技术文档旨在全面介绍 Vue 的相关技术知识&#xff0c;为开发人员提供参考和指导。 二、环境搭建 2.1…

Nodejs+http-server 使用 http-server 快速搭建本地图片访问服务

在开发过程中&#xff0c;我们经常需要临时查看或分享本地的图片资源&#xff0c;比如设计稿、截图、素材等。虽然可以通过压缩发送&#xff0c;但效率不高。本文将教你使用 Node.js 的一个轻量级工具 —— http-server&#xff0c;快速搭建一个本地 HTTP 图片预览服务&#xf…

通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习

&#x1f389; 动态 2025年5月26日: &#x1f525; 我们正式发布&#x1f917;QwenLong-L1-32B——首个采用强化学习训练、专攻长文本推理的LRM模型。在七项长文本文档问答基准测试中&#xff0c;QwenLong-L1-32B性能超越OpenAI-o3-mini和Qwen3-235B-A22B等旗舰LRM&#xff0c…

学习如何设计大规模系统,为系统设计面试做准备!

前言 在当今快速发展的技术时代&#xff0c;系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起&#xff0c;构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而&#xff0c;对于许多工程师而言&#xff0c;如何有效…

Python生成ppt(python-pptx)N问N答(如何绘制一个没有背景的矩形框;如何绘制一个没有背景的矩形框)

文章目录 [toc]1. **如何安装python-pptx库&#xff1f;**2. **如何创建一个空白PPT文件&#xff1f;**3. **如何添加幻灯片并设置布局&#xff1f;**4. **如何添加文本内容&#xff1f;**5. **如何插入图片&#xff1f;**6. **如何设置动画和转场效果&#xff1f;**9. **如何绘…

命令模式,观察者模式,状态模式,享元模式

什么是命令模式&#xff1f; 核心思想是将原本直接调用的方法封装为对象&#xff08;如AttackCommand&#xff09;&#xff0c;对象包含​​执行逻辑​​和​​上下文信息​​&#xff08;如目标、参数&#xff09;。比如&#xff0c;玩家的按键操作被封装成一个命令对象&#…

Window Server 2019--07 PKI、SSL网站与邮件安全

了解PKI、SSL技术的核心原理掌握PKI架构服务器配置掌握证书管理与应用 公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;PKI&#xff09;是一个完整的颁发、吊销、管理数字证书的系统&#xff0c;是支持认证、加密、完整性和可追究性服务的基础设施。PKI通过第…

从C++编程入手设计模式2——工厂模式

从C编程入手设计模式 工厂模式 ​ 我们马上就要迎来我们的第二个创建型设计模式&#xff1a;工厂方法模式&#xff08;Factory Method Pattern&#xff09;。换而言之&#xff0c;我们希望使用一个这样的接口&#xff0c;使用其他手段而不是直接创建的方式&#xff08;说的有…

MySQL、PostgreSQL、Oracle 区别详解

MySQL、PostgreSQL、Oracle 区别详解 一、基础架构对比 1.1 数据库类型 MySQL:关系型数据库(支持NoSQL插件如MySQL Document Store)PostgreSQL:对象-关系型数据库(支持JSON等半结构化数据)Oracle:多模型数据库(关系型+文档+图+空间等)关键结论:PostgreSQL在数据类型…

window11系统 使用GO语言建立TDengine 连接

目录 1、安装GCC、TDengine-client 1、github下载mingw64 软件包 2、解压指定目录、配置环境变量 3、检验gcc是否安装成功 4、安装TDengine-client 2、配置go环境变量 3、配置Goland 系统变量、重启Goland&#xff08;该软件自己也有系统变量&#xff0c;有时候会和win…

VR 赋能病毒分离鉴定:开启微观探索新视界

在大众认知里&#xff0c;VR 技术往往与沉浸式游戏体验、虚拟社交紧密相连&#xff0c;让人仿佛置身于奇幻的虚拟世界中&#xff0c;感受着科技带来的奇妙娱乐享受。而病毒分离鉴定&#xff0c;听起来则是一个充满专业性与严肃性的科学领域&#xff0c;它关乎病毒的研究、疾病的…

Azure Devops pipeline 技巧和最佳实践

1. 如何显示release pipeline ? 解决方法: 登录devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用该选项。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 现在可以看到r…