亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

MongoDB的主從復(fù)制及副本集的replSet配置教程

2020-10-29 18:49:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

復(fù)制
MongoDB的復(fù)制功能很重要,尤其是現(xiàn)在的存儲(chǔ)引擎還不支持單擊持久性。不僅可以用復(fù)制來(lái)應(yīng)對(duì)故障切換,數(shù)據(jù)集成,還可以做讀擴(kuò)展,熱備份或作為離線批處理的數(shù)據(jù)源。

1.主從復(fù)制
主從復(fù)制是MongoDB最常用的復(fù)制方式??捎糜趥浞?,故障恢復(fù)和讀擴(kuò)展等。
基本就是搭建一個(gè)主節(jié)點(diǎn)和一個(gè)或多個(gè)從節(jié)點(diǎn),每個(gè)從節(jié)點(diǎn)需要知道主節(jié)點(diǎn)的地址。運(yùn)行mongod --master啟動(dòng)主服務(wù)器。運(yùn)行mongod --slave --source master_address啟動(dòng)從服務(wù)器。
[root@test02 ~]# mongod --fork --dbpath /data/node2 --logpath /data/mongodb.log --port 10001 --logappend --master
從節(jié)點(diǎn)選擇不同的目錄和端口,并且用--source為從節(jié)點(diǎn)指明主節(jié)點(diǎn)的地址。
[root@test02 ~]# mongod --fork --dbpath /data/node3 --logpath /data/mongodb2.log --port 10002 --logappend --slave --source localhost:10001
所有的從節(jié)點(diǎn)都是從主節(jié)點(diǎn)復(fù)制信息,目前還不能從節(jié)點(diǎn)到從節(jié)點(diǎn)復(fù)制機(jī)制,原因是從節(jié)點(diǎn)沒(méi)有自己的oplog。
一個(gè)集群中從節(jié)點(diǎn)沒(méi)有明確的限制,但是多個(gè)節(jié)點(diǎn)對(duì)單點(diǎn)主機(jī)發(fā)起的查詢也是吃不消的,不超過(guò)12個(gè)節(jié)點(diǎn)的集群可以良好運(yùn)轉(zhuǎn)。

1.1 選項(xiàng)
(1)--only
在從節(jié)點(diǎn)上指定只復(fù)制特定某個(gè)數(shù)據(jù)庫(kù)(默認(rèn)復(fù)制所有數(shù)據(jù)庫(kù))。
(2)--slavedelay
用在從節(jié)點(diǎn)上,當(dāng)應(yīng)用主節(jié)點(diǎn)的操作時(shí)增加延遲。這樣可以輕松設(shè)置延時(shí)從節(jié)點(diǎn)了,這樣的節(jié)點(diǎn)對(duì)于用戶無(wú)意間刪除重要數(shù)據(jù)或插入垃圾數(shù)據(jù)起到防護(hù)作用。通過(guò)延緩操作,可以有個(gè)恢復(fù)時(shí)間差。
(3)--fastsync
以主節(jié)點(diǎn)的數(shù)據(jù)快照為基礎(chǔ)啟動(dòng)從節(jié)點(diǎn)。如果數(shù)據(jù)目錄一開(kāi)始時(shí)主節(jié)點(diǎn)的數(shù)據(jù)快照,從節(jié)點(diǎn)用這個(gè)選項(xiàng)啟動(dòng)要比做完整同步塊很多。
(4)--autoresync
如果主節(jié)點(diǎn)和從節(jié)點(diǎn)不同步,可以自動(dòng)同步了。
(5)--oplogsuze
主節(jié)點(diǎn)oplog的大小(單位是MB)。

1.2 添加以及刪除源

cat >> /etc/hosts <<EOF192.168.27.212 test02192.168.27.213 test03192.168.27.214 test01EOF

啟動(dòng)從節(jié)點(diǎn)時(shí)可以用--source指定主節(jié)點(diǎn),也可以在shell中配置這個(gè)源。
[root@test02 ~]# mongod --fork --dbpath /data/node3 --logpath /data/mongodb.log --port 10003 --logappend --slave
將192.168.27.212:10001作為源插入到從節(jié)點(diǎn)上。

> db.sources.insert({ "host" : "192.168.27.212:10001"});

立即查詢會(huì)得到插入的文檔:

