【MongoDB】主從複製(Master-Slave Replication)簡單實現

神諭丶發表於2016-11-09

其結構類似MySQL的主從複製

os:CentOS 6.5
mongodb:3.2.10



〇 搭建

master上:
  1. $ mkdir -p /data/testdb
  2. $ mongod --dbpath=/data/testdb/ --logpath=/data/testdb/master.log --fork --master 

slave上:
  1. $ mkdir -p /data/testdb
  2. $ mongod --dbpath=/data/testdb/ --logpath=/data/testdb/slave.log --fork --slave --source 192.168.0.1:27017 


然後檢視一下slave的log
  1. $ tail -f /data/testdb/slave.log


如看到如下輸出,則表示已經開始同步
  1. 2016-11-09T16:19:46.695+0800 I REPL [replslave] syncing from host:192.168.0.1:27017





〇 測試
master上:
  1. > use test;
  2. switched to db test
  3. > db.test_tb.insert({"master":"123456"})
  4. WriteResult({ "nInserted" : 1 })
  5. > db.test_tb.find();
  6. { "_id" : ObjectId("5822d3507fedcba43d3b9278"), "master" : "123456" }


slave上:
  1. > use test;
  2. switched to db test
  3. > db.test_tb.find();
  4. Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }


出現如上錯誤是因為預設slave是不可讀寫的:
可以執行
  1. > db.getMongo().setSlaveOk()
或者輸入上命令同義詞:

  1. > rs.slaveOk()

便可以了

  1. > db.test_tb.find();
  2. { "_id" : ObjectId("5822d3507fedcba43d3b9278"), "master" : "123456" }


在mongodb 3.2 文件裡明確寫道:
  1. WARNING
  2. Deprecated since version 3.2: MongoDB 3.2 deprecates the use of master-slave replication for components of sharded clusters.
  3. IMPORTANT
  4. Replica sets replace master-slave replication for most use cases. If possible, use replica sets rather than master-slave replication for all new production deployments. This documentation remains to support legacy deployments and for archival purposes only.

如果要用m-s結構做分片叢集,可以取而代之的是使用加流弊的Replica Set,然而Replica Set可以理解為“Master-Slave”帶有自動failover等功能的高階解決方案。





〇 參考文件
  •  3.2 >  > Master Slave Replication

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2128164/,如需轉載,請註明出處,否則將追究法律責任。

相關文章