千家信息网

如何进行MongoDB副本集搭建

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何进行MongoDB副本集搭建,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们之前的案例都是在单个节点上实现的,在生
千家信息网最后更新 2026年11月01日如何进行MongoDB副本集搭建

如何进行MongoDB副本集搭建,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

我们之前的案例都是在单个节点上实现的,在生产环境中这种做法是有风险的,如果服务宕机、崩溃或者硬盘坏了都会对公司业务造成损失,因此我们需要数据备份。在MongoDB中我们可以通过副本集来实现这一需求,MongoDB副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成,如果Primary崩溃了,会自动从Secondary中选择一个将其升级为新的主服务器。

单台服务器模拟

我们在实际的生产环境中肯定是多台服务器部署,但是在自己学习过程中,我们可以在一台服务器上来模拟这个环境,这样可以简化我们的操作,让小伙伴们快速上手。

首先我们在Linux根目录下创建/data/db目录作为我们的数据保存目录,然后执行如下命令启动一个mongo shell:

mongo --nodb

-nodb表示启动时不连接任何数据库,然后通过如下命令创建一个副本集:

replicaSet=new ReplSetTest({nodes:3})

在创建的日志中,我们可以看到三个实例的端口号,我这里分别是20000、20001、20002,此时我们的副本集创建好了,但是并未启动,接下来执行如下命令启动三个mongodb实例:

replicaSet.startSet()

再执行如下命令配置复制功能:

replicaSet.initiate()

这样环境基本就配好了,此时当前的shell不要关闭,我们重新打开一个Linux命令窗口,执行如下命令:

mongo 192.168.248.128:20000/sang_1

表示连接端口为20000的那个实例中的sang_1数据库,连接成功后,我们可以执行如下命令查看当前实例的身份,如下:

db.isMaster()

返回的数据很多,其中有一条是"ismaster" : true,表示这是一个主节点,此时我们再分别打开两个Linux窗口,分别执行如下两条命令,进入另外两个节点:

mongo 192.168.248.128:20001/sang_1mongo 192.168.248.128:20002/sang_1

连接成功之后,依然可以通过db.isMaster()命令来查看备份节点的身份,我们发现此时"ismaster" : false,表示这是一个备份节点,此时我们可以先做个简单的测试了,此时我在主节点(端口为20000)那个节点上写一个文档,写完之后,我们看看其他副本集成员上是否有我刚才的写的文档的副本,执行命令顺序如下:

主节点写入数据:

db.collect1.insert({x:"hahaha"})

任意一个副本节点,先执行如下命令表示可以从备份节点读取数据:

db.setSlaveOk()

然后再在备份节点中执行如下命令读取数据:

db.collect1.find()

此时,我们发现数据已经备份成功了。
如果此时我们尝试向备份节点中直接写入文档,会发现写入失败,这里需要注意备份节点中的数据都是备份来的,不可以直接写入,想写入,除非等它的身份转为主节点才可以。

此时,我们尝试通过如下命令关闭主节点:

use admindb.shutdownServer()

然后查看两个备份节点的db.isMaster(),发现有一个备份节点自动上位成为了主节点。

最后如果想关闭副本集,可以回到第一个shell命令行中,输入如下命令:

replicaSet.stopSet()

多台服务器模拟

OK,以上操作是我们单台服务器模拟搭建副本集,方便我们做实验,在生产环境中,我们可能有多个服务器,多台服务器又要如何搭建副本集呢?各位看官继续向下看。

首先准备好三台装好了MongoDB的服务器,地址分别如下:

192.168.248.128192.168.248.135192.168.248.136

修改每台服务器的配置文件mongodb.conf,添加replSet=rs,表示副本集的名称,修改后的配置文件内容如下:

dbpath=/opt/mongodb/dblogpath=/opt/mongodb/logs/mongodb.logport=27017fork=truereplSet=rs

修改完成之后,分别启动三台服务器上的MongoDB,启动成功之后,连接上任意一台的shell,连接成功之后,先定义配置文件,如下:

config={_id:"rs",members:[{_id:0,host:"192.168.248.128:27017"},{_id:1,host:"192.168.248.135:27017"},{_id:2,host:"192.168.248.136:27017"}]}

id后面跟着的是副本集的名称,也就是我们在mongodb.conf中定义的名称,后面三个是副本集的成员,定义好之后,再执行如下命令初始化副本集:

rs.initiate(config)

初始化成功之后,我们就可以通过rs.status()来查看副本集的状态,也可以看到每个服务器的角色,部分日志内容如下:

{"members" : [{        "_id" : 0,        "name" : "192.168.248.128:27017",        "health" : 1,        "state" : 1,        "stateStr" : "PRIMARY",},{        "_id" : 1,        "name" : "192.168.248.135:27017",        "health" : 1,        "state" : 2,        "stateStr" : "SECONDARY",        "syncingTo" : "192.168.248.128:27017"},{        "_id" : 2,        "name" : "192.168.248.136:27017",        "health" : 1,        "state" : 2,        "stateStr" : "SECONDARY",        "syncingTo" : "192.168.248.128:27017",}]}

我们可以看到每台服务器的角色,有primary,也有secondary,secondary上还注明了从哪个服务器上同步数据。所有这些工作做好之后,我们就可以按照上文介绍的方式来测一下这里的副本集了,测试工作我就不再重复介绍了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

节点 副本 命令 服务 服务器 备份 数据 成功 环境 实例 配置 三个 两个 内容 可以通过 名称 多台 文件 文档 身份 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 中关村互联网科技集团 厦门中拓互联网络科技有限公司 互联网最新的科技有限公司 互联网科技logo设计 互联网前沿科技 美国互联网前沿科技 安控科技rtu产品工业互联网 银川新华互联网科技职业技术培训学校图片 科技与互联网哪个更好 广州恒生互联网科技有限 中国科技创新与世界互联网大会 中天科技中国工业互联网 富国互联网科技002692 宁波跨境商互联网科技有限公司 吉林省码上互联网科技电话 银川新华互联网科技学校是国营吗 青岛易易互联网科技 互联网科技大会大佬 山东亿川互联网科技有限责任公司 互联网加科技 互联网科技公司简介 互联网科技行业发展 互联网保险科技创业 浙南科技城互联网大厦建设工程 雨阳互联网卡科技有限公司 互联网科技年终奖 银川新华互联网科技学校原画 广州三三互联网科技有限公司 恒生科技指数 中概互联网
0