[Mongodb 5.0]Replica Set副本集PSS模式搭建

前言

我们知道关于Mongodb的副本集有两种:Primary-Secondary-Arbiter(俗称PSA)和Primary-Secondary-Secondary(俗称:PSS),关于两者的含义概念这里不在多余介绍,可自行百度。此篇文章主要介绍PSS模式的副本集搭建。

所谓副本集:就是用几个其他的机器(Secondary),来备份某个特定机器(Primary)上的数据

如果让mongodb变为副本集的模式:简单对配置文件配置一下,然后照常启动一下mongodb就行了,并不需要其他特殊的设置。

前期准备

  • 关闭防火墙
    查看是否关闭:systemctl status firewalld
    关闭防火墙:systemctl stop firewalld
    (不关的话,rs.initiate时会 报replSetInitiate quorum check failed because not all proposed set members responded affirmatively错误)
  • 配置节点,这里我通过vmware虚拟出3个centos7作为3个节点,如下:
    PSS模式(还有PSA模式)地址别名
    Primary192.168.40.128节点1
    Secondary192.168.40.129节点2
    Secondary192.168.40.130节点3

副本集搭建
官网:Deploy a Replica Set — MongoDB Manual

第一步:修改配置文件(默认位置/etc/mongod.conf),设置副本集的一些配置,三个节点都要设置

replication:
   replSetName: "rs0" #3个节点服务器上配置文件中设置的这个值必须是相同的,名字随意
net:
   bindIp: 0.0.0.0 # 用0.0.0.0是因为用ip时总是报错,就用万能的0.0.0.0了

 第二步:启动mongodb(三个节点都要这么启动)

mongod -f /etc/mongod.conf  #通过指定配置文件方式启动

以上两步是配置启动mongodb副本集的方式之一(我建议的方式),另外还有一种替换上面两步的 方式,就是直接在启动mongodb的时候,通过参数直接配置副本集,如下(如果没兴趣可跳过直接到第三步):

mongod --fork --replSet "rs0" --bind_ip 192.168.40.128 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log

这种方式我再使用时总是出现意想不到的问题,所以我放弃了这种方式,大家可以自己选择。


第三步:初始化副本集(在Primary上进行这一步,其他2个节点不需要操作)

执行下面2句命令:

mongosh
rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "192.168.40.128:27017" },
      { _id: 1, host: "192.168.40.129:27017" },
      { _id: 2, host: "192.168.40.130:27017" }
   ]
})

语句执行完成后,出现下面如图内容,就说明副本集已经成功了
 注意命令行的变化,默认通过mongosh连接后命令行显示的是

 ,当副本集方式启动后,会在开头多了一个rs0[direct:other]的前缀(这个rs0就是咱在配置文件配置的那个名字)。

 提示:到这里,副本集就算是已经搭建成功了,可以通过rs.status()查看

第四步:验证副本集是否成功
首先,在Primary节点上创建一个Collection(所谓的表),如下图:

 图中命令如下:

 db.rs_test.insertOne({"name":"1"})

然后,我们在其他两个Secondary节点上通过show tables命令来查看节点上的Collection,如下图:

如果能查看到Primary节点上添加的rs_test,那么就说明我们的副本集搭建成功了。

第五步:解决从Secondary节点无法读取数据的问题

在第四步中,我们已经通过show tables命令可以看到在Primary上创建的Collection了,但是如果你想通过find()去读取它里面的数据是不行的,会报错误,如下图:

这是因为默认只能从Primary上读取数据,不能从Secondary上读取数据。如果想从Secondary上也可以读取数据,需要在每个Secondary节点上执行如下命令:

db.getMongo().setReadPref('secondary')
// 参考地址:https://www.mongodb.com/docs/v4.4/reference/method/Mongo.setReadPref/

执行这个命令后 ,就可以读取数据了,如下图:

 

到此,一个PSS模式的副本集配置就算完成了。关于PSA模式的有机会在介绍。
最后,因为在整个配置过程中,会经常用到一些例如启动和关闭mongodb,查看mongodb是否启动的命令,为了方便期间,我再最后给大家罗列一下,如下:

命令作用
ps -ef | grep mongod查看mongogdb是否成功启动
use admin
db.shutdownServer() 
通过mongosh连上mongodb后的关闭mongodb进程的方式
mongod --shutdown直接通过mongod关闭mongodb服务【推荐方式】
service mongod stop通过服务方式关闭mongodb服务(尽量不要用这种服务的方式停止mongodb,容易导致启动mongodb时出错)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork 启动mongodb
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown关闭mongodb,与上面方式配对使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值