MongoDB主从复制以及副本集的配置和使用
Posted 李晓娜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB主从复制以及副本集的配置和使用相关的知识,希望对你有一定的参考价值。
** Mongodb是支持数据之间的相互复制的,具体存在两种方式,一种就是主从复制,而另一种是副本集,两者之间既有相同点,也有不同点,我们将通过实例进行讲解。
主从复制
概念讲解
什么是主从复制?之前我们接触过mysql,知道数据库的双击备份,也就是主节点当掉之后,从节点可以接替主节点继续工作,这种模式在一定肯定是优于单节点,比单节点增加了一份可靠性。
也即是一主一从或者是一主多从。如下图所示:
在主从复制模式中,有一点我们必须明确:
在数据库的集群中,哪个是主服务器,在集群中主服务器只有一台。
从服务器必须知道自己的主服务器,也就是知道自己要读取数据的源头。
我们可以使用 –master指定主服务器,-slave指定从服务器以及-source指定数据源
对于像主从复制的这种,我们应该指定具体的ip和端口号,当然如果是在不同的机器上的话,是不需要的,但是在同一台机器上,使用不同的端口达到模拟多台机器的效果,故而我们是需要指定具体的端口号的
我们以在一台机器上为例,进行测试实验,因为有多台机器或者多个端口,为了便于启动和区分,我们采用脚本文件进行处理。
配置使用
首先:配置相关的脚本文件
不同于单台服务器的启动,对于一台机器上的多个端口,我们需要做的是指定相关的参数以及参数值
比如数据存储文件的路径,端口号,绑定的ip,以及服务器的类型是master还是slave,如果是slave需要指定source
封装为六个文件
其中mongodb~.conf中封装的是启动服务器的配置信息
这是主服务器的配置:
db 数据文件保存地址
port 服务器端口号
bind_ip 绑定的主机ip
master 标识是主服务器
从服务器的配置:
从服务器中多的是一个指定了数据源
那么如何启动服务和访问服务的客户端呢?
启动服务:
在mongodbServer27020中写上:
mongod –config 27020.conf #conf 程序配置文件
即可,同理从服务器只需要更改对于的conf配置文件即可
启动客户端:
mongo.exe 127.0.0.1:27020
启动服务,指定对应的启动的端口,当然从服务器只是需要更改端口号即可。
至此配置完毕,这样的好处是什么呢。不用对于每个机器的启动还得手动输入对于的端口号,指定ip以及相关的参数等等,省去了很多配置的麻烦。
启动相应的脚本
分别启动主服务器的服务端和客户端以及从服务器的服务端和客户端
从服务器的服务端
检测数据是否同步
此时我们使用客户端验证是否数据可以进行同步:
在主服务器的客户端创建一个数据库,创建一个集合,并且添加一条数据
在从服务器的客户端进行访问的时候出现:
“errmsg” : “not master and slaveOk=false”, “code” : 13435
首先这是正常的,因为SECONDARY是不允许读写的。
解决方案是在从服务器客户端执行:
db.getMongo().setSlaveOk()
此时我们再看是可以访问的
当Mongodb上的数据库内没有数据存储的时候,此时使用show dbs命令是不显示数据库的名字的。当我们插入了一条数据,数据库中有内容的时候,此时才会出现数据库的名字,详见上图
此时我们发现在主服务器的客户端执行的插入操作,在从服务器的客户端也发现了插入的数据,这样就实现了主从同步
此外需要我们注意的是:我们是无法在slave进行数据插入的,当我们试图插入的时候,此时提示:
至此主从复制完成
但是主从复制存在什么缺点呢?主节点挂了之后是无法自动切换的,只能是手动切换
,并且主节点的写压力也会比较大,从节点上的数据每次都是从主节点上面的全量拷贝,读压力大等。至此我们再来看一下另一种方式:副本集。
**
以上是关于MongoDB主从复制以及副本集的配置和使用的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB——MongoDB副本集(Replica Sets)
MongoDB——MongoDB副本集(Replica Sets)