博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb的读写分离
阅读量:5990 次
发布时间:2019-06-20

本文共 1058 字,大约阅读时间需要 3 分钟。

转自:

mongodb的读写分离使用Replica Sets来实现

对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。

如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:

imageSet:SECONDARY> db.fs.files.find()

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

有两种方法实现从机的查询:

第一种方法:db.getMongo().setSlaveOk();

第二种方法:rs.slaveOk();

但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式

vi ~/.mongorc.js

增加一行rs.slaveOk();

这样的话以后每次通过mongo命令进入都可以查询了



如果是通过java访问secondary的话则会报下面的异常

com.mongodb.MongoException: not talking to master and retries used up

解决的办法很多。

第一种方法:在java代码中调用dbFactory.getDb().slaveOk();

第二种方法:在java代码中调用

dbFactory.getDb().setReadPreference(ReadPreference.secondaryPreferred());//在复制集中优先读secondary,如果secondary访问不了的时候就从master中读


dbFactory.getDb().setReadPreference(ReadPreference.secondary());//只从secondary中读,如果secondary访问不了的时候就不能进行查询

第三种方法:在配置mongo的时候增加slave-ok="true"也支持直接从secondary中读

<mongo:mongo id="mongo" host="${mongodb.host}" port="${mongodb.port}">

        <mongo:options slave-ok="true"/> 

</mongo:mongo>

转载地址:http://jnilx.baihongyu.com/

你可能感兴趣的文章
[swift3.0]关于ios 忽略文件 和 提交代码总是提交一些不必要的文件处理
查看>>
Shell脚本小技巧
查看>>
从一个简单的脚本:实时统计当前history命令共累积了多少条谈开去
查看>>
gitlab简单纪要
查看>>
linux进程管理
查看>>
5月13日,The First day
查看>>
前端调用服务 js跨域 后台 springmv工程 设置全局跨域
查看>>
Iptables学习笔记
查看>>
我的友情链接
查看>>
微信服务器认证
查看>>
形态学滤波算法
查看>>
dedeCMS实现tab分页
查看>>
python3_装饰器_异常处理
查看>>
DataGridColumn中显示RadioButton
查看>>
Selenium自动化测试框架研究
查看>>
linux后台运行命令详解
查看>>
PHP代码混淆来袭,你值得拥有!
查看>>
字符串替换
查看>>
2016年U盘启动盘制作工具哪个好用?看U盘启动盘排行榜!
查看>>
Java 面向对象 之 对象数组
查看>>