復(fù)制是跨多個(gè)服務(wù)器同步數(shù)據(jù)的過(guò)程。復(fù)制提供冗余,并通過(guò)不同數(shù)據(jù)庫(kù)服務(wù)器上的多個(gè)數(shù)據(jù)副本增加數(shù)據(jù)可用性。 復(fù)制保護(hù)數(shù)據(jù)庫(kù)免受單個(gè)服務(wù)器的丟失。 復(fù)制還允許從硬件故障和服務(wù)中斷中恢復(fù)。 使用其他數(shù)據(jù)副本,可以將其專用于災(zāi)難恢復(fù),報(bào)告或備份。
MongoDB通過(guò)使用副本集來(lái)實(shí)現(xiàn)復(fù)制。副本集是托管相同數(shù)據(jù)集的一組 mongod 實(shí)例。 在一個(gè)副本中,一個(gè)節(jié)點(diǎn)是接收所有寫操作的主節(jié)點(diǎn)。所有其他實(shí)例(例如輔助節(jié)點(diǎn))都應(yīng)用主節(jié)點(diǎn)的操作,以便它們具有相同的數(shù)據(jù)集。 副本集可以只有一個(gè)主節(jié)點(diǎn)。
3個(gè)節(jié)點(diǎn))。顯示了MongoDB復(fù)制的典型圖,客戶端應(yīng)用程序始終與主節(jié)點(diǎn)進(jìn)行交互,然后主節(jié)點(diǎn)將數(shù)據(jù)復(fù)制到輔助節(jié)點(diǎn)。

N個(gè)節(jié)點(diǎn)的集群在本教程中,我們將獨(dú)立的 MongoDB 實(shí)例轉(zhuǎn)換為副本集。要轉(zhuǎn)換為副本集,以下是步驟 -
replSet選項(xiàng)啟動(dòng) MongoDB服 務(wù)器。 以下是--replSet的基本語(yǔ)法 -mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
示例
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
27017上啟動(dòng)名稱為rs0的 mongod 實(shí)例。rs.initiate()以啟動(dòng)新的副本集。rs.conf()。 要檢查復(fù)制集的狀態(tài),請(qǐng)使用命令rs.status()。要將成員添加到副本集,請(qǐng)?jiān)诙嗯_(tái)計(jì)算機(jī)上啟動(dòng) mongod 實(shí)例。 現(xiàn)在啟動(dòng)一個(gè) mongo 客戶端并發(fā)出一個(gè)命令rs.add()。
語(yǔ)法
rs.add()命令的基本語(yǔ)法如下:
>rs.add(HOST_NAME:PORT)
示例
假設(shè)您的 mongod 實(shí)例名稱是 mongod1.net,它在端口 27017 上運(yùn)行。要將此實(shí)例添加到副本集,請(qǐng)?jiān)?Mongo 客戶端中發(fā)出命令 rs.add()。
>rs.add("mongod1.net:27017")
>
只能在連接到主節(jié)點(diǎn)時(shí),將 mongod 實(shí)例添加到副本集。要檢查是否連接到主服務(wù)器,請(qǐng)?jiān)?mongo 客戶端中發(fā)出命令db.isMaster()。
rs0:PRIMARY> db.isMaster()
{
"hosts" : [
"ubuntu:27017"
],
"setName" : "rs0",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "ubuntu:27017",
"me" : "ubuntu:27017",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1498896581, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2017-07-01T08:09:41Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2017-07-01T08:09:50.365Z"),
"maxWireVersion" : 5,
"minWireVersion" : 0,
"readOnly" : false,
"ok" : 1
}
rs0:PRIMARY>