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 会监控它添加到每个块的内容,并在看到足够的数据添加时通知配置服务器考虑拆分。然后当一个分片包含比另一个分片多几个块时,平衡器将自动激活。

如果您插入足够多的文档来触发自动拆分,或者手动拆分块,平衡器将开始工作。