摘要: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