应用admin数据库:
3. 下载安装MongoDB的安装法度榜样包
- use admin
定义副本集设备变量,这里的 _id:”test” 和膳绫擎敕令参数“ –replSet test” 要保持一致:
- config = { _id:"test", members:[
- ... {_id:0,host:" 10.43.159.56:27017"},
- ... {_id:1,host:" 10.43.159.58:27017"},
- ... {_id:2,host:" 10.43.159.60:27017"}]
- ... }
- rs.initiate(config);
- {
- "info" : "Config now saved locally. Should come online in about a minute.",
- "ok" : 1
- }
查看日记,副本集启动成功后,56为主节点PRIMARY,58、60为副本节点SECONDARY,留意这里是三个节点合营选举出的主节点,有必定随机性。
查看集群节点的状况:
- rs.status();
副本集模式的MongoDB不仅搭建简单,并且功能强大年夜。如今回头看看这种模式可否解决我们前面遗留的问题:主节点挂了可否主动切换连接?
先测试副本集数据复制功能是否正常
起首在主节点56上插入数据,然后再副本节点上查看数据,发明日记报错:
输出成功:
- error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:128
MongoDB官方已经不建议应用主大年夜模式了,替代筹划是采取副本集的模式,那什么是副本集呢?简单地说,副本集就是有主动故障恢复功能的主大年夜集群,或者说主大年夜模式其实就是一个单副本的应用,没有很好的扩大性和容错性。而副本集具有多个副本包管了容错性,就算一个副本挂掉落了还有很多副本存在,更棒的是副本集很多处所都是主动化的,它为你做了很多治理工作。聪慧的读者已经发明,主大年夜模式的第一个问题手工切换已经获得解决了,难怪MongoDB官方强烈推荐应用这种模式。我们来看看MongoDB副本集的架构图:
这是因为默认只大年夜主节点读写数据,副本不许可读,只要设置副本可以读即可。在副本节点上履行:rs.slaveOk(),然后萌芽数据,发明主节点的数据已经同步过来了。
再测试下副本集的故障转移功能
先停掉落主节点56上的过程,可以看到58和60节点上的日记显示的就是投票过程。再履行rs.status()可以看到集群状况更新了,56为弗成达,58成为主节点,60照样副本。再启动56节点,发明照样58为主节点,56变为副本节点。如许就解决了第一个故障主动转移的问题。
那么,对于主节点读写压力过大年夜,若何解决呢?常见的解决筹划是读写分别,MongoDB副本集的读写分别若何做呢?
看图措辞:
对于移动APP的场景,平日写操作远没有读操作多,所以一台主节点负责写,两台副本节点负责读。大年夜哪个节点读,完全可以由客户端选择,数据攫取参数一共有五类(Primary、PrimaryPreferred、Secondary、SecondaryPreferred、Nearest):
- Primary:默认参数,只大年夜主节点长进行攫取操作;
- PrimaryPreferred:大年夜部分大年夜主节点上攫取数据,只有主节点弗采取时大年夜Secondary节点攫取数据。
- Secondary:只大年夜Secondary节点长进行攫取操作,存在的问题是Secondary节点的数据会比Primary节点数据“旧”。
- SecondaryPreferred:优先大年夜Secondary节点进行攫取操作,Secondary节点弗采取时大年夜主节点攫取数据;
- Nearest:不管是主节点、Secondary节点,大年夜收集延迟最低的节点上攫取数据。
典范的副本集组网中,除了有副本节点,还有其他角色,比如仲裁节点,如下图:
推荐阅读
大年夜多半科技界人士都认为,再过十年,无处不在的技巧将会触及一天中的每一个时刻,让我们的生活变得更有效力、更相符小我需求。这同时引出一个有趣的问题:在一个万物互联的世界里,当>>>详细阅读
本文标题:干货满满 | MongoDB集群实战攻略
地址:http://www.17bianji.com/lsqh/40477.html
1/2 1