我是一名Mongo新手。 我正在尝试使用分片和复制来扩展MongoDB集群。我想实现的集群模式是:https://github.com/ansible/ansible-examples/raw/master/mongodb/images/site.png 我使用服务器IP作为复制集名称。即我正在使用以下命令构建复制集:
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”,如何添加分片?
非常感谢任何帮助
答案 0 :(得分:1)
从你的描述听起来你需要调整你使用rs.add(..)命令的方式。您声明您使用的是IP地址作为副本集的名称,但这不是rs.add(...)解释参数的方式。
您传递的参数是您要添加到副本集而不是副本集名称的mongod实例的主机名(或IP)和端口。通过mongo连接到主设备时,可以设置此配置。在启动主服务器时设置replSet名称:
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/
答案 1 :(得分:0)
谢谢你的解释,现在我明白了。如果在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")