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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB副本MongoDB的高可用解决方案之一,它通过在多个MongoDB实例之间复制数据来提高系统的可用性。在Windows系统上部署MongoDB副本可以按照以下步骤进行: 1. 下载MongoDB Windows版安装程序,安装过程中可选择自定义安装,选择需要安装的组件。 2. 创建多个MongoDB实例,每个实例需要指定不同的端口号、数据目录和日志目录。可以通过命令行启动MongoDB实例,如: ``` mongod --port 27017 --dbpath "C:\data\db1" --logpath "C:\data\log1\mongod.log" --replSet rs0 mongod --port 27018 --dbpath "C:\data\db2" --logpath "C:\data\log2\mongod.log" --replSet rs0 mongod --port 27019 --dbpath "C:\data\db3" --logpath "C:\data\log3\mongod.log" --replSet rs0 ``` 其中--replSet参数指定副本名称为rs0。 3. 初始化副本,使用mongo shell连接到任意一个MongoDB实例,执行以下命令: ``` rs.initiate() ``` 4. 添加MongoDB实例到副本中,可以使用rs.add()命令,例如: ``` rs.add("localhost:27018") ``` 也可以使用rs.addArb()命令添加仲裁节点。 5. 监控副本状态,可以使用rs.status()命令查看副本状态信息。 6. 在应用程序中连接到副本时,需要指定多个MongoDB实例的连接字符串,例如: ``` mongodb://localhost:27017,localhost:27018,localhost:27019/mydb?replicaSet=rs0 ``` 以上是部署MongoDB副本的基本步骤,注意在实际操作中还需要根据具体情况进行调整和优化。如果您有任何问题或需要更详细的介绍,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值