1. 程式人生 > >mongodb副本集無法啟動的解決方案

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[email protected]/mongo/shell/replsettest.js:1786:1 ReplSetTest/this[email protected]/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呀,希望大神幫忙解答一下