如何在一台服务器上搭建 mongodb副本集1主2从节点

news2025/7/17 2:55:57

在一台服务器上搭建 MongoDB 副本集(1 主节点 + 2 从节点)可以通过运行多个 MongoDB 实例并使用不同端口和数据目录来实现。以下是详细步骤:

1. 准备工作

  • 确保已安装 MongoDB。
  • 为每个实例创建独立的数据目录和日志文件。

2. 创建数据目录和日志文件

为每个节点创建独立的数据目录和日志文件。

mkdir -p /data/db{1,2,3}
touch /var/log/mongodb{1,2,3}.log
chmod 777 /var/log/mongodb{1,2,3}.log

演示

3. 配置 MongoDB 实例

为每个实例创建独立的配置文件。

主节点配置文件 (mongod1.conf):

storage:
  dbPath: /data/db1
systemLog:
  destination: file
  path: /var/log/mongodb1.log
  logAppend: true
net:
  bindIp: 127.0.0.1
  port: 27017
replication:
  replSetName: rs0
processManagement:
  fork: true

演示如下

systemLog:
  destination: file
  path: "/usr/local/mongodb/logs/mongodb.log"
  logAppend: true

storage:
  dbPath: "/usr/local/mongodb/data"
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
  journal:
    commitIntervalMs: 100

net:
  port: 27017
  bindIp: "0.0.0.0"

replication:
  replSetName: rs0

processManagement:
  fork: true

从节点 1 配置文件 (mongod2.conf):

storage:
  dbPath: /data/db2
systemLog:
  destination: file
  path: /var/log/mongodb2.log
  logAppend: true
net:
  bindIp: 127.0.0.1
  port: 27018
replication:
  replSetName: rs0
processManagement:
  fork: true

演示如下

systemLog:
  destination: file
  path: "/usr/local/mongodb/logs2/mongodb.log"
  logAppend: true

storage:
  dbPath: "/usr/local/mongodb/data2"
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
  journal:
    commitIntervalMs: 100

net:
  port: 27018
  bindIp: "0.0.0.0"

replication:
  replSetName: rs0

processManagement:
  fork: true

从节点 2 配置文件 (mongod3.conf):

storage:
  dbPath: /data/db3
systemLog:
  destination: file
  path: /var/log/mongodb3.log
  logAppend: true
net:
  bindIp: 127.0.0.1
  port: 27019
replication:
  replSetName: rs0
processManagement:
  fork: true

演示如下

systemLog:
  destination: file
  path: "/usr/local/mongodb/logs3/mongodb.log"
  logAppend: true

storage:
  dbPath: "/usr/local/mongodb/data3"
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
  journal:
    commitIntervalMs: 100

net:
  port: 27019
  bindIp: "0.0.0.0"

replication:
  replSetName: rs0

processManagement:
  fork: true

4. 启动 MongoDB 实例

使用配置文件启动三个 MongoDB 实例。

mongod -f /path/to/mongod1.conf
mongod -f /path/to/mongod2.conf
mongod -f /path/to/mongod3.conf

 演示如下

#启动
mongod --config /usr/local/mongodb/etc/mongod.conf --fork #后台进程运行
mongod --config /usr/local/mongodb/etc2/mongod.conf --fork #后台进程运行
mongod --config /usr/local/mongodb/etc3/mongod.conf --fork #后台进程运行

#关闭
mongod --shutdown -f /usr/local/mongodb/etc/mongod.conf
mongod --shutdown -f /usr/local/mongodb/etc2/mongod.conf
mongod --shutdown -f /usr/local/mongodb/etc3/mongod.conf

启动效果如下

5. 初始化副本集

连接到主节点(27017 端口),初始化副本集。

mongo --port 27017

演示如下

mongosh "mongodb://localhost:27017"

在 MongoDB Shell 中执行:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "127.0.0.1:27017" },
    { _id: 1, host: "127.0.0.1:27018" },
    { _id: 2, host: "127.0.0.1:27019" }
  ]
})

