主从模式架构图:
创新互联基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业遂宁服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。主从配置安装:
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
参数说明:
mongod为mongoDB的server程序,启动参数使用的主要有如下几个
--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抓取master的oplog执行。从这点看Oplog的功能和mysql的mysql-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的时间点信息比master上oplog的开始时间点要小,所以从库只能做全同步才能继续同步。但是有个问题,如果主库数据非常多的话,做一次全同步是一件非常耗时的事,况且数据也没有丢失。那么现在有个小技巧:
关闭slave的mongo服务
Master上在我们删除local.*之后,不要急着启动服务,先用linux的date命令更改系统时间,让时间小于slave上同步的最后时间,也就是slave执行db.printSlaveReplicationInfo()看到的时间
然后启动主库和从库方能继续同步
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:Mongodb主从模式篇-创新互联
地址分享:http://lswzjz.com/article/gecgj.html