sh.isBalancerRunning(): 错误
sh.isBalancerRunning(): false
我正在尝试 shard
一个 mongodb database
这样的:
1-启动shard replica set
的每个成员
mongod --shardsvr --port 27100 --replSet r1 --dbpath <some_path>\shardsvr\shardsvr1
mongod --shardsvr --port 27200 --replSet r2 --dbpath <some_path>\shardsvr\shardsvr2
2-启动每个成员config server replica set
mongod --configsvr --port 27020 --replSet cfg1 --dbpath <some_path>\configsvr\configsvr1
3- 连接到 config server replica set
mongo --port 27020
4-启动副本集
conf = {
_id: "cfg1",
members: [
{
_id:0,
host: "localhost:27020"
}
]
}
rs.initiate(conf)
5-启动mongos
并指定--configdb
参数
mongos --configdb cfg1/localhost:27020 --port 28000
6- 启动每个 shard
的 replica set
mongo --port 27100
var config = {_id: "r1", members: [{_id:0, host:"localhost:27100"}]}
rs.initiate(config)
exit
mongo --port 27200
var config = {_id: "r2", members: [{_id:0, host:"localhost:27200"}]}
rs.initiate(config)
exit
7- 连接到 mongos
以添加 shards
mongo --port 28000
sh.addShard("r1/localhost:27100")
sh.addShard("r2/localhost:27200")
8- 添加一些数据
use sharddb
for (i = 10000; i < 30000; i++){
db.example.insert({
author: "author" + i,
post_title: "Blog Post by Author " + i,
date: new Date()
});
}
db.example.count()
9- 启用 sharding
sh.enableSharding("sharddb")
10- 创建 index
作为 sh.shardCollection()
的一部分
db.example.ensureIndex({author : 1}, true)
sh.shardCollection("sharddb.example", {author: 1})
11- 检查 balancer
是否为 运行
sh.isBalancerRunning()
然而,在这一步中,我得到了一个 false
作为响应,我不知道我做错了什么才能得到这个。我遵循了 this 教程
的步骤
只有 20000 个文档,每个约 100 字节,可能只有 1 个块。
检查
use sharddb
db.printShardingStatus()
我重复了上面列出的步骤,得到了以下结果:
{ "_id" : "sharddb", "primary" : "shard02", "partitioned" : true }
sharddb.example
shard key: { "author" : 1 }
unique: false
balancing: true
chunks:
shard02 1
{ "author" : { "$minKey" : 1 } } -->> { "author" : { "$maxKey" : 1 } } on : shard02 Timestamp(1, 0)
mongos 会监控它添加到每个块的内容,并在看到足够的数据添加时通知配置服务器考虑拆分。然后当一个分片包含比另一个分片多几个块时,平衡器将自动激活。
如果您插入足够多的文档来触发自动拆分,或者手动拆分块,平衡器将开始工作。
我正在尝试 shard
一个 mongodb database
这样的:
1-启动shard replica set
mongod --shardsvr --port 27100 --replSet r1 --dbpath <some_path>\shardsvr\shardsvr1
mongod --shardsvr --port 27200 --replSet r2 --dbpath <some_path>\shardsvr\shardsvr2
2-启动每个成员config server replica set
mongod --configsvr --port 27020 --replSet cfg1 --dbpath <some_path>\configsvr\configsvr1
3- 连接到 config server replica set
mongo --port 27020
4-启动副本集
conf = {
_id: "cfg1",
members: [
{
_id:0,
host: "localhost:27020"
}
]
}
rs.initiate(conf)
5-启动mongos
并指定--configdb
参数
mongos --configdb cfg1/localhost:27020 --port 28000
6- 启动每个 shard
replica set
mongo --port 27100
var config = {_id: "r1", members: [{_id:0, host:"localhost:27100"}]}
rs.initiate(config)
exit
mongo --port 27200
var config = {_id: "r2", members: [{_id:0, host:"localhost:27200"}]}
rs.initiate(config)
exit
7- 连接到 mongos
以添加 shards
mongo --port 28000
sh.addShard("r1/localhost:27100")
sh.addShard("r2/localhost:27200")
8- 添加一些数据
use sharddb
for (i = 10000; i < 30000; i++){
db.example.insert({
author: "author" + i,
post_title: "Blog Post by Author " + i,
date: new Date()
});
}
db.example.count()
9- 启用 sharding
sh.enableSharding("sharddb")
10- 创建 index
作为 sh.shardCollection()
db.example.ensureIndex({author : 1}, true)
sh.shardCollection("sharddb.example", {author: 1})
11- 检查 balancer
是否为 运行
sh.isBalancerRunning()
然而,在这一步中,我得到了一个 false
作为响应,我不知道我做错了什么才能得到这个。我遵循了 this 教程
只有 20000 个文档,每个约 100 字节,可能只有 1 个块。
检查
use sharddb
db.printShardingStatus()
我重复了上面列出的步骤,得到了以下结果:
{ "_id" : "sharddb", "primary" : "shard02", "partitioned" : true }
sharddb.example
shard key: { "author" : 1 }
unique: false
balancing: true
chunks:
shard02 1
{ "author" : { "$minKey" : 1 } } -->> { "author" : { "$maxKey" : 1 } } on : shard02 Timestamp(1, 0)
mongos 会监控它添加到每个块的内容,并在看到足够的数据添加时通知配置服务器考虑拆分。然后当一个分片包含比另一个分片多几个块时,平衡器将自动激活。
如果您插入足够多的文档来触发自动拆分,或者手动拆分块,平衡器将开始工作。