MongoDB Master-Slave (主從)

摘要:MongoDB Master-Slave (主從)

這篇是要架主從式的複製,

為的是,資料備份,或則是資料分散,由Master負責寫的動作,而Slave負責讀的動作,由單一台伺服服務,變成多台伺服服務,做資料讀取的負責平衡。(只有資料讀而已,要做資料分流分割的話,又是另一個叫Shard的功能)

 

可以參考

http://www.mongodb.org/display/DOCS/Replica+Sets

http://docs.mongodb.org/manual/tutorial/deploy-replica-set/

 

可以一臺電腦實作主從式Mongo架構,

主要的MongoDB,為來源(source)或Master(主)

他在啟動的時候,要下指令--master (使用--dbpath 設定資料存放地方 ~/dbs/master)

mongod --master --dbpath ~/dbs/master --port 10000

而從(slave)的伺服,則下指令 --salve 並指定 主伺服的位置 --source 

mongod --slave --dbpath ~/dbs/slave --port 10001 --source localhost:10000

但也可以動態指定主要來源位置,而先啟動slave,再指定source ,再動態將指向測試機的主機,轉而指向正式機的主機

mongod --slave --dbpath ~/dbs/slave --port 10001 

然後下指令

use local

db.sources.insert({"host":"localhost:10000"})

一開始插入時,只會看到資料為

db.sources.find()

{

    "_id":ObjecteId("......"),

   "host":"localhost:10000"

}

當同步完後,再查詢會得到

db.sources.find()

{

 

    "_id":ObjecteId("......"),

   "host":"localhost:10000",

  "source":"main",

  "syncedTo":{

          ...略過

  },

  "localLogTs":{

         ...略過

 },

 "dbsNextPass":{

        "test_db":true

  }

}

 

再往後,想從指向測試機,往正式機移的化,

則更改source

db.sources.insert("host":"正式機位置:port_number")

db.sources.remove("host":"測試機位置:port_number")

 

若要使用mongo.conf

可參考

http://www.mongodb.org/display/DOCS/File+Based+Configuration

 

書中及網路說明為何要做主叢的原因是如下

 

Replica sets have several common uses:

  • Data Redundancy
  • Automated Failover / High Availability
  • Distributing read load
  • Simplify maintenance (compared to "normal" master-slave)
  • Disaster recovery

 

1.備份
2.錯誤後轉移
3.水平擴充讀取性能
 
實務上,一個叢集通常只會擁有少於12個的從屬節點,這樣已經能夠順利運作了。(書中寫的筆記,參考)