MongoDB學習九--MongoDB的主從複製

sql server能夠做到讀寫分離,雙機熱備份和集羣部署,當然mongodb也能做到,實際應用中我們不希望數據庫採用單點部署,如果碰到數據庫宕機或者被毀滅性破壞那是多麼的糟糕。

注意新的3.0.5的說明 Master/slave options (old; use replica sets instead): 不過這篇還是以master/slave來做。

一:主從複製

1: 首先看看模型圖

2: 從上面的圖形中我們可以分析出這種架構有如下的好處:

     <1>  數據備份。

     <2>  數據恢復。

     <3>  讀寫分離。

3:下面我們就一一實踐

     實際應用中我們肯定是多服務器部署,限於自己懶的裝虛擬機,就在一臺機器上實踐了。

第一步:我們把mongodb部署多服務器上192.168.0.148和192.168.0.149。

第二步:啓動192.168.0.149上的mongodb,把該數據庫指定爲主數據庫,其實命令很簡單:>mongod --dbpath='XXX' --master,端口還是默認的27017.

先啓動主mongod --dbpath=/data/db/ --master

master

再啓動從mongod --slave --source 192.168.0.149:27017 --dbpath /data/db/

slave

出現了sycing和sleep說明已經從主數據庫複製完成了,下面進行更爽的操作:

登錄Master 149      mongo 192.168.0.149:27017

login master

再登錄Slave 148查看相關情況  mongo 192.168.0.148:27017

運行show dbs報錯了,主從啓動之後,連接slave可以成功連上,但是在slave中執行 show dbs 的時候就報錯了:

QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
解決方法:在報錯的slave機器上執行 rs.slaveOk()方法即可。

ok

下面查詢一下,看有同步了嗎


看到了嗎,成功同步了。

如果我還想增加一臺從屬數據庫,但是我不想在啓動時就指定,而是後期指定,那麼mongodb可否做的到呢?答案肯定是可以的。跟啓動Slave一樣增加就行了。是不是So easy啊。

讀寫分離
     這種手段在大一點的架構中都有實現,在mongodb中其實很簡單,在默認的情況下,從屬數據庫不支持數據的讀取,但是沒關係,在驅動中給我們提供了一個叫做“slaveOkay"來讓我們可以顯示的讀取從屬數據庫來減輕主數據庫的性能壓力。

默認是從數據庫不支持寫的,需要在從數據庫執行rs.slaveOk(),其解釋如下:

Provides a shorthand for the following operation:

db.getMongo().setSlaveOk()
This allows the current connection to allow read operations to run on secondary members. See the readPref() method for more fine-grained control over read preference in the mongo shell.

默認是從數據




發佈了32 篇原創文章 · 獲贊 14 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章