2013-10-25 18 views
0

以下是否适用于MongoDB分片?1个分片服务器是否可以设置副本而其他分区不可以

sh.addShard("shard01.local:27017"); 
sh.addShard("shard02.local:27017"); 
sh.addShard("rs0/shard03.local:27017,shard04.local:27017,shard05.local:27017"); 

含义,我设置了3个碎片,但只有第三个碎片是复制集。它不工作,因为configsrv不理解rs0。

MongoDB是否处理这个问题?或者如果其中一个分片是副本集,则所有分片都需要处于副本集中。

回答

1

虽然这不是一个好主意(每个非复制碎片都是单点故障,因此您可以将它们全部创建为非复制),但您可以混合使用复制碎片和非复制碎片。下面的最小工作示例。我的猜测是你在配置中的其他地方有错误。

# Create some directories 
mkdir -p ./s0/ ./s1/rs0 ./s1/rs1 ./s1/rs2 ./cfg/ 

# Start first shard 
mongod --logpath "s0.log" --dbpath ./s0/ --port 37017 --fork --shardsvr 

# Start second shard 
mongod --replSet s1 --logpath "s1-r0.log" --dbpath ./s1/rs0 --port 47017 --fork --shardsvr 
mongod --replSet s1 --logpath "s1-r1.log" --dbpath ./s1/rs1 --port 47018 --fork --shardsvr 
mongod --replSet s1 --logpath "s1-r2.log" --dbpath ./s1/rs2 --port 47019 --fork --shardsvr 

# Start config server and mongos 
mongod --logpath "cfg.log" --dbpath ./cfg/ --port 57040 --fork --configsvr 
mongos --logpath "mongos.log" --configdb localhost:57040 --fork 


# Configure rs 
mongo --port 47017 << 'EOF' 
rs.initiate(
    { _id: "s1", members:[ 
     { _id : 0, host : "localhost:47017" }, 
     { _id : 1, host : "localhost:47018" }, 
     { _id : 2, host : "localhost:47019" }] 
    }); 
EOF 


# Configure sharding 
mongo <<'EOF' 
db.adminCommand({ addshard : "localhost:37017" }); 
db.adminCommand({ addshard : "s1/"+"localhost:47017,localhost:47018,localhost:47019" }); 
db.adminCommand({enableSharding: "test"}) 
db.adminCommand({shardCollection: "test.foo", key: {bar: 1}}); 
EOF 
相关问题