在《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呀,希望大神帮忙解答一下