【手把手】教你搭建MongoDB副本集

导读:本篇文章讲解 【手把手】教你搭建MongoDB副本集,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

0、安装前环境准备

① 本篇是基于Linux操作系统中的安装,副本集的演示基于1主2副,故先准备3个已经安装好MongoDB服务的Linux操作系统(MongoDB在Linux系统下的安装可以参考之前我写的这篇教程:【软件安装】MongoDB在Linux系统中的安装_FeenixOne的博客-CSDN博客0、安装前环境准备① 本篇是基于Linux操作系统中的安装,故先准备一个干净的Linux操作系统。本文中所有的操作基于CentOS8进行安装演示;② 确保Linux系统中已经安装[wget],用于下载MongoDB软件。如果没有安装,可以使用[yum install wget -y]进行安装;③ 接下来的演示文本中,红色字体为操作步骤,黑色字体为解释说明。1、进入到本地MongoDB目录,从官网下载MongoDB压缩包到本地cd /usr/local/mkdir sourcecd【手把手】教你搭建MongoDB副本集https://blog.csdn.net/FeenixOne/article/details/120527835只要你跟着我教程里的步骤去做,就一定能够安装好MongoDB服务)。本文中所有的操作基于CentOS8进行安装演示;

③ 接下来的演示文本中,红色字体为操作步骤,黑色字体为解释说明。

1、修改MongoDB配置文件

【手把手】教你搭建MongoDB副本集

# mongod.conf
  
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb

# where and how to store data
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
# engine:
# mmapv1:
# wiredTiger:

# how the process run 
processManagement:
  fork: true
# pidFilePath:
# timeZoneInfo:

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

replication:
  replSetName: rs0

# security:

# operationProfiling:

# sharding:

# Enterprise-Only Options:

# auditLog:

# snmp:

# mp:

这里有两点事项需要注意:

① replication: replSetName: rs0,这个参数开启MongoBD的副本集,并且同一副本集中的 replSetName 值必须一致;

② bindIp 最好设置成0.0.0.0,一般副本集搭建完以后难免会有非本机的客户端连接过来。

2、启动MongoDB服务

service mongod start

【手把手】教你搭建MongoDB副本集【手把手】教你搭建MongoDB副本集【手把手】教你搭建MongoDB副本集

3、启动MongoDB客户端

mongo –port 27017

【手把手】教你搭建MongoDB副本集

 4、初始化MongoDB副本集

将单机版的MongoDB服务变为集群需要进行初始化,告诉MongoDB服务器不再是单机了,而是以副本集的形式运行:

rs.initiate({_id:”rs0″, 
                 members:[{_id:0, host:”192.168.159.131:27017″}, 
                                  {_id:1, host:”192.168.159.132:27017″}, 
                                  {_id:2, host:”192.168.159.133:27017″}]})

【手把手】教你搭建MongoDB副本集

显示 { “ok” : 1 } 以后,执行 rs.status() 查看副本集状态

【手把手】教你搭建MongoDB副本集

【手把手】教你搭建MongoDB副本集

注:在MongoDB4包括以前的版本中,可以直接执行rs.initiate()命令无参初始化副本集,初始化完成之后再通过rs.add()命令逐一添加各成员进副本集。但是从MongoDB5开始,对副本集的命令有了不一样的要求,初始化副本集的时候需要在rs.initiate()命令中以参数形式指定好副本集中的各成员,如果使用无参的命令直接初始化副本集,再使用rs.add() 添加成员,日志会打印【Did not find local replica set configuration document at startup】错误信息,并且查看副本集状态时,会发现add进来的成员stateStr值是startup,并一直不会改变。这个坑极其隐蔽,而且一旦踩了很难发现陷进去了,因为命令上并不会给你报任何的错误。

5、验证MongoBD副本集是否搭建成功

在 PRIMARY 中插入几条数据:

【手把手】教你搭建MongoDB副本集

启动另外两台 SECONDARY 客户端:

mongo –port 27017

【手把手】教你搭建MongoDB副本集

【手把手】教你搭建MongoDB副本集

可以看到命令行直接就提示本机是副本集中的 SECONDARY,同意副本集中的数据是同步一致的,查询一下刚刚 PRIMARY 中插入的数据

【手把手】教你搭建MongoDB副本集

 副本集都已经搭建成功了,为什么查询不到数据呢?难道副本集搭建失败?别慌张,这是MongoDB副本集的默认设置,默认副本集的 SECONDARY 不可以读取数据,执行命令:

rs.secondaryOk() 

就可以在 SECONDARY 中查询副本集中的数据

【手把手】教你搭建MongoDB副本集

注:MongoDB4及以前使用的命令是 rs.slaveOk(),MongoDB5以后改成了 rs.secondaryOk(),不过这个命令的改动问题不大,因为执行 rs.slaveOk() 之后会自动提示已被废弃。

读可以读,那么可以写入数据吗?

【手把手】教你搭建MongoDB副本集

依然是不可以的,其实MongoDB官方建议副本集中的 SECONDARY 不要用来写入数据,只用来查询数据即可。PRIMARY 负责写入,SECONDARY 负责查询,这样才能最大化分摊整个副本集的流量压力。

关闭 PRIMARY MongoDB服务,模拟 PRIMARY 宕机:

【手把手】教你搭建MongoDB副本集

 其中一台 SECONDARY 立马切换到 PRIMARY 接替主机的位置。

而值得注意的是,当原来的 PRIMARY 再次启动后,就会由 PRIMARY 降级为 SECONDARY,并且此时的 SECONDARY 是无法查询数据的,必须再次手动执行 rs.secondaryOk() ,从新的 PRIMARY 那边同步最新的数据过来后,方可执行副本集数据的查询

【手把手】教你搭建MongoDB副本集

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111939.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!