複製是跨多個伺服器同步資料的過程。複製提供冗餘,並通過不同資料庫伺服器上的多個資料副本增加資料可用性。 複製保護資料庫免受單個伺服器的丟失。 複製還允許從硬體故障和服務中斷中恢復。 使用其他資料副本,可以將其專用於災難恢復,報告或備份。
MongoDB通過使用副本集來實現複製。副本集是託管相同資料集的一組 mongod 範例。 在一個副本中,一個節點是接收所有寫操作的主節點。所有其他範例(例如輔助節點)都應用主節點的操作,以便它們具有相同的資料集。 副本集可以只有一個主節點。
3
個節點)。顯示了MongoDB複製的典型圖,用戶端應用程式始終與主節點進行互動,然後主節點將資料複製到輔助節點。
N
個節點的叢集在本教學中,我們將獨立的 MongoDB 範例轉換為副本集。要轉換為副本集,以下是步驟 -
replSet
選項啟動 MongoDB服 務器。 以下是--replSet
的基本語法 -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
上啟動名稱為rs0
的 mongod 範例。rs.initiate()
以啟動新的副本集。rs.conf()
。 要檢查複製集的狀態,請使用命令rs.status()
。要將成員新增到副本集,請在多台計算機上啟動 mongod 範例。 現在啟動一個 mongo 用戶端並行出一個命令rs.add()
。
語法
rs.add()
命令的基本語法如下:
>rs.add(HOST_NAME:PORT)
範例
假設您的 mongod 範例名稱是 mongod1.net
,它在埠 27017
上執行。要將此範例新增到副本集,請在 Mongo 用戶端中發出命令 rs.add()
。
>rs.add("mongod1.net:27017")
>
只能在連線到主節點時,將 mongod 範例新增到副本集。要檢查是否連線到主伺服器,請在 mongo 用戶端中發出命令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>