mongodb副本集无法启动的解决方案

       在《MongoDB权威指南》第172页建立副本集这一部分,跟着书上建立一个包含3个成员的副本集,但是不管我操作多少遍就无法启动副本集,刚开始我用的是和书中一样的版本mongodb-2.4.0,linux版本为centos7;前面一路跟着例子走,都正常,就在副本集这里不行;后来我以为是版本的问题,又更换了mongodb-2.6.3版本、mongodb-3.6.1版本也都不行。2.x和3.x的错误其实是一样的,只不过2.x默认的三个副本集端口分别为31000、31001、31002;3.x默认的三个副本集端口分别为20000、20001、20002.刚开始在网上搜索这个错误,都说是什么权限不够,我是用root帐户启动的,所以这个原因不成立。报这个错:

Failed to connect to 127.0.0.1:20000, in(checking socket for error after poll), reason: Connection refused
d20000| Unable to start program mongod: No such file or directory

Could not start mongo program at 20000, process ended

Error: Failed to start node 0 :

详细日志信息:

>replicaSet.startSet() //启动副本集命令
        ReplSetTest starting set
        ReplSetTest n is : 0
        {
        "useHostName" : true,
        "oplogSize" : 40,
        "keyFile" : undefined,
        "port" : 20000,
        "noprealloc" : "",
        "smallfiles" : "",
        "replSet" : "__unknown_name__",
        "dbpath" : "$set-$node",
        "restart" : undefined,
        "pathOpts" : {
        "node" : 0,
        "set" : "__unknown_name__"
        },
        "setParameter" : {
        "writePeriodicNoops" : false,
        "numInitialSyncAttempts" : 1,
        "numInitialSyncConnectAttempts" : 60
        }
        }
        ReplSetTest Starting....
        Resetting db path '/data/db/__unknown_name__-0'
        
2018-01-05T12:38:03.322+0800 I -        [thread1] shell: started program (sh3358):  mongod --oplogSize 40 --port 20000 --noprealloc --smallfiles --replSet __unknown_name__ --dbpath /data/db/__unknown_name__-0 --setParameter writePeriodicNoops=false --setParameter numInitialSyncAttempts=1 --setParameter numInitialSyncConnectAttempts=60 --bind_ip 0.0.0.0 --setParameter enableTestCommands=1 --setParameter disableLogicalSessionCacheRefresh=true --setParameter orphanCleanupDelaySecs=1 --setParameter logComponentVerbosity={"tracking":0,"replication":{"heartbeats":2,"rollback":2}}

//一下是错误详细信息
2018-01-05T12:38:03.324+0800 W NETWORK  [thread1] Failed to connect to 127.0.0.1:20000, in(checking socket for error after poll), reason: Connection refused
d20000| Unable to start program mongod: No such file or directory
        
2018-01-05T12:38:03.525+0800 W NETWORK  [thread1] Failed to connect to 127.0.0.1:20000, in(checking socket for error after poll), reason: Connection refused
Could not start mongo program at 20000, process ended
       
2018-01-05T12:38:03.525+0800 E QUERY    [thread1] Error: Failed to start node 0 :
        ReplSetTest/this.start@src/mongo/shell/replsettest.js:1786:1
        ReplSetTest/this.startSet@src/mongo/shell/replsettest.js:500:24
@(shell):1:1

          错误分析:不管你启动mongod时指定的dbpath的路径是哪里,反正在打开mongo
shell时用的就是/data/db/ ;因为在执行#mongo  --nodb时并没有选项可以指定dbpath的路径,如果你没有/data/db这个目录,创建副本集时就会报目录不存在的错误;而你在启动mongod服务时是可以指定dbpath的#mongod --dbpath /home/data/db;我是这么猜测的,当我在官网下载的解压版tgz都不能启动副本集时,我选择用yum源安装,采用yum源安装,会在/etc/mongod.conf生成配置文件,如果不修改参数,mongod的dbpath默认在/var/lib/mongod下面,而你启动mongo shell时,默认的dbpath在/data/db/下面,我这么一试竟然成功了,副本集可以启动了。所以我猜测是不是两个dbpath不应该在一起

         那怎样判别你有没有启动mongod服务呢,#ps -ef|grep mongo  或者查看28017端口是否有在使用;另外使用官网tgz包解压安装的,没有配置文件,得自己定义一个(如果需要的话);通过yum源安装的才有

        注意:虽然副本集可以启动了,但是创建分片时又不行了>cluster = new ShardingTest({"shards" : 3, "chunksize" : 1}),还是报那个错;不知道我生效的那次是怎么弄的,这是不是mongodb的bug呀,希望大神帮忙解答一下

你可能感兴趣的:(mongodb副本集无法启动的解决方案)