mongodb在secondary不能直接获取primary的信息解决方法

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

[[email protected] ~]# mongo
MongoDB shell version: 3.0.9
connecting to: test
abc:SECONDARY> show dbs
2016-02-20T02:13:18.527+0800 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

有两种方法实现从机的查询:
第一种方法:db.getMongo().setSlaveOk();
第二种方法:rs.slaveOk();
但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式

为避免没有设置权重情况下,有几多台mongodb下都vi .mongorc.js,增加一行内容:rs.slaveOk(); ,这是可以避免原本是primary,避免primary发生故障后另一个secondary切换为primary,原本的primary修复好变成secondary时候执行rs.slaveOk()时候没有权限..最好给加x权限给.mongorc.js这个文件:

vi monogorc.js
rs.slaveOk()
:wq
[[email protected] ~]#
chmod u+x  .mongorc.js

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

[[email protected] ~]# mongo
MongoDB shell version: 3.0.9
connecting to: test
abc:PRIMARY> use mydb
switched to db mydb
abc:PRIMARY> show tables
system.indexes
testc

上面的方法可以解决secondary再次登录不再提示"not master"。

时间: 2024-10-20 00:38:45

mongodb在secondary不能直接获取primary的信息解决方法的相关文章

MongoDb的“not master and slaveok=false”错误及解决方法,读写分离

首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离.通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作. 对于replica set 中的secondary 节点默认是不可读的, [[email protected] bin]$ mongo 127.0.0.1:33333 MongoDB shell version: 2.0.1 connecting to: 127.0.

BootStrap iCheck插件全选与获取value值的解决方法

这篇文章主要介绍了BootStrap iCheck插件全选与获取value值的解决方法,解决方法其实很简单,下面小编给大家分享下这方面的知识 在使用jQuery iCheck 插件的时候遇到了一个问题,就是当我们使用普通的js全选功能无效了. $("#checkall").click( function(){ if(this.checked){ $("input[name='checkname']").each(function(){this.checked=tru

Request获取url各种信息的方法

1.Request获取url各种信息的方法 测试的url地址:http://www.test.com/testweb/default.aspx, 结果如下: Request.ApplicationPath: /testweb Request.CurrentExecutionFilePath: /testweb/default.aspx Request.FilePath: /testweb/default.aspx Request.Path: /testweb/default.aspx Reque

PHP获取http头信息和CI中获取HTTP头信息的方法

CI中获取HTTP头信息的方法: $this->input->request_headers() 在不支持apache_request_headers()的非Apache环境非常有用.返回请求头(header)数组. $headers = $this->input->request_headers(); ------------------------------------------------------------------------------------------

获取当前年月日...信息的方法,获取请求的ip地址,由于数据库中是time格式,所以要获取时分秒的格式

1.获取当前年月日...信息的方法 1 public class CommonDate { 2 3 public final String year = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); 4 public final String month = String.valueOf(Calendar.getInstance().get(Calendar.MONTH)+1); 5 public final String

MVC5 Controller构造方法获取User为空解决方法

用如下方法获取UserId报空引用异常 1 2 3 4 5 6 7 8 9 public class BaseController : Controller {     protected SiteContext db = new SiteContext();     protected Guid userId;     public BaseController()     {         userId = Guid.Parse(User.Identity.GetUserId());   

bootstrap iCheck插件 全选和获取value值的解决方法

在使用jQuery iCheck 插件的时候遇到了一个问题,就是当我们使用普通的js全选功能无效了. $("#checkall").click(     function(){         if(this.checked){             $("input[name='checkname']").each(function(){this.checked=true;});         }else{             $("input[

javascript使用for循环批量注册的事件不能正确获取索引值的解决方法

今天遇到一个问题,那就是当使用for循环批量注册事件处理函数,然后最后通过事件处理函数获取当前元素的索引值的时候会失败,先看一段代码实例: <script type="text/javascript"> window.onload=function(){ var oLis=document.getElementsByTagName("li"); var oshow=document.getElementById("show"); fo

MongoDb的“not master and slaveok=false”错误及解决方法

在SECONDARY查询出发现如下错误: 这是正常的,因为SECONDARY是不允许读写的,如果非要解决,方法如下: SECONDARY> rs.slaveOk();