我在测试环境中有4台服务器用于测试MongoDB副本和分发: RepSetA保存RepSetA1和RepSetA2。 RepSetB保存RepSetB1和RepSetB2。 所有服务器都充当路由器,RepSetA1充当单个配置服务器。
我有一个“播放器”数据(10,000条记录,该对象包含“Id”和“名称”字段),我希望它在副本集之间进行分片(或分发),并在服务器之间进行克隆在同一副本集中。所以,仅举一个简单的例子: 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} );
我做错了什么?
答案 0 :(得分:0)
如果通过mongos进程连接到节点,它看起来都包含数据。从您的输出中,看起来所有节点上的所有数据都不可用。 RepSetA包含2个块,RepSetB应该不包含任何块。您可以通过直接连接节点而不是通过mongos来验证这一点 顺便说一句,如果您使用MongoDBs ObjectId作为_id(分片键),请考虑在另一个键上进行分片,因为这将导致所有插入在密钥更改为单调时成为一个节点。
答案 1 :(得分:0)
这很好。它并未显示所有数据都在所有服务器上。输出显示GamesDB.Player的所有块(数据)都在shard 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 }
这意味着平衡器尚未开始平衡您的块。当存在8个块差异时,平衡器才会启动。 http://www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-Balancing
您可以通过手动拆分块来强制平衡(如果您愿意) http://www.mongodb.org/display/DOCS/Splitting+Shard+Chunks
如果您希望更快地看到平衡,也可以减少块大小。 http://www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-ChunkSizeConsiderations