Mongodb主從模式篇

主從模式架構(gòu)圖:

肇慶ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

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

 

參數(shù)說明:

mongod為mongoDB的server程序,啟動(dòng)參數(shù)使用的主要有如下幾個(gè)

--fork fork出一個(gè)server端的daemon進(jìn)程

--port server監(jiān)聽端口

--dbpath 數(shù)據(jù)文件目錄

--logpath 日志文件路徑

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

 

mongod在主從情況下可以設(shè)置的參數(shù)有:

--master master模式

--salve salve模式

--source salve模式下指定master<server:port>

--only 只復(fù)制某一個(gè)數(shù)據(jù)庫(kù)

--salvedelay 從庫(kù)從主庫(kù)中同步延時(shí)

--autoresync 假如從庫(kù)數(shù)據(jù)不同步,自動(dòng)同步

 

主從配置完畢后測(cè)試:

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();

有數(shù)據(jù),說明同步成功

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

 

主從相關(guān)命令:

db.isMaster():主從都可執(zhí)行,用這個(gè)命令判斷是不是master

db.getReplicationInfo():主上執(zhí)行,獲取主從信息

db.printReplicationInfo():主從都可執(zhí)行,獲取主從信息

db.printSlaveReplicationInfo();:從庫(kù)執(zhí)行,查看主從延時(shí)

 

同步失敗處理方法:

如果同步失敗,可使用如下命令同步所有數(shù)據(jù):

同步出現(xiàn)問題,日志會(huì)有如下記錄

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

都是每5秒重試,一直在重試,那么如果要解決只能執(zhí)行下面的命令全部同步一下

Use admin

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

也可在啟動(dòng)從庫(kù)時(shí)添加--autoresync參數(shù)

 

同步原理:

同步就是master上把對(duì)數(shù)據(jù)的更改操作記錄到oplog中,然后slave抓取master的oplog執(zhí)行。從這點(diǎn)看Oplog的功能和MySQL的mysql-bin.的功能類似。Mysql-bin以二進(jìn)制日志的形式存在,但是oplog是以一個(gè)mongodb的表的形式存在,該表在local庫(kù)表名為oplog.$main,該表為循環(huán)寫入形,所以不用定時(shí)清理。

 

修改oplog大?。?/strong>

我們?cè)谑状螁?dòng)mongodb服務(wù)的時(shí)候如果沒有設(shè)置oplog的大小,那么它的默認(rèn)值將是所在硬盤的5%,那么如果我們想要改變大小呢,必須重啟,然后在啟動(dòng)的時(shí)候設(shè)置oplogsize,不過還有個(gè)小問題,因?yàn)橹暗膐plog已經(jīng)存在了,所以修改完大小啟動(dòng)會(huì)報(bào)錯(cuò),Tue Feb 19 15:43:19[initandlisten] cmdline oplogsize (10) different than existing (1779),解決方法就是將mongodb數(shù)據(jù)目錄下的local.*刪除,參見:http://api.mongodb.org/wiki/current/Halted%20Replication.html

由于刪除后oplog是重建的,slave的時(shí)間點(diǎn)信息比master上oplog的開始時(shí)間點(diǎn)要小,所以從庫(kù)只能做全同步才能繼續(xù)同步。但是有個(gè)問題,如果主庫(kù)數(shù)據(jù)非常多的話,做一次全同步是一件非常耗時(shí)的事,況且數(shù)據(jù)也沒有丟失。那么現(xiàn)在有個(gè)小技巧:

  1. 關(guān)閉slave的mongo服務(wù)

  2. Master上在我們刪除local.*之后,不要急著啟動(dòng)服務(wù),先用linux的date命令更改系統(tǒng)時(shí)間,讓時(shí)間小于slave上同步的最后時(shí)間,也就是slave執(zhí)行db.printSlaveReplicationInfo()看到的時(shí)間

  3. 然后啟動(dòng)主庫(kù)和從庫(kù)方能繼續(xù)同步

本文標(biāo)題:Mongodb主從模式篇
新聞來(lái)源:http://muchs.cn/article32/gdshpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名云服務(wù)器、面包屑導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)