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

在部署mongodb副本集的时候可以设置读取数据从次副本上读取,在次副本的mongodb的命令中执行:

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


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

   com.mongodb.MongoException: not talking to master and retries used up
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:317)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:319)
at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:319)

解决的办法很多。
第一种方法:在java代码中调用dbFactory.getDb().slaveOk();
第二种方法:在java代码中调用
dbFactory.getDb().setReadPreference(ReadPreference.secondaryPreferred());//在复制集中优先读secondary,如果secondary访问不了的时候就从master中读

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


mongodb的读写分离环境部署完成和java驱动设置完成,怎么验证数据是否从次副本读取的呢??

方法: (1)使用mongostat -h host1 查看主副本的节点的mongo状态

     (2)使用mongostat -h host2 查看次副本的节点的mongo状态

    (3)执行读取数据动作,查看哪一个节点下面的query查询数量变动了,就证明数据是从哪一个节点读取的



你可能感兴趣的:(mongodb的读写分离使用Replica Sets来实现)