mongodb的读写分离
生活随笔
收集整理的這篇文章主要介紹了
mongodb的读写分离
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://blog.csdn.net/sd0902/article/details/21538621
mongodb的讀寫分離使用Replica Sets來實現(xiàn)
對于replica set 中的secondary 節(jié)點默認(rèn)是不可讀的。在寫多讀少的應(yīng)用中,使用Replica Sets來實現(xiàn)讀寫分離。通過在連接時指定或者在主庫指定slaveOk,由Secondary來分擔(dān)讀的壓力,Primary只承擔(dān)寫操作。
如果通過shell訪問mongo,要在secondary進(jìn)行查詢。會出現(xiàn)如下錯誤:imageSet:SECONDARY> db.fs.files.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
有兩種方法實現(xiàn)從機(jī)的查詢:
第一種方法:db.getMongo().setSlaveOk();
第二種方法:rs.slaveOk();
但是這種方式有一個缺點就是,下次再通過mongo進(jìn)入實例的時候,查詢?nèi)匀粫箦e,為此可以通過下列方式
vi ~/.mongorc.js
增加一行rs.slaveOk();
這樣的話以后每次通過mongo命令進(jìn)入都可以查詢了
如果是通過java訪問secondary的話則會報下面的異常
com.mongodb.MongoException: not talking to master and retries used up
解決的辦法很多。
第一種方法:在java代碼中調(diào)用dbFactory.getDb().slaveOk();
第二種方法:在java代碼中調(diào)用
dbFactory.getDb().setReadPreference(ReadPreference.secondaryPreferred());//在復(fù)制集中優(yōu)先讀secondary,如果secondary訪問不了的時候就從master中讀
或
dbFactory.getDb().setReadPreference(ReadPreference.secondary());//只從secondary中讀,如果secondary訪問不了的時候就不能進(jìn)行查詢
第三種方法:在配置mongo的時候增加slave-ok="true"也支持直接從secondary中讀
<mongo:mongo id="mongo" host="${mongodb.host}" port="${mongodb.port}">
? ? ? ? <mongo:options slave-ok="true"/>?
</mongo:mongo>
總結(jié)
以上是生活随笔為你收集整理的mongodb的读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同事反馈环:为什么度量和会议还不够充分
- 下一篇: Eclipse 下新建MAVEN项目