我在测试环境中有 4 台服务器,用于测试 MongoDB 副本和分发:RepSetA 包含 RepSetA1 和 RepSetA2。RepSetB 拥有 RepSetB1 和 RepSetB2。所有服务器都充当路由器,RepSetA1 充当单个配置服务器。
我有一个“播放器”数据(10,000 条记录,该对象由一个“Id”和一个“Name”字段组成),我希望它在副本集之间分片(或分布),并在相同的服务器之间克隆副本集。因此,仅举一个简单的示例: Player1-5000:存在于 RepSetA1 和 RepSetA2 中,但不存在于 RepSetB1 和 RepSetB2 中。Player5000-10000:RepSetB1 和 RepSetB2 中都存在,但 RepSetA1 和 RepSetA2 中不存在。
相反,我得到的是所有 4 个服务器中的所有玩家。
如果我打印分片状态,我会得到以下信息:
mongos> db.printShardingStatus();
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "RepSetA", "host" : "RepSetA/MongoRepSetA1:27018,MongoRepSetA2:27018" }
{ "_id" : "RepSetB", "host" : "RepSetB/MongoRepSetB1:27018,MongoRepSetB2:27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "GamesDB", "partitioned" : true, "primary" : "RepSetA" }
GamesDB.Player chunks:
RepSetA 2
{ "_id" : { $minKey : 1 } } -->> { "_id" : 0 } on : RepSetA { "t" : 1000, "i" : 1 }
{ "_id" : 0 } -->> { "_id" : { $maxKey : 1 } } on : RepSetA { "t" : 1000, "i" : 2 }
{ "_id" : "test", "partitioned" : false, "primary" : "RepSetB" }
{ "_id" : "EOO", "partitioned" : false, "primary" : "RepSetB" }
我使用以下命令来构建分片:
db.adminCommand( { addShard : "RepSetA/MongoRepSetA1:27018,MongoRepSetA2:27018" } )
db.adminCommand( { addShard : "RepSetB/MongoRepSetB1:27018,MongoRepSetB2:27018" } )
db.runCommand( { enablesharding : "GamesDB" } );
db.runCommand( { shardcollection : "GamesDB.Player", key : { _id :1 } , unique : true} );
我究竟做错了什么?