012.MongoDB读写分离
2019-06-17 19:33
1096 查看
一 读写分离概述
1.1 读写分离描述
从应用程序角度来看,使用Replica Set 和使用单台mongo很像。默认的驱动程序会连接primary节点,并且将所有读写请求都路由到主节点。但也可以通过设置驱动程序的Read Preferences 配置其他选项,将读请求路由到其他节点。 通常官网中建议不使用向从节点取数据。原因如下:- 所有的从节点拥有与主节点一样的写入负载,读的加入会增加其负载;
- 对于分片的集合,在平衡器的关系下,数据的返回结果可能会缺失或者重复某部分数据;
- 相对而言,官方建议使用shard来分散读写请;
- 一致性的考虑,对一致性要求比较高的应用程序是不应该从备份节点读取数据,备份节点通常由于加载问题,网络等原因,而落后于主节点几毫秒,几秒,几分钟甚至更多。如果应用程序需要读取它自己的写操作(比如,先插入一个文档,再去查询它),那么不应该从备份节点去读取数据,除非针对写操作,使用Write Concern定义w数值,在复制到所有备份节点之后,再返回执行成功与否。总之,如果从一个落后的备份节点读取数据,就要牺牲一致性。如果希望写入操作返回之前被复制到所有的副本集成员,就要牺牲写入速度。
- 如果路由到的备份节点,其中一台挂了,那么其他节点将承担其相应的压力,需要注意此时在线节点的负载压力。
1.2 使用的场景
通常官方不推荐使用从节点实现读写分离,但可能存在以下场景需要使用读写分离:- 异地的分布式部署
- 故障切换,在紧急情况下向从节点读数据
1.3 延伸读写分离思考
该思考来源:https://github.com/smallnewer/bugs/issues/22 个人总结如下: 主从的写压力基本一样;- MongoDB从不会受到主写锁的影响,可通过mongotop 或者 mongostat查看写锁状态;
- MongoDB从会在主写锁后,在恢复oplog时,进行写锁;
- 从优先读,而且读太多会影响写;
- 从节点读的权限比写锁优先级高(注:主节点反之,应该是写贪婪的),建议当从节点的读太高从而影响了oplog的恢复时,改用分片方案。
二 读写分离部署
2.1 正常部署副本集
参考《006.MongoDB复制(副本集)》。2.2 开启Sencondary可读状态
[root@mongodb02 ~]# mongo --host 172.24.8.72 -u clusteradmin -p clusteradmin my_rep:SECONDARY> db.getMongo().setSlaveOk() [root@mongodb02 ~]# mongo --host 172.24.8.73 -u clusteradmin -p clusteradmin my_rep:SECONDARY> db.getMongo().setSlaveOk() #分别连接两个Sencondary节点服务器,设置为可读状态
2.3 客户端设置读取方式
通过修改客户端读取方式实现从节点的读,具体方式包括:Read Preference模式 | 中文解释 |
primary | 默认,只从主节点读取数据 |
primaryPreferred | 在主节点不可用时,从副节点读取数据 |
secondary | 所有的读操作,从副节点读取数据 |
secondaryPreferred | 在副节点不可用时,从主节点读取数据 |
nearest | 从网络延迟最小的节点获取数据 该模式不关注成员的类型,不管是primary还是secondary成员。 |
相关文章推荐
- [mongodb] - mongodb高可用集群搭建(分片+读写分离+负载均衡)
- mongodb 读写分离
- 二、mongodb之副本集(读写分离)
- java代码实现mongodb故障迁移和读写分离
- Mongodb Replica Set 读写分离
- mongodb主从复制,读写分离,配置
- Mongodb -副本集与读写分离(一)
- MongoDB012 MongoDB之MapReduce
- MongoDB的搭建并配置主从以及读写分离
- spring data mongodb 设置副本集读写分离模式
- Redis+MongoDB 最佳实践 做到读写分离 -摘自网络
- mongodb的读写分离
- 【Mongodb】 Replica set 的读写分离
- 第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)
- MongoDb的“not master and slaveok=false”错误及解决方法,读写分离
- mongodb的读写分离使用Replica Sets来实现
- mongodb的读写分离
- Mongodb主从配置完美实现读写分离
- mongodb 的安装以及在多台服务器之间建立副本集 在虚拟机上安装多个linux实现 配合Java代码实现读写分离
- mongodb读写分离的一些选项的理解