如果希望不管發生什麼都將寫入操作儲存到副本集中,那麼必須要確保寫入操作被同步到副本集的"大多數"
可以使用
getlasterror命令來檢查寫入是否成功,有乙個特殊的關鍵字"w"就是"majority"
rs0
:primary
>db.
runcommand
()
,
"connectionid":1
,
"n":
1,
"syncmillis":0
,
"wtime":0
,
"writtento"
:[
"mongodb2:27017"
,
"mongodb3:27017"
],
"err"
:null
,
"ok"
:1
}
當使用了w引數後,就會出現writtento欄位.如果secondary節點掛了,這時候主節點無法將這個操作複製到副本集中,那麼getlasterror會一直等待下去.因此要給wtimeout設定乙個等待時間.例如這裡設定等待1s:
rs0
:primary
>db.
runcommand
()
,
"connectionid":1
,
"n":
1,
"syncmillis":0
,
"wtime":0
,
"writtento"
:[
"mongodb2:27017"
,
"mongodb3:27017"
],
"err"
:null
,
"ok"
:1
}
"w"還可以是其它值,mongodb允許w為任意整數,例如w為2表示寫操作複製到兩個成員,否則會一直等待(包括主節點).
如果有兩個個資料中心,想將資料至少複製到每個資料中心的一台機器上,可以使用對資料中心成員分類,使用config中的tags欄位
第一.先將每個資料中心的成員打上tags
var config=rs
.config
()
config
.members[0
].br#
config
.members[1
].br#
config
.members[2
].br#
config
.members[3
].br#
tags是乙個陣列,"dc"是標識,"east"和"west"是值,這些都可以自己定義
第二.建立規則,通過配置getlasterrormode字段實現,每條規則的形式為:"name":.其中name是規則的名字,自己定,key就是上面tags的標識,number表示複製操作至少複製到多少個分組上,每個分組內至少一台機器上.
config
.settings
={}
config
.settings
.getlasterrormodes
=[}]
rs
.reconfig
(config
)
上面的意思就是建立了乙個規則叫eachdc,保證dc分組中至少複製到2個分組中,每個分組中至少一台主機上,由於上面我們dc只有兩個分組分別為"east"和"west",那麼這就實現了兩個中心至少一台機器保證複製成功.
最後就可以使用getlasterror來對應這條規則:
db
.runcommand
()
Logstash寫入MongoDB資料庫
1.列出logstash plugins bin logstash plugin list logstash output kafka logstash output nagios logstash output null logstash output pagerduty logstash out...
MongoDB複製集和分片
複製集 複製提供了兩方面的好處 高效能 和 高可用性 奇數 應確保伺服器為奇數,這樣更容易選舉出主伺服器 複製策略 副本集數量 容錯 部署副本集 1.2.為複製集 中的每個伺服器配置 replset值。可以在檔案 mongodb.conf 中指定,也可以在命令列中指定。mongod port 270...
MongoDB複製集架構搭建
mkdir p data r0 data r1 data r2 bin mongod port 27017 dbpath home workspace data r0 smallfiles replset rsa fork logpath home workspace logs mongo0.log...