> use localswitched to db local> db.sources.find();{ "_id" : ObjectId("530be5049ab1ad709cfe66b7"), "host" : "test02:10001" 

當(dāng)同步完成后,文檔更新:

> db.sources.find();{ "_id" : ObjectId("530bf0ab058022d91574c79c"), "host" : "test02:10001", "source" : "main", "syncedTo" : Timestamp(1393291443, 1), "dbsNextPass" : { "foo" : true, "test" : true } }

2.副本集
副本集就是有自動(dòng)故障恢復(fù)功能的主從集群。主從集群和副本集最為明顯的區(qū)別就是副本集沒(méi)有固定的主節(jié)點(diǎn):整個(gè)集群會(huì)選舉出一個(gè)主節(jié)點(diǎn),當(dāng)其不能工作時(shí),則變更到其它節(jié)點(diǎn)。副本集總會(huì)有一個(gè)活躍節(jié)點(diǎn)和一個(gè)或多個(gè)備份節(jié)點(diǎn)。
副本集最好的優(yōu)點(diǎn)就是全自動(dòng)化的。

mongod --fork --dbpath /data/node2 --logpath /data/mongodb.log --port 10001 --logappend --replSet myrepl/test03:10002mongod --fork --dbpath /data/node3 --logpath /data/mongodb.log --port 10002 --logappend --replSet myrepl/test02:10001

副本集的亮點(diǎn)是自檢測(cè)功能:在其中指定單臺(tái)服務(wù)器后,MongoDB會(huì)自動(dòng)搜索并連接其余的節(jié)點(diǎn)。
啟動(dòng)幾臺(tái)服務(wù)器后,日志會(huì)告訴你副本集沒(méi)有初始化。需要在shell中初始化副本集。
連接任意一個(gè)服務(wù)器。初始化命令只執(zhí)行一次:

> db.runCommand({"replSetInitiate" : {... "_id" : "myrepl",... "members" : [... {...  "_id" : 1,...  "host" : "test02:10001"... },... {...  "_id" : 2,...  "host" : "test03:10002"... }... ]}}){  "startupStatus" : 4,  "info" : "myrepl/test03:10002",  "ok" : 0,  "errmsg" : "all members and seeds must be reachable to initiate set"}

(1)"_id" : "myrepl"     副本集的名稱
(2)"members" : [...]    副本集中的服務(wù)器列表,每個(gè)服務(wù)器至少兩個(gè)鍵。
(3)"_id" : N            每個(gè)服務(wù)器唯一的ID
(4)"host" : hostname    這個(gè)鍵指定服務(wù)器主機(jī)
或者:

config = {"_id" : "myrepl",    "members" : [   {"_id" : 0, "host" : "test02:10001"},   {"_id" : 1, "host" : "test03:10002"}  ]}rs.initiate(config);rs.status();myrepl:SECONDARY> rs.status();{  "set" : "myrepl",  "date" : ISODate("2014-02-25T02:17:39Z"),  "myState" : 2,  "syncingTo" : "test03:10002",  "members" : [    {     "_id" : 0,     "name" : "test02:10001",     "health" : 1,     "state" : 2,     "stateStr" : "SECONDARY",     "uptime" : 968,     "optime" : Timestamp(1393294457, 1),     "optimeDate" : ISODate("2014-02-25T02:14:17Z"),     "errmsg" : "syncing to: test03:10002",     "self" : true    },    {     "_id" : 1,     "name" : "test03:10002",     "health" : 1,     "state" : 1,     "stateStr" : "PRIMARY",     "uptime" : 48,     "optime" : Timestamp(1393294457, 1),     "optimeDate" : ISODate("2014-02-25T02:14:17Z"),     "lastHeartbeat" : ISODate("2014-02-25T02:17:38Z"),     "lastHeartbeatRecv" : ISODate("2014-02-25T02:17:39Z"),     "pingMs" : 1,     "syncingTo" : "test02:10001"    }  ],  "ok" : 1}

如果這時(shí)候把primary節(jié)點(diǎn)停掉,在secondary節(jié)點(diǎn)執(zhí)行寫操作,就會(huì)發(fā)生如下錯(cuò)誤提示:

myrepl:SECONDARY> db.test.insert({name : "baobao"});
not master

如果只有2臺(tái)Mongodb,配置復(fù)制集群還不夠安全,需要1個(gè)外在角色調(diào)整各個(gè)節(jié)點(diǎn)的角色。
(1)standard:常規(guī)節(jié)點(diǎn),存儲(chǔ)一份完整的數(shù)據(jù)副本,參與選舉投票,可能稱為活躍節(jié)點(diǎn)。
(2)passive:存儲(chǔ)完整的數(shù)據(jù)副本,參與投票,不能成為活躍節(jié)點(diǎn)。
(3)arbiter:仲裁者只負(fù)責(zé)投票,不接受復(fù)制數(shù)據(jù),也不能成為活躍節(jié)點(diǎn)。
當(dāng)Primary宕掉后,可以通過(guò)Arbiter在Secodarys中選舉一個(gè)Primary節(jié)點(diǎn),避免單點(diǎn)故障。
可以增加一個(gè)仲裁節(jié)點(diǎn),只負(fù)責(zé)仲裁,不做數(shù)據(jù)存儲(chǔ)。

mongod --fork --dbpath /data/node1 --logpath /data/mongodb.log --port 10003 --logappend --replSet myrepl/test02:10001,test03:10002myrepl:PRIMARY> rs.addArb("test01:10003");{ "ok" : 1 }

查看各節(jié)點(diǎn)的狀態(tài):

myrepl:PRIMARY> rs.status();{  "set" : "myrepl",  "date" : ISODate("2014-02-25T02:30:26Z"),  "myState" : 1,  "members" : [    {     "_id" : 0,     "name" : "test02:10001",     "health" : 1,     "state" : 1,     "stateStr" : "PRIMARY",     "uptime" : 1735,     "optime" : Timestamp(1393295409, 1),     "optimeDate" : ISODate("2014-02-25T02:30:09Z"),     "self" : true    },    {     "_id" : 1,     "name" : "test03:10002",     "health" : 1,     "state" : 2,     "stateStr" : "SECONDARY",     "uptime" : 204,     "optime" : Timestamp(1393295409, 1),     "optimeDate" : ISODate("2014-02-25T02:30:09Z"),     "lastHeartbeat" : ISODate("2014-02-25T02:30:26Z"),     "lastHeartbeatRecv" : ISODate("2014-02-25T02:30:24Z"),     "pingMs" : 1,     "syncingTo" : "test02:10001"    },    {     "_id" : 2,     "name" : "test01:10003",     "health" : 1,     "state" : 6,     "stateStr" : "UNKNOWN",     "uptime" : 17,     "lastHeartbeat" : ISODate("2014-02-25T02:30:25Z"),     "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),     "pingMs" : 1,     "lastHeartbeatMessage" : "still initializing"    }  ],  "ok" : 1}

對(duì)比三個(gè)節(jié)點(diǎn)對(duì)自身節(jié)點(diǎn)性質(zhì)的判斷:

myrepl:PRIMARY> db.isMaster();{  "setName" : "myrepl",  "ismaster" : true,  "secondary" : false,  "hosts" : [    "test03:10002",    "test02:10001"  ],  "arbiters" : [    "test01:10003"  ],  "primary" : "test03:10002",  "me" : "test03:10002",  "maxBsonObjectSize" : 16777216,  "maxMessageSizeBytes" : 48000000,  "localTime" : ISODate("2014-02-25T02:32:29.760Z"),  "ok" : 1}myrepl:SECONDARY> db.isMaster();{  "setName" : "myrepl",  "ismaster" : false,  "secondary" : true,  "hosts" : [    "test02:10001",    "test03:10002"  ],  "arbiters" : [    "test01:10003"  ],  "primary" : "test03:10002",  "me" : "test02:10001",  "maxBsonObjectSize" : 16777216,  "maxMessageSizeBytes" : 48000000,  "localTime" : ISODate("2014-02-25T02:33:50.144Z"),  "ok" : 1}myrepl:SECONDARY> db.isMaster();{  "setName" : "myrepl",  "ismaster" : false,  "secondary" : true,  "hosts" : [    "test02:10001",    "test03:10002"  ],  "arbiters" : [    "test01:10003"  ],  "primary" : "test03:10002",  "me" : "test02:10001",  "maxBsonObjectSize" : 16777216,  "maxMessageSizeBytes" : 48000000,  "localTime" : ISODate("2014-02-25T02:33:50.144Z"),  "ok" : 1}

在節(jié)點(diǎn)配置中修改priority鍵,來(lái)配置成標(biāo)準(zhǔn)節(jié)點(diǎn)或者被動(dòng)節(jié)點(diǎn)。
默認(rèn)優(yōu)先級(jí)為1,可以是0~1000.
"arbiterOnly"鍵可以指定仲裁節(jié)點(diǎn)。
備份節(jié)點(diǎn)會(huì)從活躍節(jié)點(diǎn)抽取oplog,并執(zhí)行操作,就像活躍備份系統(tǒng)中的備份服務(wù)器一樣。活躍節(jié)點(diǎn)也會(huì)寫操作到自己的本地oplog,這樣就能成為活躍節(jié)點(diǎn)了。oplog中的操作也包括嚴(yán)格遞增的序號(hào)。通過(guò)序號(hào)判斷數(shù)據(jù)的時(shí)效性。
2.1 故障切換和活躍節(jié)點(diǎn)的選舉
如果活躍節(jié)點(diǎn)壞了,其他節(jié)點(diǎn)會(huì)選一個(gè)新的活躍節(jié)點(diǎn)。新的活躍節(jié)點(diǎn)由副本集中的大多數(shù)選舉出來(lái)。仲裁節(jié)點(diǎn)只負(fù)責(zé)投票,避免出現(xiàn)僵局。新的節(jié)點(diǎn)是優(yōu)先級(jí)最高的節(jié)點(diǎn)。
活躍節(jié)點(diǎn)使用心跳來(lái)跟蹤集群中多少節(jié)點(diǎn)對(duì)其可見(jiàn),如果不超過(guò)半數(shù),則活躍節(jié)點(diǎn)自動(dòng)降為備份節(jié)點(diǎn)??梢苑乐够钴S節(jié)點(diǎn)一直不放權(quán)。
無(wú)論活躍節(jié)點(diǎn)何時(shí)變化,新活躍節(jié)點(diǎn)的數(shù)據(jù)被假定為系統(tǒng)的最新數(shù)據(jù)。其他節(jié)點(diǎn)的操作都會(huì)回滾,所有節(jié)點(diǎn)連接新的活躍節(jié)點(diǎn)后要重新同步。這些節(jié)點(diǎn)會(huì)查看自己的oplog,找出其中活躍節(jié)點(diǎn)沒(méi)有執(zhí)行過(guò)的操作,然后向活躍節(jié)點(diǎn)請(qǐng)求這些操作影響的文檔的最新副本。
正在執(zhí)行重新同步的節(jié)點(diǎn)被視為恢復(fù)中,在完成這個(gè)過(guò)程前,不能成為活躍節(jié)點(diǎn)候選者。
2.2 關(guān)于副本集replSet的配置我們文后會(huì)附帶詳細(xì)地講。

3.在從服務(wù)器上執(zhí)行操作
從節(jié)點(diǎn)的主要作用是作為故障恢復(fù)機(jī)制,以防止主節(jié)點(diǎn)數(shù)據(jù)丟失或者停止服務(wù)。
可以在從節(jié)點(diǎn)做備份的數(shù)據(jù)源。也可以用來(lái)擴(kuò)展讀取性能,或者進(jìn)行數(shù)據(jù)處理。
3.1 讀擴(kuò)展
用MongoDB擴(kuò)展讀取的一種方式就是將查詢放在從節(jié)點(diǎn)上,減輕主節(jié)點(diǎn)的負(fù)載。當(dāng)負(fù)載是讀密集型時(shí)這樣非常不錯(cuò)。當(dāng)是寫密集型時(shí),需要用自動(dòng)分片來(lái)擴(kuò)展。
使用從節(jié)點(diǎn)來(lái)擴(kuò)展MongoDB的讀取有個(gè)要點(diǎn),就是數(shù)據(jù)復(fù)制并不同步,就是在主節(jié)點(diǎn)插入或更新數(shù)據(jù)口,有片刻從節(jié)點(diǎn)的數(shù)據(jù)不是最新的。
擴(kuò)展讀取需要打開(kāi)一個(gè)特殊選項(xiàng)slaveOkey,告訴從服務(wù)器是否可以處理請(qǐng)求。
如果直接在secondary上操作,會(huì)發(fā)生如下錯(cuò)誤:

myrepl:SECONDARY> db.test.find();error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

需要告知Mongodb集群,從哪臺(tái)機(jī)器上進(jìn)行讀操作:

myrepl:SECONDARY> rs.slaveOk();myrepl:SECONDARY> db.test.find();{ "_id" : ObjectId("530bfc79eee2c2ce39f9cd95"), "name" : "caoqing" }{ "_id" : ObjectId("530bfd8f3627cb16c15dcb32"), "name" : "xiaobao" }

3.2 用從節(jié)點(diǎn)做數(shù)據(jù)處理
從節(jié)點(diǎn)的另外一個(gè)服務(wù)就是作為一種機(jī)制來(lái)減輕密集型處理的負(fù)載,或作為聚合,避免影響主節(jié)點(diǎn)的性能。用--master啟動(dòng)一個(gè)普通的從節(jié)點(diǎn),同時(shí)使用--master和--slave矛盾。這意味著如果能對(duì)從節(jié)點(diǎn)進(jìn)行寫入,像平常一樣查詢,就把它作為一個(gè)主節(jié)點(diǎn)。從節(jié)點(diǎn)還是會(huì)不斷的從主節(jié)點(diǎn)復(fù)制數(shù)據(jù)。這樣就可以對(duì)從節(jié)點(diǎn)執(zhí)行阻塞操作而不影響主節(jié)點(diǎn)的性能。
從節(jié)點(diǎn)第一次啟動(dòng)時(shí)不能有正在復(fù)制的數(shù)據(jù)庫(kù),如果有,數(shù)據(jù)庫(kù)就不能完成同步,只能更新。
用這種技術(shù)要保證不能對(duì)正在復(fù)制主節(jié)點(diǎn)數(shù)據(jù)的從節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)執(zhí)行寫入。從節(jié)點(diǎn)不能恢復(fù)這些操作,就不能正確的映射主節(jié)點(diǎn)。

4.工作原理
MongoDB的復(fù)制至少需要兩臺(tái)服務(wù)器或者節(jié)點(diǎn),其中一個(gè)主節(jié)點(diǎn),負(fù)責(zé)處理客戶端請(qǐng)求,其他的都是從節(jié)點(diǎn),負(fù)責(zé)映射主節(jié)點(diǎn)的數(shù)據(jù)。主節(jié)點(diǎn)記錄在其上的所有操作。
從節(jié)點(diǎn)定期輪詢主節(jié)點(diǎn)獲取這些操作,然后對(duì)數(shù)據(jù)副本執(zhí)行這些操作。由于和主節(jié)點(diǎn)執(zhí)行了相同的操作,從節(jié)點(diǎn)就能保持和主節(jié)點(diǎn)的數(shù)據(jù)同步。
4.1 oplog
主節(jié)點(diǎn)的操作記錄成為polog(operation log)。oplog存儲(chǔ)在一個(gè)特殊的數(shù)據(jù)庫(kù)里,成為local。oplog就在其中的oplog.$main集合里面。oplog的每個(gè)文檔都代表主節(jié)點(diǎn)執(zhí)行的一個(gè)操作。

myrepl:PRIMARY> db.oplog.$main.help();

查看oplog的內(nèi)容:

myrepl:PRIMARY> use local;switched to db localmyrepl:PRIMARY> show collections;meoplog.rsreplset.minvalidslavesstartup_logsystem.indexessystem.replsetmyrepl:PRIMARY> db.oplog.rs.find();{ "ts" : Timestamp(1393294283, 1), "h" : NumberLong(0), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }{ "ts" : Timestamp(1393294457, 1), "h" : NumberLong("-8949844291534979055"), "v" : 2, "op" : "i", "ns" : "test.test", "o" : { "_id" : ObjectId("530bfc79eee2c2ce39f9cd95"), "name" : "caoqing" } }{ "ts" : Timestamp(1393294735, 1), "h" : NumberLong("677282438107403253"), "v" : 2, "op" : "i", "ns" : "test.test", "o" : { "_id" : ObjectId("530bfd8f3627cb16c15dcb32"), "name" : "xiaobao" } }{ "ts" : Timestamp(1393295409, 1), "h" : NumberLong("5171944912929102944"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "Reconfig set", "version" : 2 } }myrepl:PRIMARY> 

文檔包含的鍵如下:
(1)ts 操作的時(shí)間戳。時(shí)間戳是一種內(nèi)部類型,用于跟蹤操作執(zhí)行的時(shí)間。有4字節(jié)的時(shí)間戳和4字節(jié)的遞增計(jì)數(shù)器構(gòu)成。
(2)op 操作類型,只有1字節(jié)代碼。
(3)ns 執(zhí)行操作的命名空間。
(4)o  進(jìn)一步指定要執(zhí)行操作的文檔。
oplog只記錄改變數(shù)據(jù)庫(kù)狀態(tài)的操作。oplog只是作為從節(jié)點(diǎn)和主節(jié)點(diǎn)保持?jǐn)?shù)據(jù)同步的機(jī)制。
存儲(chǔ)在oplog里的操作不是完全和主節(jié)點(diǎn)的操作一模一樣的。這些操作在存儲(chǔ)之前先做等冪變換,這些操作可以在從服務(wù)器端多次執(zhí)行,只要順序是對(duì)的,就不會(huì)有問(wèn)題。
oplog在固定集合中,不能保證oplog不超過(guò)預(yù)先設(shè)定的大小。需要在創(chuàng)建mongodb服務(wù)時(shí)指定--oplogSize,參數(shù)指定oplog的大小。
一般64bit-linux,分配5%的剩余空間,單位為MB。
4.2 同步
從節(jié)點(diǎn)第一次啟動(dòng)時(shí),會(huì)對(duì)主節(jié)點(diǎn)數(shù)據(jù)進(jìn)行完整的同步。從節(jié)點(diǎn)復(fù)制主節(jié)點(diǎn)上的每一個(gè)數(shù)據(jù),耗費(fèi)資源大。同步完成后,從節(jié)點(diǎn)查詢主節(jié)點(diǎn)的oplog,并執(zhí)行這些操作,保證數(shù)據(jù)是最新的。
如果從節(jié)點(diǎn)的操作被主節(jié)點(diǎn)落下太遠(yuǎn)了,從節(jié)點(diǎn)就跟不上同步了,從節(jié)點(diǎn)發(fā)生宕機(jī)或者疲于應(yīng)付讀取時(shí),就會(huì)出現(xiàn)這種情況,也會(huì)在執(zhí)行完完整同步后出現(xiàn)這種情況,因?yàn)閛plog可能已經(jīng)回滾一圈了。
從節(jié)點(diǎn)跟不上同步后,復(fù)制就會(huì)停下,從節(jié)點(diǎn)需要重新做完整的同步。可以用{"resync" : 1}命令手動(dòng)執(zhí)行同步,也可以在啟動(dòng)從節(jié)點(diǎn)是使用--autoresync選項(xiàng)讓其自動(dòng)同步。重新同步代價(jià)高昂,盡量避免,方法就是配置足夠大的oplog。
4.3 復(fù)制狀態(tài)和本地?cái)?shù)據(jù)庫(kù)
本地?cái)?shù)據(jù)庫(kù)用來(lái)存放所有內(nèi)部復(fù)制狀態(tài),主節(jié)點(diǎn)和從節(jié)點(diǎn)都有。本地?cái)?shù)據(jù)就是local,其內(nèi)容不會(huì)被復(fù)制??梢源_保一盒MongoDB數(shù)據(jù)庫(kù)只有一個(gè)本地?cái)?shù)據(jù)庫(kù)。
本地?cái)?shù)據(jù)庫(kù)不限于存放MongoDB的內(nèi)部狀態(tài)。如果有不想復(fù)制的文檔,也可以放在本地?cái)?shù)據(jù)庫(kù)的集合里。
主節(jié)點(diǎn)上的復(fù)制狀態(tài)還包括從節(jié)點(diǎn)上的列表。這個(gè)列表存放在slaves集合中:

