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

目录

[1 操作系统信息](#1 操作系统信息)

[2 MongoDB 集群架构图](#2 MongoDB 集群架构图)

[3 MongoDB 软件安装及配置](#3 MongoDB 软件安装及配置)

[4 初始化存储集群和配置](#4 初始化存储集群和配置)

[5 MongoDB主从复制集群测试](#5 MongoDB主从复制集群测试)

[6 MongoDB运维管理](#6 MongoDB运维管理)

[7 主从复制集群扩容一个secondary节点](#7 主从复制集群扩容一个secondary节点)

[8 主从复制集群缩容一个节点](#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");

相关推荐
晚霞的不甘38 分钟前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位1 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
海奥华21 小时前
mysql索引
数据库·mysql
2601_949593652 小时前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
javachen__2 小时前
mysql新老项目版本选择
数据库·mysql
Dxy12393102162 小时前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light2 小时前
MySQL相关问题
数据库·mysql
蜡笔小炘3 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长3 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
Re.不晚3 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构