当前位置: 首页 > news >正文

windows如何设置mongodb的副本集

Windows 环境配置 MongoDB 副本集

在 Windows 环境下配置 MongoDB 副本集需要以下步骤,副本集至少需要 3 个节点(1 主 2 从或 1 主 1 从 1 仲裁),我们可以在单机上通过不同端口模拟多个节点。

一、准备工作

1. 安装 MongoDB

  • 确保已安装 MongoDB(推荐 4.4+ 版本)
  • 默认安装路径:C:\Program Files\MongoDB\Server\5.0\bin(根据实际版本调整)
  • bin 目录添加到系统环境变量 Path

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

在任意位置(如 D:\mongodb)创建以下目录结构:

D:\mongodb\├─ rs0-0\           # 节点 0 数据目录│  └─ data\│     └─ db\├─ rs0-1\           # 节点 1 数据目录│  └─ data\│     └─ db\├─ rs0-2\           # 节点 2 数据目录│  └─ data\│     └─ db\└─ logs\            # 日志目录├─ rs0-0.log├─ rs0-1.log└─ rs0-2.log

二、启动三个 MongoDB 实例

1. 打开三个命令提示符窗口(CMD 或 PowerShell)

分别对应三个节点,按顺序执行以下命令:

节点 0(主节点,端口 27017)
mongod --port 27017 --dbpath "D:\mongodb\rs0-0\data\db" --logpath "D:\mongodb\logs\rs0-0.log" --logappend --replSet rs0 --wiredTigerCacheSizeGB 0.5
节点 1(从节点,端口 27018)
mongod --port 27018 --dbpath "D:\mongodb\rs0-1\data\db" --logpath "D:\mongodb\logs\rs0-1.log" --logappend --replSet rs0 --wiredTigerCacheSizeGB 0.5
节点 2(从节点/仲裁节点,端口 27019)
mongod --port 27019 --dbpath "D:\mongodb\rs0-2\data\db" --logpath "D:\mongodb\logs\rs0-2.log" --logappend --replSet rs0 --wiredTigerCacheSizeGB 0.5

参数说明:

  • --port:指定端口号
  • --dbpath:数据存储目录
  • --logpath:日志文件路径
  • --logappend:日志追加模式(防止覆盖)
  • --replSet:副本集名称(所有节点必须相同)
  • --wiredTigerCacheSizeGB:限制缓存大小(根据内存情况调整)

2. 检查节点是否启动成功

查看日志文件或进程,确认三个节点均正常启动,无报错信息。

三、配置副本集

1. 连接到主节点

打开第四个命令提示符窗口,连接到端口 27017 的节点:

mongo --port 27017

2. 初始化副本集配置

在 MongoDB Shell 中执行以下命令:

rs.initiate({_id: "rs0",  // 副本集名称,必须与启动时的 --replSet 参数一致members: [{_id: 0, host: "localhost:27017"},  // 节点 0{_id: 1, host: "localhost:27018"},  // 节点 1{_id: 2, host: "localhost:27019"}   // 节点 2]
})

3. 验证副本集状态

执行以下命令检查副本集状态:

rs.status()

成功标志:

  • ok 字段值为 1
  • members 数组中有 3 个节点
  • 其中一个节点的 stateStrPRIMARY(主节点)
  • 其他节点的 stateStrSECONDARY(从节点)

4. (可选)设置仲裁节点

如果只需要 2 个数据节点 + 1 个仲裁节点(节省资源),可以修改配置:

// 先移除原有节点 2
rs.remove("localhost:27019")// 重新添加为仲裁节点(arbiterOnly: true)
rs.addArb("localhost:27019")// 或直接修改成员配置
rs.reconfig({_id: "rs0",members: [{_id: 0, host: "localhost:27017"},{_id: 1, host: "localhost:27018"},{_id: 2, host: "localhost:27019", arbiterOnly: true}]
})

四、设置 Windows 服务(可选,推荐)

为了避免每次手动启动节点,可以将 MongoDB 实例注册为 Windows 服务:

1. 为每个节点创建配置文件

D:\mongodb 目录下创建 rs0-0.confrs0-1.confrs0-2.conf

rs0-0.conf

systemLog:destination: filepath: "D:\\mongodb\\logs\\rs0-0.log"logAppend: true
storage:dbPath: "D:\\mongodb\\rs0-0\\data\\db"wiredTiger:engineConfig:cacheSizeGB: 0.5
net:port: 27017
replication:replSetName: "rs0"

(其他两个配置文件类似,只需修改端口、路径和日志文件)

2. 注册 Windows 服务

以管理员身份打开命令提示符,执行以下命令:

# 注册节点 0 服务
mongod --config "D:\mongodb\rs0-0.conf" --install --serviceName "MongoDB-rs0-0"# 注册节点 1 服务
mongod --config "D:\mongodb\rs0-1.conf" --install --serviceName "MongoDB-rs0-1"# 注册节点 2 服务
mongod --config "D:\mongodb\rs0-2.conf" --install --serviceName "MongoDB-rs0-2"