myrepl:PRIMARY> db.slaves.find();{ "_id" : ObjectId("530bfbdc911eb0ac3bf2aa8b"), "config" : { "_id" : 1, "host" : "test03:10002" }, "ns" : "local.oplog.rs", "syncedTo" : Timestamp(1393295409, 1) }

從節(jié)點(diǎn)也在本地?cái)?shù)據(jù)庫(kù)中存放狀態(tài)。在me集合中存放從節(jié)點(diǎn)的唯一標(biāo)識(shí)符,在sources集合中存放源或節(jié)點(diǎn)的列表。

myrepl:SECONDARY> db.me.find();{ "_id" : ObjectId("530bfbdc911eb0ac3bf2aa8b"), "host" : "test03" }

主節(jié)點(diǎn)和從節(jié)點(diǎn)都跟蹤從節(jié)點(diǎn)的更新?tīng)顩r,這個(gè)是通過(guò)存放在"syncedTO"中的時(shí)間戳來(lái)完成的。
4.4 阻塞復(fù)制
開(kāi)發(fā)者可以使用getLastrror的'w'參數(shù)來(lái)確保數(shù)據(jù)的同步性。運(yùn)行g(shù)etLastError會(huì)進(jìn)入阻塞狀態(tài),直到N個(gè)服務(wù)器復(fù)制了最新的寫入操作為止。
檢查本連接的上一次數(shù)據(jù)庫(kù)操作的錯(cuò)誤。

