【问题标题】:MongoDB: can't shard on localhost because of shard socket exceptionMongoDB:由于分片套接字异常,无法在 localhost 上进行分片
【发布时间】:2015-10-29 21:11:30
【问题描述】:

我正在尝试使用 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 

到这里为止,一切看起来都很好。

现在我想在集群中添加一个 Shard:

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、机器的别名、本地主机...似乎没有任何效果。

有人可以帮我解决这个问题吗?也许我错过了一点。

提前致谢

【问题讨论】:

  • 一样一样,有什么线索吗?

标签: mongodb sharding


【解决方案1】:

我遇到了同样的问题,你必须运行

蒙神&

在你的每个分片上

然后你就可以打电话了

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

【讨论】:

    【解决方案2】:

    有可能,请按以下顺序。

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

    1. 使用名为 s1 的副本集启动第一个 mongod 服务器(分片 1 和副本 1)
    2. 使用名为 s2 的副本集启动第二个 mongod 服务器(分片 2 和副本 1)
    3. 使用名为 s3 的副本集启动第三个 mongod 服务器(分片 3 和副本 1)

    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() 命令进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多