我在一个有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.
任何人都知道如何解决这个问题? 谢谢, 伊万
答案 0 :(得分:0)
从快速查看代码,看起来我们可以容忍大约30 集群中服务器之间的偏差秒数。在linux上,我们 建议人们使用ntp将偏斜保持在最低限度(ntp通常保持不变 它在一两秒内)。通常已经安装了ntp 大多数Linux发行版。
使用以下命令执行一次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",