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

MongoDB-6.0.24 主从复制搭建和扩容缩容详解

目录

1 操作系统信息

2 MongoDB 集群架构图

3 MongoDB 软件安装及配置

4 初始化存储集群和配置

5 MongoDB主从复制集群测试

6 MongoDB运维管理

7 主从复制集群扩容一个secondary节点

8 主从复制集群缩容一个节点


1 操作系统信息


root@u24-mongo-70:~# cat /etc/issue
Ubuntu 24.04.2 LTS \n \l

2 MongoDB 集群架构图


IP                主机名           端口         角色
192.168.254.70  u24-mongo-70   27017        primary
192.168.254.71  u24-mongo-71   27017        secondary
192.168.254.72  u24-mongo-72   27017        secondary

3 MongoDB 软件安装及配置


源码编译安装参考:https://blog.csdn.net/zyb378747350/article/details/148307411


修改配置文件
root@u24-mongo-70:~# cat /usr/local/mongodb-6.0.24/conf/mongodb.conf 
#系统日志有关
systemLog:
  destination: file
  logAppend: true
  path: /mongodb/log/mongdb.log

#数据库存储有关
storage:
  dbPath: /mongodb/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      directoryForIndexes: true
      configString: cache_size=1G

#进程
processManagement:
  fork: true    #后台运行
  pidFilePath: /mongodb/log/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo


#网络
net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 1000
  unixDomainSocket:
    enabled: true
    pathPrefix: /mongodb/data
    filePermissions: 0700

#安全
security:
  keyFile: /usr/local/mongodb-6.0.24/auth/keyfile.key
  authorization: enabled

#主从配置
replication:
  replSetName: repl


4 初始化存储集群和配置


root@u24-mongo-70:~# mongosh --port=27017
#配置
admin>config={_id:"repl",members:[{_id:0,host:"192.168.254.70:27017"},{_id:1,host:"192.168.254.71:27017"},{_id:2,host:"192.168.254.72:27017"}]}
{
  _id: 'repl',
  members: [
    { _id: 0, host: '192.168.254.70:27017' },
    { _id: 1, host: '192.168.254.71:27017' },
    { _id: 2, host: '192.168.254.72:27017' }
  ]
}

#初始化
admin> rs.initiate(config)
{ ok: 1 }

备注:如果添加arbiter,要添加 { _id: 2, host: '192.168.254.72:27017',arbiterOnly: ture}

#开通账号和设置密码
repl [direct: primary] admin> use admin
repl [direct: primary] admin> db.createUser({
 user:"root",
 pwd:"root123456",
 roles:[{role:"root",db:"admin"}]
 })


#查看状态
repl [direct: primary] test> rs.status();


5 MongoDB主从复制集群测试


mongosh --port=27017

repl [primary] admin> use test
switched to db test
#插入
repl [primary] test> db.movies.insert([{"title":"Jaws","year":1975,"imdb_rating":8.1},{"title":"Batman","year":1989,"imdb_rating":7.6}]);

#查询
repl [direct: primary] test> db.movies.find();
[
  {
    _id: ObjectId('683ebfc0b128f3aee3c59f35'),
    title: 'Jaws',
    year: 1975,
    imdb_rating: 8.1
  },
  {
    _id: ObjectId('683ebfc0b128f3aee3c59f36'),
    title: 'Batman',
    year: 1989,
    imdb_rating: 7.6
  }
]


6 MongoDB运维管理


#查看主从复制集群的从库状态信息(延迟、成员)
repl [direct: primary] test> rs.printSecondaryReplicationInfo();
source: 192.168.254.71:27017
{
  syncedTo: 'Tue Jun 03 2025 18:05:18 GMT+0800 (China Standard Time)',
  replLag: '0 secs (0 hrs) behind the primary '
}
---
source: 192.168.254.72:27017
{
  syncedTo: 'Tue Jun 03 2025 18:05:18 GMT+0800 (China Standard Time)',
  replLag: '0 secs (0 hrs) behind the primary '
}


#查看主从复制集群oplog信息:
repl [direct: primary] test> rs.printReplicationInfo();
actual oplog size
'1456.2060546875 MB'
---
configured oplog size
'1456.2060546875 MB'
---
log length start to end
'2971 secs (0.83 hrs)'
---
oplog first event time
'Tue Jun 03 2025 17:17:47 GMT+0800 (China Standard Time)'
---
oplog last event time
'Tue Jun 03 2025 18:07:18 GMT+0800 (China Standard Time)'
---
now
'Tue Jun 03 2025 18:07:22 GMT+0800 (China Standard Time)'


#主从复制集群管理操作
rs.status()    #查看整体复制集群状态
rs.isMaster()  #查看当前是否是主节点

rs.add("ip:port")  #新增从节点
rs.addArb("ip:port")  #新增仲裁节点
rs.remove("ip:port")  #删除一个节点

rs.conf()  #查看配置

#修改配置
cfg=rs.conf()
cfg.members[1].priority=0
rs.reconfig(cfg)


7 主从复制集群扩容一个secondary节点


repl [direct: primary] admin>rs.add("192.168.254.73:27017");

8 主从复制集群缩容一个节点


repl [direct: primary] admin>rs.remove("192.168.254.73:27017");
 

http://www.xdnf.cn/news/10823.html

相关文章:

  • Java垃圾回收机制深度解析:从理论到实践的全方位指南
  • 【Typst】4.导入、包含和读取
  • 【算法设计与分析】实验——汽车加油问题, 删数问题(算法实现:代码,测试用例,结果分析,算法思路分析,总结)
  • 行列式详解:从定义到应用
  • 滚动部署详解
  • Qt踩坑记录
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API
  • 湖北理元理律师事务所:法律视角下的债务优化与生活平衡之道
  • 如何在 vue 中实现一个自定义拖拽的指令或插件
  • Spring @Autowired自动装配的实现机制
  • 手机邮箱APP操作
  • 风机巡检方案艰难之路
  • 全球高尔夫球场运营服务市场:现状、挑战与未来发展
  • Cursor使用最佳实践总结
  • 用 PyQt5 打造一个可视化 JSON 数据解析工具
  • 第二篇: 深入解析模型上下文协议(MCP):技术架构、核心组件与深远影响
  • SpringBoot2.3.1集成Knife4j接口文档
  • GirtHub访问不了解决方案
  • 【亲测有效】Mybatis-Plus中更新字段为null
  • android FragmentManager 删除所有Fragment 重建
  • EscapeX:去中心化游戏,开启极限娱乐新体验
  • Mybatis--创建mapper接口
  • IP话机和APP拨打电话的区别
  • Go语言学习-->从零开始搭建环境
  • FreeRTOS的简单介绍
  • 从0开始使用 Vue3 和 TypeScript 搭建项目详细教程
  • 1.Nodejs开发注意和前端区别
  • C语言:数据在内存中的存储
  • 关于list集合排序的常见方法
  • 《TCP/IP 详解 卷1:协议》第5章:Internet协议