Mongodb主从模式篇
admin
2023-04-11 17:23:51
0

主从模式架构图:

Mongodb主从模式篇

主从配置安装:

10.10.20.160(master)-->10.10.20.161(slave)

Master

tar zxvf mongodb-linux-x86_64-2.2.2.tgz

ln -s mongodb-linux-x86_64-2.2.2 mongodb

mkdir -p /u01/mongodata/db/geomaster/

mkdir -p /u01/mongodata/log/

/usr/local/mongodb/bin/mongod --fork --port40000 --dbpath /u01/mongodata/db/geomaster/ --logpath/u01/mongodata/log/geomaster.log --logappend –master

 

Slave

tar zxvf mongodb-linux-x86_64-2.2.2.tgz

ln -s mongodb-linux-x86_64-2.2.2 mongodb

mkdir -p /u01/mongodata/db/geomaster/

mkdir -p /u01/mongodata/log/

/usr/local/mongodb/bin/mongod --fork --port40000 --dbpath /u01/mongodata/db/geoslave/ --logpath /u01/mongodata/log/geosalve.log–logappend --slave --source 10.10.20.160:40000

 

参数说明:

mongodmongoDBserver程序,启动参数使用的主要有如下几个

--fork fork出一个server端的daemon进程

--port server监听端口

--dbpath 数据文件目录

--logpath 日志文件路径

--logappend 日志追加到日志文件中,而不是覆盖写入

 

mongod在主从情况下可以设置的参数有:

--master master模式

--salve salve模式

--source salve模式下指定master

--only 只复制某一个数据库

--salvedelay 从库从主库中同步延时

--autoresync 假如从库数据不同步,自动同步

 

主从配置完毕后测试:

Master

/usr/local/mongodb/bin/mongo -port 40000

use test;

db.createCollection("table1");

db.test.table1.insert({tag:"test"});

db.test.table1.find();

 

slave

/usr/local/mongodb/bin/mongo -port 40000

db.test.table1.find();

有数据,说明同步成功

同步后在master上用db.currentOp()也能看到slave的线程

 

主从相关命令:

db.isMaster():主从都可执行,用这个命令判断是不是master

db.getReplicationInfo():主上执行,获取主从信息

db.printReplicationInfo():主从都可执行,获取主从信息

db.printSlaveReplicationInfo();:从库执行,查看主从延时

 

同步失败处理方法:

如果同步失败,可使用如下命令同步所有数据:

同步出现问题,日志会有如下记录

TueFeb 19 16:31:45 [replslave] all sources dead: data too stale haltedreplication, sleeping for 5 seconds

都是每5秒重试,一直在重试,那么如果要解决只能执行下面的命令全部同步一下

Use admin

db.runCommand ( { "resync": 1 } )

也可在启动从库时添加--autoresync参数

 

同步原理:

同步就是master上把对数据的更改操作记录到oplog中,然后slave抓取masteroplog执行。从这点看Oplog的功能和mysqlmysql-bin.的功能类似。Mysql-bin以二进制日志的形式存在,但是oplog是以一个mongodb的表的形式存在,该表在local库表名为oplog.$main,该表为循环写入形,所以不用定时清理。

 

修改oplog大小:

我们在首次启动mongodb服务的时候如果没有设置oplog的大小,那么它的默认值将是所在硬盘的5%,那么如果我们想要改变大小呢,必须重启,然后在启动的时候设置oplogsize,不过还有个小问题,因为之前的oplog已经存在了,所以修改完大小启动会报错,Tue Feb 19 15:43:19[initandlisten] cmdline oplogsize (10) different than existing (1779),解决方法就是将mongodb数据目录下的local.*删除,参见:http://api.mongodb.org/wiki/current/Halted%20Replication.html

由于删除后oplog是重建的,slave的时间点信息比masteroplog的开始时间点要小,所以从库只能做全同步才能继续同步。但是有个问题,如果主库数据非常多的话,做一次全同步是一件非常耗时的事,况且数据也没有丢失。那么现在有个小技巧:

  1. 关闭slavemongo服务

  2. Master上在我们删除local.*之后,不要急着启动服务,先用linuxdate命令更改系统时间,让时间小于slave上同步的最后时间,也就是slave执行db.printSlaveReplicationInfo()看到的时间

  3. 然后启动主库和从库方能继续同步

相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...