【问题标题】:MongoDB sharding: host does not belong to replica setMongoDB分片:主机不属于副本集
【发布时间】:2015-02-25 18:56:14
【问题描述】:

我是 Mongo 新手。 我正在尝试使用分片和复制来加速 MongoDB 集群。我要实现的集群模式是:https://github.com/ansible/ansible-examples/raw/master/mongodb/images/site.png 我使用服务器 IP 作为复制集名称。 IE。我正在使用以下命令构建复制集:

rs.initiate()
rs.add("10.148.28.51:27118")
rs.add("10.148.28.52:27118")
rs.add("10.148.28.53:27118")

复制配置正确,因此当我在 PRIMARY 主机 10.148.28.51 上执行 rs.status() 时,我得到“10.148.28.51”作为 repl.set 名称:https://gist.github.com/daniilyar/630bc6fe7723ed06f243

但是当我尝试在 mongos 实例中添加分片时,它给了我 2 个相反的错误(取决于我使用的 addShard() 语法变化):

mongos> sh.addShard("10.148.28.51:27118")
{
"ok" : 0,
"errmsg" : "host is part of set 10.148.28.51, use replica set url format     <setname>/<server1>,<server2>,...."
}
mongos> sh.addShard("10.148.28.51/10.148.28.51:27118") 
{
"ok" : 0,
"errmsg" : "in seed list 10.148.28.51/10.148.28.51:27118, host 10.148.28.51:27118 does not belong to replica set 10.148.28.51"
}

如果 Mongo 同时告诉“主机 X 在副本集 Y”和“主机 X 不属于副本集 Y”,我该如何添加分片?

任何帮助将不胜感激

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

    从您的描述看来,您需要调整使用 rs.add(..) 命令的方式。您声明您使用 IP 地址作为副本集的名称,但这不是 rs.add(...) 解释参数的方式。

    您传递的参数是您要添加到副本集的 mongod 实例的主机名(或 IP)和端口而不是副本集名称。通过 mongo 连接到主节点时,您可以设置此配置。 replSet名称是在primary启动时设置的:

    mongod --replSet "rs1"
    

    设置 rs1 的名称。

    我想读一读:http://docs.mongodb.org/manual/tutorial/convert-replica-set-to-replicated-shard-cluster/,因为它几乎涵盖了您似乎想要做的事情。

    我还会考虑您想要实现的目标,因为听起来(根据您的描述),当您很可能希望创建多个分片时,您最终可能会得到一个复制的分片(!!!)复制他们的数据。

    参考文献

    rs.add 命令 - http://docs.mongodb.org/manual/reference/method/rs.add/

    rs.addShard 命令 - http://docs.mongodb.org/manual/reference/method/sh.addShard/ 分片集群 - http://docs.mongodb.org/manual/core/sharded-cluster-components/

    【讨论】:

    • 但是当我在主机 10.148.28.51 的 PRIMARY 上执行 rs.status() 命令时,我得到“10.148.28.51”作为 repl.set 名称:gist.github.com/daniilyar/630bc6fe7723ed06f243 我已将问题编辑为反映这一点,并添加了我要构建的集群的架构。
    【解决方案2】:

    谢谢你的解释,现在我明白了。如果在 rs.add(IP:port) 中使用,Mongo 会添加名称为 ip-X-Y-Z-R: 的副本集成员。这似乎是 Mongo 的默认行为。所以在我的情况下,解决方案是使用命令:

    sh.addShard("10.148.28.51/**ip-10-148-28-51**:27118") 
    

    代替:

    sh.addShard("10.148.28.51/**10.148.28.51**:27118") 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2021-04-20
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多