演示如下

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "127.0.0.1:27017" },
    { _id: 1, host: "127.0.0.1:27018" },
    { _id: 2, host: "127.0.0.1:27019" }
  ]
})

 执行效果如下

6. 检查副本集状态

初始化后,检查副本集状态。

rs.status()

输出应显示 1 个 PRIMARY 和 2 个 SECONDARY 节点。

演示如下

 

7. 验证数据同步

在主节点插入数据,检查从节点是否同步。

主节点插入数据:

use testdb
db.testcollection.insert({ name: "example" })

从节点查询数据:

mongo --port 27018

演示如下

mongosh "mongodb://localhost:27018"

在 MongoDB Shell 中执行:

rs.secondaryOk()  # 允许从节点读取 mongodb 7
db.testcollection.find()

说明:

  • rs.secondaryOk() 允许当前会话从次要节点读取数据。
  • 如果你希望所有会话都默认允许从次要节点读取数据,可以在连接字符串中添加 readPreference=secondary 参数。

连接字符串示例

mongodb://host1:27017,host2:27017,host3:27017/myDatabase?readPreference=secondary

通过这种方式,你可以确保应用程序从次要节点读取数据,从而分担主节点的负载。

8. 停止和清理

如果需要停止副本集,可以使用以下命令:

mongod --dbpath /data/db1 --shutdown
mongod --dbpath /data/db2 --shutdown
mongod --dbpath /data/db3 --shutdown

清理数据目录和日志文件:

rm -rf /data/db{1,2,3}
rm -f /var/log/mongodb{1,2,3}.log

总结

通过以上步骤,您可以在单台服务器上成功搭建一个 MongoDB 副本集(1 主 2 从)。这种方法适合本地开发和测试,但在生产环境中建议使用多台服务器以实现高可用性。

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

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

相关文章

TikTok隐私保护措施:确保用户安全

TikTok隐私保护措施:确保用户安全 在这个信息爆炸的时代,社交媒体平台的隐私保护问题日益成为公众关注的焦点。TikTok,作为全球领先的短视频平台,拥有庞大的用户群体,因此,其隐私保护措施显得尤为重要。本…

Apollo Cyber 学习笔记

目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…

mamba_ssm和causal-conv1d详细安装教程

1.前言 Mamba是近年来在深度学习领域出现的一种新型结构,特别是在处理长序列数据方面表现优异。在本文中,我将介绍如何在 Linux 系统上安装并配置 mamba_ssm 虚拟环境。由于官方指定mamba_ssm适用于 PyTorch 版本高于 1.12 且 CUDA 版本大于 11.6 的环境…

Ruby基础

一、字符串 定义 283.to_s //转为string "something#{a}" //定义字符串,并且插入a变量的值 something//单引号定义变量 %q(aaaaaaaaa) // 定义字符串,()内可以是任何数,自动转义双引号%Q("aaaaa"…

Flutter的permission_handler插件检查iOS的通知权限不准确

今天,做好了一个功能,就是在app内检查用户有没有给当前APP打开通知权限, 如果没打开,就展示一个 banner ,让用户去点击banner去打开权限 。 android上测试得非常顺利, 结果, 在iOS 上就是不…

vue使用a-table设置自定义合并字段实现某字段值相同则合并行

