mongodb副本集进行读写分离的方法
这篇文章将为大家详细讲解有关mongodb副本集进行读写分离的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
首先我们先来搭建一个副本集(因为没有那么多服务器机器,这里采用在一台机器上,使用不同的端口号模拟不同的机器上的Mongodb实例)。
第一步:我们在本机的1111、2222和3333三个端口上启动三个不同的Mongodb实例;
mongod--port1111--dbpathF:/mongodb1/data/db--logpathF:/mongodb1/data/log/mongodb.log--replSettest--logappend
mongod--port2222--dbpathF:/mongodb2/data/db--logpathF:/mongodb2/data/log/mongodb.log--replSettest--logappend
mongod--port3333--dbpathF:/mongodb3/data/db--logpathF:/mongodb3/data/log/mongodb.log--replSettest--logappend
在这里我们启动了三个Mongodb实例,并指定了相应的数据目录和日志目录,需要说明的是,这里需要使用--replSet说明该Mongodb实例是副本集中的节点,而该副本集的名称是test。
第二步:登录到一个实例上,编写指令,将三个不同的Mongodb实例结合在一起形成一个完整的副本集;
config_test={"_id":"test",members:[{_id:0,host:"127.0.0.1:1111"},{_id:1,host:"127.0.0.1:2222"},{_id:2,host:"127.0.0.1:3333"},]};
第三步:通过执行下面的命令初始化副本集。
rs.initiate(config_test);
这里使用上面的配置初始化Mongodb副本集。
通过上面的三步,便可以简单的搭建起一个由三个Mongodb实例构成的名称为test的副本集了。如果想查看副本集的状态,可以使用rs.status()命令来进行查看。
副本集读写分离结构如下图所示:
为了在副本集上实现读写分离,我们需要实现以下两步:
(1)在副本节点上设置setSlaveOk;
(2)代码层面,在读操作过程中设置从副本节点读取数据,如下所示:
<spanstyle="font-family:KaiTi_GB2312;font-size:18px;">publicclassTestMongoDBReplSet{publicstaticvoidmain(String[]args){try{List<ServerAddress>addresses=newArrayList<ServerAddress>();ServerAddressaddress1=newServerAddress("127.0.0.1",1111);ServerAddressaddress2=newServerAddress("127.0.0.1",2222);ServerAddressaddress3=newServerAddress("127.0.0.1",3333);addresses.add(address1);addresses.add(address2);addresses.add(address3);MongoClientclient=newMongoClient(addresses);DBdb=client.getDB("test");DBCollectioncoll=db.getCollection("test");BasicDBObjectobject=newBasicDBObject();object.append("key1","value1");ReadPreferencepreference=ReadPreference.secondary();DBObjectdbObject=coll.findOne(object,null,preference);System.out.println(dbObject);}catch(Exceptione){e.printStackTrace();}}}</span>
读参数除了secondary以外,还有其他几个参数可以使用,他们的含义分别如下所示:
primary:默认参数,只从主节点上进行读取操作;
primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。
secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。
secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;
nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。
关于mongodb副本集进行读写分离的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。