Mongodb碎片平衡器卡在状态0

时间:2015-04-24 09:53:31

标签: mongodb sharding

我在一个有2个分片的集合上进行了分片。 Mongodb版本 2.6.4 。 一切看起来都不错,但100%的数据都在一个碎片上。

当我这样做时:

use config
db.locks.find( { _id : "balancer" } ).pretty()

我明白了:

{
    "_id" : "balancer",
    "state" : 0,
    "who" : "ip-10-0-11-128:27018:1424099612:1804289383:Balancer:846930886",
    "ts" : ObjectId("553a1223e4d292075ec2a8a6"),
    "process" : "ip-10-0-11-128:27018:1424099612:1804289383",
    "when" : ISODate("2015-04-24T09:51:31.498Z"),
    "why" : "doing balance round"
}

所以平衡器停留在状态0.我试图重新启动它,但它仍处于状态0。

此外:

sh.isBalancerRunning()
> false

可是:

sh.getBalancerState()
> true

我的日志文件中的错误:

    2015-04-24T10:15:47.921+0000 [Balancer] scoped connection to 10.0.11.128:20000,10.0.11.159:20000,10.0.11.240:20000 not being returned to the pool
2015-04-24T10:15:47.921+0000 [Balancer] caught exception while doing balance: error checking clock skew of cluster 10.0.11.128:20000,10.0.11.159:20000,10.0.11.240:20000 :: caused by :: 13650 clock skew of the cluster 10.0.11.128:20000,10.0.11.159:20000,10.0.11.240:20000 is too far out of bounds to allow distributed locking.

任何人都知道如何解决这个问题? 谢谢, 伊万

1 个答案:

答案 0 :(得分:0)

从快速查看代码,看起来我们可以容忍大约30 集群中服务器之间的偏差秒数。在linux上,我们 建议人们使用ntp将偏斜保持在最低限度(ntp通常保持不变 它在一两秒内)。通常已经安装了ntp 大多数Linux发行版。

Mongodb user group

使用以下命令执行一次ntp synx

"network_lo": "127.0.0.0",
    "ec2_block_device_mapping_root": "/dev/sda1",
    "selinux": "false",
    "uptime_seconds": 127412,
    "ec2_reservation_id": "r-cd786568",
    "sshdsakey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "ec2_block_device_mapping_ami": "/dev/sda1",
    "memorysize": "3.66 GB",
    "swapsize": "0.00 kB",
    "netmask": "255.255.255.192",
    "uniqueid": "24wq0see",
    "kernelmajversion": "3.2",