複製是在多臺服務器之間同步數據的過程。複製集在大多數場合下已經代替Master-Slave複製。若是可能的話,儘量使用複製集而不是主-從複製架構。mongodb
在複製集中,主節點是惟一可以接收寫請求的節點。MongoDB在主節點進行寫操做,並將這些操做記錄到主節點的oplog中。而從節點將會從oplog複製到其本機,並將這些操做應用到本身的數據集上。(複製集最多隻能擁有一個主節點)服務器
從節點經過應用主節點傳來的數據變更操做來保持其數據集與主節點一致。從節點也能夠經過增長額外參數配置來對應特殊需求。例如,從節點能夠是non-voting或是priority 0.架構
仲裁節點即投票節點,其自己並不包含數據集,且也沒法晉升爲主節點。可是,旦當前的主節點不可用時,投票節點就會參與到新的主節點選舉的投票中。仲裁節點使用最小的資源而且不要求硬件設備。投票節點的存在使得複製集能夠以偶數個節點存在,而無需爲複製集再新增節點 不要將投票節點運行在複製集的主節點或從節點機器上。 投票節點與其餘 複製集節點的交流僅有:選舉過程當中的投票,心跳檢測和配置數據。這些交互都是不加密的。app
Tip 1 : 一個複製集至少須要這個成員:一個主節點,一個從節點和一個投票節點。可是在大多數狀況下,咱們會保持3個擁有數據集的節點:一個主節點和兩個從節點。即測試
Tip 2 : mongo3.0.0 版本更改:一個複製集最多可添加到50個節點,可是隻能有7個投票節點(包括主節點)。在此以前,複製集最多可添加12個節點。加密
準備三臺機器,而且必須保持三臺服務器可以相互鏈接,配置爲一主一從一仲裁的模式spa
192.168.1.7:27017rest
192.168.1.8:27017日誌
192.168.1.9:27017code
# 日誌記錄 logpath=/tmp/mongodb/log/mongod.log logappend=true # fork and run in background fork = true port = 27017 dbpath=/tmp/mongodb/data # location of pidfile pidfilepath = /tmp/mongodb/log/mongod.pid rest = true maxConns=32000 # Disables write-ahead journaling # nojournal = true # Replication Options replSet=RsM
分別啓動三臺mongo服務
/tmp/mongodb/bin/mongod -f /tmp/mongodb/conf/mongo.conf
進入其中一臺mongo,進行配置(注:賬戶權限,認證忽略)
增長一個變量
cfg = {"_id": "RsM", "members":[ {"_id": 0,"host":"192.168.1.7:27017","priority":1}, {"_id": 1,"host":"192.168.1.8:27017","priority":1}, {"_id": 2,"host":"192.168.1.9:27017","priority":1}, ]}; rs.initate(cfg); # 查看狀態 rs.status()
殺掉主節點,進入從節點後,利用rs.status();查看狀態便可!
rs.add("ip:port"); // 新增從節點 rs.addArb("ip:port"); // 新增仲裁節點 rs.remove("ip:port"); // 刪除一個節點 rs.isMaster(); // 查看當前是不是主節點