账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongodb在没有设置副本集的情况下,崩溃前的log里出现多次isMaster命令
    53
    0

    mongodb服务在进行定时任务操作时崩溃,查询日志发现崩溃时固定出现以下两条格式的记录:

    command admin.$cmd command: isMaster { ismaster: 1 } numYields:0 reslen:189 locks:{} protocol:op_query 1600ms
    
    serverStatus was very slow: { after basic: 600, after asserts: 1001, after backgroundFlushing: 
    1302, after connections: 1701, after dur: 2194, after extra_info: 3300, after globalLock: 3995, 
    after locks: 5002, after network: 5304, after opLatencies: 5600, after opcounters: 5799, 
    after opcountersRepl: 6104, after repl: 6500, after security: 6802, after storageEngine: 7500, 
    after tcmalloc: 8601, after wiredTiger: 32799, at end: 37100 }
    

    从服务器的log来看,mongodb崩溃时进行了大量的读操作。
    想请教各位大佬如何从这两条分析mongodb服务崩溃的原因?
    另外前一条让我很困惑。我们并没有为mongodb设置副本集,为什么还会有isMaster的命令呢?

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • —半世づ微暖゜ 普通会员 1楼

      在MongoDB中,isMaster命令用于检测主节点,如果主节点不可用,那么该命令将返回false。但是,如果主节点是通过复制集连接的,那么即使主节点不可用,isMaster命令仍然可以返回true。这种情况在MongoDB中是常见的。

      在这种情况下,MongoDB的崩溃前的log里可能会出现多次isMaster命令,这是因为当主节点不可用时,MongoDB将尝试从其他节点复制数据。如果复制过程中出现错误,例如网络问题或者节点故障,那么isMaster命令将返回true。

      为了避免这种情况,你可以使用如下的命令来设置主节点:

      bash use admin db.runCommand({ replicaSet: 'yourReplicaSet' })

      在这个命令中,'yourReplicaSet'是你想要设置的主节点的名称。这将确保在主节点不可用时,数据仍然能够被复制到其他节点。

      此外,你也可以使用如下的命令来设置副本集:

      bash use admin db.runCommand({ setClusterId: 'yourClusterId' })

      在这个命令中,'yourClusterId'是你想要设置的副本集的名称。这将确保在主节点不可用时,数据仍然能够被复制到其他副本集。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部