ITPub博客

首页 > 数据库 > NoSQL > 【MongoDB】主从复制(Master-Slave Replication)简单实现

【MongoDB】主从复制(Master-Slave Replication)简单实现

原创 NoSQL 作者:神谕丶 时间:2016-11-09 16:17:17 0 删除 编辑

其结构类似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等功能的高级解决方案。





〇 参考文档

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-2128164/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
微信公众号:神谕的暗影长廊

注册时间:2014-07-28

  • 博文量
    161
  • 访问量
    1195299