myrepl:PRIMARY> db.runCommand("getlasterror"){  "n" : 0,  "lastOp" : Timestamp(0, 0),  "connectionId" : 3525,  "err" : null,  "ok" : 1}

指定"w"選項(xiàng)后,可以使用"wtimeout"選項(xiàng),表示以毫秒為單位的超時(shí)。
阻塞復(fù)制會(huì)導(dǎo)致寫操作明顯變慢,尤其是"w"的值比較大時(shí)。

5.管理
5.1 管理
MongoDB包含很多有用的管理工具,用以查看復(fù)制的狀態(tài)。
通過(guò)

db.printReplicationInfo()

命令查看oplog狀態(tài)。

myrepl:PRIMARY> db.printReplicationInfo();configured oplog size: 997.7892578125001MBlog length start to end: 1126secs (0.31hrs)oplog first event time: Tue Feb 25 2014 10:11:23 GMT+0800 (CST)oplog last event time: Tue Feb 25 2014 10:30:09 GMT+0800 (CST)now:      Wed Feb 26 2014 02:07:23 GMT+0800 (CST)

輸出信息包括oplog日志的大小,操作日志記錄的起始時(shí)間。
查看從庫(kù)同步狀態(tài)。

myrepl:PRIMARY> db.printSlaveReplicationInfo();source: test03:10002   syncedTo: Tue Feb 25 2014 10:30:09 GMT+0800 (CST)     = 56533 secs ago (15.7hrs)source: test01:10003   no replication info, yet. State: ARBITER

