共计 1504 个字符,预计需要花费 4 分钟才能阅读完成。
MongoDB 主从复制 (Master-Slave Replication) 其结构类似 MySQL 的主从复制。
os:CentOS 6.5
mongodb:3.2.10
〇 搭建
master 上:
- $ mkdir -p /data/testdb
- $ mongod –dbpath=/data/testdb/ –logpath=/data/testdb/master.log –fork –master
slave 上:
- $ mkdir –p /data/testdb
- $ mongod ––dbpath=/data/testdb/ ––logpath=/data/testdb/slave.log –fork ––slave ––source 192.168.0.1:27017
然后查看一下 slave 的 log
- $ tail –f /data/testdb/slave.log
如看到如下输出,则表示已经开始同步
- 2016–11–09T16:19:46.695+0800 I REPL [replslave] syncing from host:192.168.0.1:27017
〇 测试
master 上:
- > use test;
- switched to db test
- > db.test_tb.insert({“master”:“123456”})
- WriteResult({ “nInserted” : 1 })
- > db.test_tb.find();
- {“_id” : ObjectId(“5822d3507fedcba43d3b9278”), “master” : “123456” }
slave 上:
- > use test;
- switched to db test
- > db.test_tb.find();
- Error: error: {“ok” : 0, “errmsg” : “not master and slaveOk=false”, “code” : 13435 }
出现如上错误是因为默认 slave 是不可读写的:
可以执行
- > db.getMongo().setSlaveOk()
或者输入上命令同义词:
- > rs.slaveOk()
便可以了
- > db.test_tb.find();
- {“_id” : ObjectId(“5822d3507fedcba43d3b9278”), “master” : “123456” }
在 mongodb 3.2 文档里明确写道:
- WARNING
- Deprecated since version 3.2: MongoDB 3.2 deprecates the use of master-slave replication for components of sharded clusters.
- IMPORTANT
- 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 等功能的高级解决方案。
〇 参考文档
MONGODB MANUAL 3.2 > Replication > Master Slave Replication
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142384.htm
正文完
星哥玩云-微信公众号