MongoDB:由于分片套接字异常,无法在localhost上进行分片

时间:2015-04-21 09:37:49

标签: mongodb sharding

我正在尝试MongoDB的shard tutorial,进行一些简单的测试(概念验证项目)。

我想在一台机器上尝试分片。这有可能和/或它有意义吗?

当我按照指南步骤操作时,它不起作用。

首先,我在我的机器上启动mongod configsrv数据库实例:

bin/mongod --configsvr --dbpath $BASEDIR/data/configdb --port 27019 &
bin/mongod --configsvr --dbpath $BASEDIR/data/configdb1 --port 27020 &
bin/mongod --configsvr --dbpath $BASEDIR/data/configdb2 --port 27021 &

然后,我启动mongos实例,以便它们“绑定”到配置服务器:

HOST=$(uname -n) # my machine's name
# starts on default poort 27017
bin/mongos --configdb $HOST:27019,$HOST:27020,$HOST:27021 

直到这里,一切看起来都不错。

现在我想将一个碎片添加到群集中:

bin/mongo --host $(uname -n)

它进入MongoDB shell。

  

连接到:my.machine.name:27017/test

但是当我尝试添加新的分片时,出现以下错误:

mongos> sh.addShard( "rs1/my.machine.name:27017" )
{
    "ok" : 0,
    "errmsg" : "couldn't connect to new shard socket exception [CONNECT_ERROR] for rs1/my.machine.name:27017"
}

我尝试过ip,机器的别名,localhost ......似乎没什么用。

有人可以帮我吗?也许我错过了一点。

提前致谢

2 个答案:

答案 0 :(得分:0)

我有同样的问题,你必须运行

  

mongod&

在你的每个碎片上

然后你可以打电话

  

sh.addShard(“rs1 / my.machine.name:27017”)

答案 1 :(得分:-1)

可能,按照以下顺序。

假设我们想在同一台机器上创建一个包含3个分片的群集,每个分片有1个副本。

  1. 使用名为s1的副本集启动第一个mongod服务器(带有副本1的分片1)
  2. 使用名为s2的副本集启动第二个mongod服务器(带有副本1的分片2)
  3. 使用名为s3的副本集启动第三个mongod服务器(带有副本1的分片3)
  4. mkdir -p / data / shard0 / rs0 / data / shard0 / rs1 / data / shard0 / rs2

    /bin/mongod --replSet Sv1 --logpath "Sv1-r0.log" --dbpath /data/shard0/rs0 --port 37017
    
    /bin/mongod --replSet Sv2 --logpath "Sv2-r0.log" --dbpath /data/shard0/rs1 --port 47017
    
    /bin/mongod --replSet Sv3 --logpath "Sv3-r0.log" --dbpath /data/shard0/rs2 --port 57017
    

    这将启动3个mongod服务器/分片,每个分片有一个副本

    /bin/mongo --port 37017 << 'EOF'
    config = { _id: "Sv1", members:[
              { _id : 0, host : "<ip>:37017" }]};
    rs.initiate(config)
    EOF
    

    这会将副本添加到副本集Sv1。这应该针对每个分片进行,即在每个端口47017和57017

    上进行

    现在我们已准备好使用分片和副本的集群,但没有人知道其他分片和副本,因此我们需要配置服务器

    /bin/mongod --logpath "cfg-a.log" --dbpath /data/config/config-a --port 57040 --fork --configsvr
    

    然后启动mongos进行管理员访问,

    /bin/mongos --logpath "mongos-1.log" --configdb 10.88.66.218:57040
    

    现在将碎片添加到我们的群集中,

    /bin/mongo <<'EOF'
    db.adminCommand( { addShard : "Sv1/"+"<ip>:37017" } );
    db.adminCommand( { addShard : "Sv2/"+"<ip>:47017" } );
    db.adminCommand( { addShard : "Sv3/"+"<ip>:57017" } );
    use db
    db.createCollection("col1")
    db.adminCommand({enableSharding:"db"})                                       db.adminCommand({shardCollection: "db.col1", key: {_id:"hashed"}});
    EOF
    

    就是这样......群集应该有3个分片。你可以在mongos上查看sh.status()命令。