背景: 笔者前端使用ant-design-vue,二次开发了a-table,但a-table组件的属性方法都可以用; 业务需求:物资存放在不同的仓库,显示物资统计表格,以物资分组合并显示物资名称、总数量(物资A在所有库房总数量&a…

Docker容器日常维护常用命令大全

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台deepseek-v3模型生成,文中所有命令未进行验证,仅供参考。请根据具体情况和需求进行适当的调整和验证。 引言 Docker作为当前最流行的容器化技术&#xf…

《昇腾推理服务器+DeepSeek大模型》技术培训在图为科技成功举办

2月17日,华为政企业务团队受邀莅临图为科技深圳总部,并成功举办了一场聚焦于《昇腾推理服务器DeepSeek大模型》的专业知识培训。 此次培训活动不仅深化了双方的技术交流,更标志着昇腾AI与DeepSeek大模型的全面融合应用即将迈入实质性落地的新…

DeepSeek开源周Day5: 3FS存储系统与AI数据处理新标杆

项目地址: GitHub - deepseek-ai/3FS: A high-performance distributed file system designed to address the challenges of AI training and inference workloads.GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and…

FastAPI系列:如何配置跨域访问(CORS)

默认情况下,FastAPI应用程序不允许来自不同来源的请求。当你有一个前端应用程序与后端API通信,并且它们托管在不同的域或端口上时,在FastAPI中允许来自不同来源的请求是一种常见的场景。这被称为CORS(跨域资源共享)&am…

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 目录 Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 一、简单介绍 二、简单介绍 camera 三、安装 camera 四、简单案例实现 五、关键代码 一、简单…

【Vue3 Teleport 技术解析:破解弹窗吸附与滚动列表的布局困局】

🌟 Vue3 Teleport 技术解析:破解弹窗吸附与滚动列表的布局困局 🌍 背景:传统组件嵌套的布局之痛 在传统前端开发中,组件往往被严格限制在父级 DOM 结构中,这导致三大典型问题: 层级监禁 &…

VBA技术资料MF276:在集合中使用键

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

安装Git(小白也会装)

一、官网下载:Git 1.依次点击(红框) 不要安装在C盘了,要炸了!!! 后面都 使用默认就好了,不用改,直接Next! 直到这里,选第一个 这两种选项的区别如…

前端正则表达式完全指南:从入门到实战

文章目录 第一章:正则表达式基础概念1.1 什么是正则表达式1.2 正则表达式工作原理1.3 基础示例演示 第二章:正则表达式核心语法2.1 元字符大全表2.2 量词系统详解2.3 字符集合与排除 第三章:前端常用正则模式3.1 表单验证类3.1.1 邮箱验证3.1…

Chromium项目相关

Chromium项目相关 Chromium 是一个开源浏览器项目,旨在为所有用户构建一种更安全、更快速、更稳定的方式来体验 Web。 自 Google 在 2008 年宣布 Chromium 项目以来,他们一直很高兴能够在开源 Web 浏览器的良好基础上进行构建,并为富 Web 平…

自动驾驶测试场景相关概念

自动驾驶测试场景 一、概念二、分类2.1、按照场景的抽象程度可分为:功能场景、逻辑场景、具体场景。2.2.、​按功能划分2.3、 ​按环境复杂度2.3、按场景类型 三、要素四、挑战与趋势4.1、长尾场景覆盖​4.2、伦理决策测试​4.3、车路协同测试​4.4、联邦学习驱动​…

给小白的oracle优化工具,了解一下

有时懒得分析或语句太长,可以尝试用oracle的dbms_sqldiag包进行sql优化, --How To Use DBMS_SQLDIAG To Diagnose Query Performance Issues (Doc ID 1386802.1) --诊断SQL 性能 SET ECHO ON SET LINESIZE 132 SET PAGESIZE 999 SET LONG 999999 SET SER…

基因型—环境两向表数据分析——品种生态区划分

参考资料:农作物品种试验数据管理与分析 用于品种生态区划分的GGE双标图有两种功能图:试点向量功能图和“谁赢在哪里”功能图。双标图的具体模型基于SD定标和h加权和试点中心化的数据。本例中籽粒产量的GGE双标图仅解释了G和GE总变异的53.6%,…

电路中如何计算电容容值大小

一个例题: 【电路中电容容值是怎么算出来的?】https://www.bilibili.com/video/BV1RQ4y1c7i1?vd_source3cc3c07b09206097d0d8b0aefdf07958