3. 启动服务

# 启动服务
net start MongoDB-rs0-0
net start MongoDB-rs0-1
net start MongoDB-rs0-2# 停止服务(需要时)
# net stop MongoDB-rs0-0

服务注册后,可在 服务 管理界面(services.msc)中查看和管理。

五、验证副本集功能

1. 连接到主节点写入数据

mongo --port 27017

在主节点插入测试数据:

use testdb
db.test.insertOne({name: "副本集测试", date: new Date()})

2. 连接到从节点读取数据

mongo --port 27018

在从节点查询数据(默认从节点不可读,需要设置):

rs.slaveOk()// 允许从节点读取(仅临时生效)
db.test.find().pretty()// 应能看到主节点插入的数据

3. 检查数据同步状态

在主节点执行:

db.printReplicationInfo()// 查看复制信息
db.printSlaveReplicationInfo()// 查看从节点同步状态

六、常见问题解决

1. 节点启动失败

  • 检查端口是否被占用:netstat -ano | findstr :27017
  • 确保数据目录权限正确(关闭杀毒软件试试)
  • 日志文件路径是否可写

2. 副本集初始化失败

  • 检查所有节点是否使用相同的副本集名称(rs0
  • 确保防火墙允许 MongoDB 端口通信(27017-27019)
  • 如果初始化错误,可删除数据目录后重试

3. 从节点状态为 STARTUP2RECOVERING

  • 等待数据同步完成(首次同步可能需要几分钟)
  • 检查网络连接和防火墙设置
  • 查看日志文件定位问题

4. Windows 服务启动失败

  • 检查配置文件路径是否正确(使用绝对路径,注意转义符 \\
  • 确保服务使用管理员权限运行
  • 查看系统事件日志(eventvwr.msc)中的错误信息

七、连接副本集的代码示例

Python(使用 pymongo)

from pymongo import MongoClient# 连接副本集(指定所有节点,驱动会自动发现主节点)
client = MongoClient(["localhost:27017","localhost:27018","localhost:27019"
], replicaSet="rs0")# 验证连接
db = client.testdb
print("主节点:", client.primary)
print("从节点:", client.secondaries)
print("数据:", list(db.test.find()))

Node.js(使用 mongoose)

const mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/testdb?replicaSet=rs0', {useNewUrlParser: true,useUnifiedTopology: true
})
.then(() => console.log('副本集连接成功'))
.catch(err => console.error('连接错误:', err));

八、总结

通过以上步骤,你已在 Windows 环境成功配置了 MongoDB 副本集。关键注意事项:

  • 数据目录和端口必须唯一
  • 所有节点使用相同的副本集名称
  • 确保防火墙允许节点间通信
  • 生产环境建议使用独立服务器部署节点,而非单机模拟
http://www.dtcms.com/a/462277.html

相关文章:

  • 物流网站有哪些网站被做301跳转了怎么办
  • shell脚本命令删除Zookeeper提供者服务中的指定IP节点
  • 六安网站制作公司价格龙口网络
  • Node.js使用Express框架解决中文乱码问题
  • 设计模式--桥接模式:解耦抽象与实现的灵活设计
  • 做竞价的网站怎么做网站数据库备份
  • 基于FireBeetle 2 ESP32-C5的智能植物光照系统——物联网农业实践
  • 天津住房与城乡建设厅网站首页包头学做网站
  • 【Frida Android】基础篇1:基础环境配置
  • YOLOv11安卓目标检测App完整开发指南
  • 鸿蒙NEXT实战:使用公共事件实现跨进程通信
  • npm升级提示error engine not compatible with your version of node/npm: npm@11.6.2
  • 我的网站为什么打不开怎么回事啊携程做旅游的网站
  • 网站推广的表现方式网站开发需要用到哪些设备
  • 缓存大杀器-redis
  • 网站建设管理方案网站开发与app开发的区别
  • 装修公司网站制作大数据营销成功案例
  • 【STM32】I2C通信—硬件外设
  • 脚手架学习
  • 做网站好还是做淘宝好现在手机网站用什么做的
  • 建设行业网站平台的瓶颈网站网页
  • 【Linux】线程概念与控制(2)
  • vue项目发布后图标乱码解决方案
  • 成都手机网站重庆本地建站
  • UI设计(二)赛博科技修仙通讯录——东方仙盟筑基期
  • 实时数仓历史数据优化
  • 网站建设在哪能看企业网站建立流程的第一步是什么
  • 告别手动配置:用 Terraform 定义你的 RustFS 存储帝国
  • 36.Linux Shell编程
  • AI智能体赋能社会科学研究领域之仿真:心智疆域的重塑与伦理韧性机制的建立