您的位置 首页 > 数码极客

『mongo主从如何同步』mongo 主从复制!

Linux下mongodb数据库主从复制配置

Mongodb的三种集群搭建的方式:

Master-Slaver:主从[目前被副本集取代]。

Replica Set:副本集。

Sharding:切片。

Mongodb单实例缺点:

适合简易开发时使用,生产使用不行,因为单节点挂掉整个数据业务全挂。

主从复制:

MongoDB常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活。可用于备份,故障恢复等等。

最基本的设置方式是建立一个主节点和一个/多个从节点,当主节点挂掉了后从节点可以接替主机继续服务。

主从复制缺点[见文章结尾]

原理:

主从结构中,主节点的操作记录oplog[operation log]。

oplog存储在一个系统数据库local的集合oplog.$main中,这个集合的每个文档都代表主节点上执行的一个操作。

从服务器会定期从主服务器中获取oplog记录,然后在本机上执行。

对于存储oplog的集合,MongoDB采用的是固定集合,随着操作过多,新的操作会覆盖旧的操作。

准备:

192.168.102.111 master

192.168.102.112 slave

关于mongodb的安装详见:

第四篇:linux系统中mongodb的配置

提示:

建议两台机器都关闭防火墙

1、 修改master配置文件

192.168.102.111 master

vi ~

port=27017

bind_ip=192.168.102.111

dbpath=/home/odysee

logpath=/home/odysee

logappend=true

journal=true

fork=true

#主服务器

master=true

#同步复制的日志大小设置,单位MB

oplogSize=2048

2、修改slave配置文件

192.168.102.112 slave

vi ~

port=27017

bind_ip=192.168.102.112

dbpath=/home/odysee

logpath=/home/odysee

logappend=true

journal=true

fork=true

#主数据库端口

source=192.168.102.111:27017

#从服务器

slave=true

#设置从库同步主库的延迟时间,秒

slavedelay=10

#主从库数据不一致时,自动同步

autoresync=true

3、开启master的mongod服务

bin/mongod --config ~

开启mongo客户端

bin/mongo 192.168.102.111

4、 开启slave的mongod服务

bin/mongod --config ~

开启mongo客户端

bin/mongo 192.168.102.112

5、 测试数据同步

在master中新建demo库插入测试数据

> use demo;

switched to db demo

> db.demo.insert({"name":"odysee1"})

WriteResult({ "nInserted" : 1 })

> db.demo.insert({"name":"odysee2"})

WriteResult({ "nInserted" : 1 })

> db.demo.insert({"name":"odysee3"})

WriteResult({ "nInserted" : 1 })

> db.demo.find()

{ "_id" : ObjectId("5c37b2780ecf620bd11f14c8"), "name" : "odysee1" }

{ "_id" : ObjectId("5c37b27b0ecf620bd11f14c9"), "name" : "odysee2" }

{ "_id" : ObjectId("5c37b27e0ecf620bd11f14ca"), "name" : "odysee3" }

在slave中查看

Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not mast

er" }

解释:

slave[默认是不可读]是不允许读写的,可以通过在连接时指定或者在主库指定slaveOk,由slave来分担读的压力。

解决方案:

在slave节点数据库中执行rs.slaveOk()命令即可

执行rs.slaveOk()

> rs.slaveOk()

> show dbs

demo 0.078GB

local 0.078GB

> use demo

switched to db demo

> db.demo.find()

{ "_id" : ObjectId("5c38f77633430bbc2fe4fd82"), "name" : "odysee1" }

{ "_id" : ObjectId("5c38f77933430bbc2fe4fd83"), "name" : "odysee2" }

{ "_id" : ObjectId("5c38f77c33430bbc2fe4fd84"), "name" : "odysee3" }

6、 补充

主从复制的其他参数:

--only 从节点指定复制某个数据库,默认是复制全部数据库

--fastsync 从节点以主数据库的节点快照为节点启动从数据库

从节点的local数据库中,存在一个集合sources。

这个集合保存了这个服务器的主服务器的信息。

> rs.slaveOk()

> show dbs

demo 0.078GB

local 0.078GB

> use local

switched to db local

> db.()

{ "_id" : ObjectId("5c38f7396c5e678d05336ca9"), "host" : "192.168.102.111:27017", "source" : "main", "syncedTo" : Timestamp(15472

38614, 1) }

测试完成

缺点:

主节点挂了不能自动切换连接到从节点,需要手工切换,比较致命。

目前主从复制已经被副本集所代替,关于副本集的优缺点我们下篇分晓。

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“mongo主从如何同步,mongo,主从复制,mongo主从模式,mongo主从同步原理,mongo主从切换”边界阅读