輸出信息包括從庫(kù)的主機(jī)名,port信息等。
5.2 變更oplog的大小
如果發(fā)現(xiàn)oplog大小不合適,最簡(jiǎn)單的方法就是停掉主節(jié)點(diǎn),刪除local數(shù)據(jù)庫(kù)的文件,用心的設(shè)置重新啟動(dòng)。

# rm -rf /data/node2/local*

為大型的oplog預(yù)分配空間非常耗費(fèi)時(shí)間,且可能導(dǎo)致主節(jié)點(diǎn)停機(jī)時(shí)間增加,盡可能的手動(dòng)預(yù)分配數(shù)據(jù)文件。
5.3 復(fù)制的認(rèn)證問(wèn)題
如果在復(fù)制中使用了認(rèn)證,還需要做些配置,使得從節(jié)點(diǎn)可以訪問(wèn)俄主節(jié)點(diǎn)的數(shù)據(jù)。在主節(jié)點(diǎn)和從節(jié)點(diǎn)都需要在本地?cái)?shù)據(jù)庫(kù)增加用戶,每個(gè)節(jié)點(diǎn)的用戶名和口令相同。
從節(jié)點(diǎn)連接到主節(jié)點(diǎn)是,會(huì)用存儲(chǔ)在local.system.users中的用戶認(rèn)證。最先嘗試"repl"用戶,如果沒(méi)有,則用local.system.users中的第一個(gè)可用用戶。

