我对使用Shard使用mongos有疑问,我在开发环境中构建了分片集群 我有两个分片(不包括仅用于测试的replset)一个配置和一个mongos 当我关闭一个分片时,mongos无法找到数据(例如find(),count()...)。它会抛出一个套接字异常 像这样: 127.0.0.1:20000的套接字异常[CONNECT_ERROR] 代码:11002 任何人都可以帮我弄清楚问题出在哪里,我看到之前在分片集群中写过的文档如果一个碎片崩溃了mongos仍然可以工作。 我感谢你的帮助,我使用这些shell来构建它
shard 1
mongod --shardsvr --port 10000 --dbpath c:\shard\data\shard1\r0 --oplogSize 64 --logpath c:\shard\logs\r0.log --logappend
shard2
mongod --shardsvr --port 20000 --dbpath c:\shard\data\shard2\r0 --oplogSize 64 --logpath c:\shard\logs\r3.log --logappend
config
mongod --configsvr --dbpath c:\shard\data\config --port 40000 --logpath c:\shard\logs\config.log --logappend
mongos
mongos --configdb 127.0.0.1:40000 --port 50000 --chunkSize 1 --logpath c:\shard\logs\mongos.log --logappend
mongo 127.0.0.1:50000/admin
db.runCommand({addshard:"127.0.0.1:10000",name:"ShardSetA"})
db.runCommand({addshard:"127.0.0.1:20000",name:"ShardSetB"})
db.runCommand({enablesharding:"Staff"});
var server=["127.0.0.1:10000","127.0.0.1:20000"]
db.runCommand({shardcollection:"Staff.StaffInfo",key:{StaffName:1}})
for ( var x=65; x<=65+25; x+=10 ){
var index=x+10>65+25?65+25:x+10;
db.runCommand( { split : "Staff.StaffInfo" , middle : { StaffName: String.fromCharCode(index)} } );}
var i=0;
for ( var x=65; x<=97+25; x+=10 ){db.adminCommand( {moveChunk : "Staff.StaffInfo" ,find : {StaffName: x}, to : server[i%2] });i++}
答案 0 :(得分:0)
我解决了这个问题 这个问题有三种情况 1.从普通分片查询,mongodb可以提供正确的数据 2.来自所有分片的查询(包括离线分片)mongodb将抛出异常 3.来自离线shard mongodb wiil抛出异常的查询
所以如果你想保持高性能分片,请使用replset! 如果您从其他dirvers查询,请设置部分标志以提供来自普通分片的返回数据