PS:副本集replSet具體配置
1.MongoDB:創(chuàng)建Replica Set
1.1 分別啟動(dòng)兩臺(tái)mongodb數(shù)據(jù)庫(kù)

mongod --fork --dbpath /data/node2 --logpath /data/mongodb.log --port 10001 --logappend --replSet myrepl/test03:10002mongod --fork --dbpath /data/node3 --logpath /data/mongodb.log --port 10002 --logappend --replSet myrepl/test02:10001

1.2 初始化副本集

config = {"_id" : "myrepl",    "members" : [   {"_id" : 0, "host" : "test02:10001"},   {"_id" : 1, "host" : "test03:10002"}  ]}rs.initiate(config);rs.status();myrepl:SECONDARY> rs.status();{  "set" : "myrepl",  "date" : ISODate("2014-02-25T02:17:39Z"),  "myState" : 2,  "syncingTo" : "test03:10002",  "members" : [    {     "_id" : 0,     "name" : "test02:10001",     "health" : 1,     "state" : 2,     "stateStr" : "SECONDARY",     "uptime" : 968,     "optime" : Timestamp(1393294457, 1),     "optimeDate" : ISODate("2014-02-25T02:14:17Z"),     "errmsg" : "syncing to: test03:10002",     "self" : true    },    {     "_id" : 1,     "name" : "test03:10002",     "health" : 1,     "state" : 1,     "stateStr" : "PRIMARY",     "uptime" : 48,     "optime" : Timestamp(1393294457, 1),     "optimeDate" : ISODate("2014-02-25T02:14:17Z"),     "lastHeartbeat" : ISODate("2014-02-25T02:17:38Z"),     "lastHeartbeatRecv" : ISODate("2014-02-25T02:17:39Z"),     "pingMs" : 1,     "syncingTo" : "test02:10001"    }  ],  "ok" : 1}

1.3 增加一個(gè)仲裁節(jié)點(diǎn),只負(fù)責(zé)仲裁,不做數(shù)據(jù)存儲(chǔ)。

mongod --fork --dbpath /data/node1 --logpath /data/mongodb.log --port 10003 --logappend --replSet myrepl/test02:10001,test03:10002myrepl:PRIMARY> rs.addArb("test01:10003");{ "ok" : 1 }

2 MongoDB:Replica Set 增加節(jié)點(diǎn)
2.1 現(xiàn)有環(huán)境:

myrepl:PRIMARY> rs.conf();{  "_id" : "myrepl",  "version" : 2,  "members" : [    {      "_id" : 0,      "host" : "test02:10001"    },    {      "_id" : 1,      "host" : "test03:10002"    },    {      "_id" : 2,      "host" : "test01:10003",      "arbiterOnly" : true    }  ]}

現(xiàn)有三個(gè)節(jié)點(diǎn),兩臺(tái)standard節(jié)點(diǎn),一臺(tái)arbiter節(jié)點(diǎn)。
2.2 增加節(jié)點(diǎn)
2.2.1 創(chuàng)建數(shù)據(jù)目錄和日志文件:

mkdir -p /data/node/touch /data/mongodb.log

2.2.2 安裝mongodb:

tar zxf mongodb-linux-x86_64-2.4.9.tgz mv mongodb-linux-x86_64-2.4.9 /opt/mongodbecho "export PATH=$PATH:/opt/mongodb/bin" >>/etc/profilesource /etc/profilemongod --config ~/.mongodb.conf

2.2.3 創(chuàng)建新從節(jié)點(diǎn)配置文件:

cat >> ~/.mongodb.conf <<EOFfork = tureport = 10005dbpath = /data/nodelogpath = /data/mongodb.loglogappend = truereplSet = myreplEOF
2.2.4 更改節(jié)點(diǎn)信息
cat /etc/sysconfig/networkcat >> /etc/hosts << EOF 192.168.27.214 test01 192.168.27.212 test02 192.168.27.213 test03192.168.27.215 test04192.168.27.216 test05EOF
2.2.5 判斷節(jié)點(diǎn)是否是主節(jié)點(diǎn)
myrepl:PRIMARY> rs.isMaster();{  "setName" : "myrepl",  "ismaster" : true,  "secondary" : false,  "hosts" : [    "test02:10001",    "test03:10002"  ],  "arbiters" : [    "test01:10003"  ],  "primary" : "test02:10001",  "me" : "test02:10001",  "maxBsonObjectSize" : 16777216,  "maxMessageSizeBytes" : 48000000,  "localTime" : ISODate("2014-02-25T19:23:22.286Z"),  "ok" : 1}

2.2.6 增加新從節(jié)點(diǎn)到replSet

myrepl:PRIMARY> rs.add("192.168.27.215:10004");# 增加arbiter節(jié)點(diǎn)的方法:myrepl:PRIMARY> rs.addArb("test01:10003");

2.2.7 再次查看Replica Set狀態(tài)信息

myrepl:PRIMARY> rs.conf();{  "_id" : "myrepl",  "version" : 3,  "members" : [    {      "_id" : 0,      "host" : "test02:10001"    },    {      "_id" : 1,      "host" : "test03:10002"    },    {      "_id" : 2,      "host" : "test01:10003",      "arbiterOnly" : true    },    {      "_id" : 3,      "host" : "192.168.27.215:10004"    }  ]}

3. 測(cè)試
3.1 主節(jié)點(diǎn)插入數(shù)據(jù)
myrepl:PRIMARY> db.test.insert({"name" : "xiaohuan", "age" : 30});
3.2 從節(jié)點(diǎn)查詢數(shù)據(jù)
myrepl:SECONDARY> rs.slaveOk();
myrepl:SECONDARY> db.test.find();
{ "_id" : ObjectId("530bfc79eee2c2ce39f9cd95"), "name" : "caoqing" }
{ "_id" : ObjectId("530bfd8f3627cb16c15dcb32"), "name" : "xiaobao" }
{ "_id" : ObjectId("530ceed64770e9f00a279900"), "name" : "xiaohuan", "age" : 30 }

4. 把standard節(jié)點(diǎn)變?yōu)閜assive節(jié)點(diǎn)

myrepl:PRIMARY> cfg = rs.conf(){  "_id" : "myrepl",  "version" : 3,  "members" : [    {      "_id" : 0,      "host" : "test02:10001"    },    {      "_id" : 1,      "host" : "test03:10002"    },    {      "_id" : 2,      "host" : "test01:10003",      "arbiterOnly" : true    },    {      "_id" : 3,      "host" : "192.168.27.215:10004"    }  ]}myrepl:PRIMARY> cfg.members[3].priority = 0;myrepl:PRIMARY> rs.reconfig(cfg);myrepl:PRIMARY> rs.conf();{  "_id" : "myrepl",  "version" : 4,  "members" : [    {      "_id" : 0,      "host" : "test02:10001"    },    {      "_id" : 1,      "host" : "test03:10002"    },    {      "_id" : 2,      "host" : "test01:10003",      "arbiterOnly" : true    },    {      "_id" : 3,      "host" : "192.168.27.215:10004",      "priority" : 0    }  ]}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
思思久久99热只有频精品66| 7777狠狠狠琪琪电影| 久久亚洲私人国产精品va媚药| 被黑人猛躁10次高潮视频| 欧美婷婷久久五月精品三区| 日韩极品在线观看| 欧美韩日一区二区| 国产精品不卡在线| 亚洲美女电影在线| 99久久久久久久| 亚洲aaaaaaa| 自拍偷拍亚洲激情| 国产精品久久久久久久午夜| 欧美一区二区三区精品| 一本久久青青| 国产精品99久久免费观看| 91玉足脚交白嫩脚丫在线播放| 秋霞在线视频| 午夜剧场成人观在线视频免费观看| 欧美一二三区在线| 国产美女免费网站| 亚洲另类春色国产| 国模叶桐国产精品一区| 亚洲性视频在线| 亚洲欧美日本国产专区一区| 人妻视频一区二区三区| 日本一区网站| 一区二区三区天堂av| 777米奇影视第四色| 国产精品乱人伦一区二区| 国产又大又粗又爽| 俺去啦俺在线观看| 毛片毛片女人毛片毛片| 日本网站免费在线观看| av影片在线播放| 欧美福利影院| www网站在线观看| 国产精品的网站| 国产成都精品91一区二区三| 欧美成免费一区二区视频| 无码成人精品区在线观看| 免费的很黄很污的视频网站| 久久久久久国产精品| 欧美日韩免费不卡视频一区二区三区| 夜夜嗨一区二区三区| 成人免费一级视频| 人妻夜夜爽天天爽| ririsao中文字幕免费| 久久精品在线免费视频| 欧美成人久久| 午夜在线网站| 亚洲av熟女高潮一区二区| 沈樵精品国产成av片| 精品视频一区二区三区在线观看| 日韩在线播放视频| 中文字幕男人天堂| 色999久久久精品人人澡69| 欧美三级一级片| 91香蕉国产在线观看软件| 精品99在线观看| 偷拍亚洲精品| av资源一区二区| 亚洲国产精品激情在线观看| 日本国产在线观看| 国产娇喘精品一区二区三区图片| 欧美日韩国产第一页| 亚洲精品视频在线| 久久99久久99精品免观看粉嫩| 青青伊人久久| 小视频免费在线观看| 牛人国产偷窥女洗浴在线观看| 日韩av在线一区二区三区| 国产精品av在线播放| 日本一区二区在线视频观看| 国产精品视频一二三四区| 激情小说亚洲色图| 日本女优天堂99伊人| 黄色小视频在线免费看| 精品国产亚洲一区二区在线观看| 在线免费看av网站| 国产中文字幕在线播放| 一区二区国产精品精华液| 亚洲欧美网站| 亚洲男人天堂久| 26uuu精品一区二区| 精品欧美国产一区二区三区不卡| 91成人小视频| 美女视频黄免费的亚洲男人天堂| 午夜视频在线观| 女女同性女同一区二区三区91| 中文字幕第一区综合| 久久6免费高清热精品| 亚洲一区日本| 欧美日韩精品一区二区三区在线观看| 精品999视频| 精品91视频| 日韩高清三区| 四虎成人精品在永久免费| 婷婷精品久久久久久久久久不卡| 一本大道久久a久久精品综合| 美女网站免费观看| yiren22综合网成人| 人人爽久久涩噜噜噜网站| 欧美色图另类小说| 亚洲欧美一区二区三区在线播放| 亚洲欧美综合区自拍另类| 亚洲日产av中文字幕| 中文文字幕文字幕高清| 日韩在线观看一区| 91精品国产综合久久久久久| 无码一区二区三区视频| 在线亚洲+欧美+日本专区| 久久免费区一区二区三波多野| 青春草在线视频| 欧美精品国产| 久久亚洲精品国产亚洲老地址| 久久久男人的天堂| 国产精品视频网站在线观看| 欧美一区二区少妇| 尤物视频网站在线观看| 99福利在线| 浮生影视网在线观看免费| 九九99玖玖| 欧美日在线观看| 日韩一区二区三区精品视频第3页| 久久久久久久高清| 精品国产乱码久久久久久免费| 中国xxxx自拍视频| 精品视频在线免费看| 久草免费在线观看| 亚洲在线观看av| 成人午夜电影在线播放| 亚洲小说区图片区情欲小说| 精品国产一区二区三区| 成人ssswww在线播放| 亚洲深深色噜噜狠狠爱网站| 天堂av在线资源| 精品欧美一区二区久久久伦| 久久久999精品免费| 久久黄色片网站| 午夜视频在线免费播放| 欧美日韩视频专区在线播放| 欧美午夜不卡视频| 91麻豆制片厂| 精品国产一区二区三区无码| 最近中文字幕在线视频| 女女同性女同一区二区三区91| 韩日欧美一区| 国产卡一卡2卡三卡免费视频| 欧美变态xxxx| 欧美大黑帍在线播放| 国产熟女一区二区三区四区| 日韩深夜福利| a天堂中文字幕| 久久久com| 99热这里只有精品在线| 香蕉久久aⅴ一区二区三区| 免费日韩一区二区| 国产无遮挡在线视频免费观看| 日韩精品成人一区二区在线观看| 午夜小视频在线播放| 久久国产精品一区二区| 91亚洲国产成人久久精品麻豆| 亚洲人成网站在线| 亚洲在线免费看| 色综合中文综合网| 亚洲精品乱码久久久久久蜜桃麻豆| 992tv成人免费观看| 国产精品无av码在线观看| 亚洲激情在线观看视频| 蜜桃视频在线观看www| 91av在线看| 免费看国产一级片| 国产鲁鲁视频在线观看免费| 成年人三级视频| 国产精品久久久免费看| 亚洲性猛交xxxx乱大交| 成人国产精品一区| 男男gay无套免费视频欧美| 色就是色亚洲色图| 日本欧美黄网站| 97超视频免费观看| 中文字幕第22页| 国产黄色在线免费观看| 韩国一区二区三区视频| 久久久7777| 免费成人在线观看| 久久亚洲综合国产精品99麻豆精品福利| 全网国产福利在线播放| 中文字幕在线看视频国产欧美| 高清国产一区| 色综合久久久| 中文字幕在线观看网站| 国产综合色激情| 亚洲美女尤物影院| 夜夜操天天干| 黄色片免费观看| 欧美日韩国产成人高清视频| 黄色电影在线免费观看| 91精选在线观看| 国产一区美女在线| 一区二区精品免费| 在线观看的网站你懂的| 日韩精品福利网站| aaaaa级片| 擼擼色在线看观看免费| 国产一区二区三区蝌蚪| japan乱配videos老少配| caoporen人人| 亚洲精品一级二级三级| 国产福利在线视频| 中文字幕亚洲色图| 国产美女情趣调教h一区二区| 国产成人综合在线播放| 国产av一区二区三区传媒| brazzers欧美最新版视频| 在线观看免费的av| 亚洲free性xxxx护士白浆| 亚洲午夜福利在线观看| jlzzjlzz国产精品久久| 深夜福利在线视频| 亚洲最大天堂网| 中文在线字幕在线观看| 成人免费视频网站| 色视频在线免费| 99九九视频| 久草国产视频| 欧美精品小视频| 国产强被迫伦姧在线观看无码| 少妇毛片一区二区三区| 欧美午夜精品一区二区| 先锋影音欧美四级| 欧美一级爱爱视频| 你懂的视频在线播放| 最近中文字幕免费mv2018在线| 欧美中文在线免费| 国产91免费在线观看| 麻豆电影在线观看| 欧产日产国产69| 亚洲一区二区小说| eeuss影院www影院入口| 成人午夜电影在线观看| 日韩av网站在线| www.成人在线.com| 中文日韩在线观看| 日韩天堂在线观看| 欧美性黄网官网| 午夜精品福利电影| 蜜桃传媒一区二区| 116美女写真午夜一级久久| 免费看成年视频网页| 美女网站在线免费欧美精品| 欧美成人免费播放| 精品日韩欧美在线| 亚洲成人网在线播放| 91中文在线视频| 欧美91视频| 国产精品久久久久一区二区三区共| 欧美 日韩 亚洲 一区| 国内精品免费在线观看| 国产麻豆日韩| 欧美97人人模人人爽人人喊视频| 中文在线一区二区三区| 国产精品一卡二卡三卡| 亚洲精品一线二线三线无人区| 99视频入口| 99re热在线观看| 伊人久久大香线蕉综合影院首页| 天天草天天干| 日韩一区二区高清视频| 少妇一晚三次一区二区三区| 欧美高清一级大片| 精品中文字幕一区二区三区四区| 亚洲人成伊人成综合图片| 欧美肥婆xxxx欧美另类| 黄色亚洲在线| 在线观看日韩羞羞视频| 蜜桃传媒视频第一区入口在线看| 人人精品久久| 国产色一区二区| 精品人妻一区二区三区麻豆91| 又黄又www的网站| 国产伦精品一区二区三区视频黑人| 在线中文字幕日韩| 精品三级在线| 午夜影院免费观看视频| 99视频有精品高清视频| 韩国av在线播放| 欧美老妇交乱视频| 国产污片在线观看| 91福利在线免费| 国产成人艳妇aa视频在线| 国产精品三级美女白浆呻吟| 久久久久久久久久影视| 亚州av在线播放| 在线观看视频在线观看| 久久99久久99精品免观看粉嫩| 韩日精品在线| 久草精品在线观看| 精品国内产的精品视频在线观看| 午夜视频在线| 在线中文字幕亚洲| 国产一区二区免费视频| 91好吊色国产欧美日韩在线| 麻豆网址在线观看| 欧美激情视频在线观看| 国产综合色一区二区三区| 91亚洲国产成人久久精品网站| 日韩高清av一区二区三区| 亚洲免费中文字幕| 欧美日韩中文在线观看| 国产在线播放91| 91香蕉国产在线观看| 欧美熟妇乱码在线一区| 久久久久亚洲综合| 成人黄色在线免费观看| 91视频久久| 欧美亚一区二区| 国产日韩一区欧美| 九色综合婷婷综合| 日韩中文在线中文网三级| 七七成人影院| 樱桃视频在线观看一区| 日韩国产精品一区二区| 8av国产精品爽爽ⅴa在线观看| 欧美一个色资源| 久久国产精品久久久久久电车| 91插插插插插插插插|