移动块时,MongoDB Socketexception

我在我的mongodb数据库集群中有2个碎片,有1个mongos服务器。 我总共有8个服务器,一个副本集有5个,另外3个。我有一个集合在集群中分割,但最近当我尝试一个块移动时,我收到套接字例外。

所有服务器都在EC2上运行,大部分在相同的可用区域。 发送服务器和接收服务器位于不同的可用区域。

以下是日志的一些摘录:

发送服务器:

星期五5月20日07:53:28 [conn6158] moveChunk数据传输进度:{active:false,ns:“social_advantage_analytics.edges”,来自:“slytherin / draco:27018”,min:{_id:“100000007993210_116269473289”},max :{_id:“100000012316922_167580256615048”},状态:“失败”,errmsg:“套接字exception”,计数:{克隆:0,克隆的字节数:0,catchup:0,稳定:0},好:1.0} 0

5月20日星期五07:53:28 [conn6158]警告:moveChunk错误传输数据导致迁移中止:{active:false,ns:“social_advantage_analytics.edges”,来自:“slytherin / draco:27018”,min:{_id:“ 100000007993210_116269473289“},max:{_id:”100000012316922_167580256615048“},状态:”失败“,errmsg:”套接字例外“,计数:{克隆:0,克隆字节数:0,catchup:0,稳定:0},正确:1.0 }

接收服务器:

5月20日14:51:10 [migrateThread]即将login元数据事件:{_id:“george-2011-05-20T14:51:10-293”,server:“george”,clientAddr:“(NONE) time:new Date(1305903070637),what:“moveChunk.to”,ns:“social_advantage_analytics.edges”,details:{min:{_id:“100000007993210_116269473289”},max:{_id:“100000012316922_167580256615048”}注意:中止“}}

5月20日星期五14:51:10 [migrateThread]错误:迁移失败:套接字exception

碎片服务器:

Fri May 20 07:53:05 [Balancer] balacer move failed:{cause:{active:false,ns:“social_advantage_analytics.edges”,from:“slytherin / draco:27018”,min:{_id:“100000007993210_116269473289”} ,max:{_id:“100000012316922_167580256615048”},状态:“失败”,errmsg:“套接字exception”,计数:{克隆:0,克隆的字节数:0,catchup:0,稳定的:0},ok:1.0},errmsg :“data transfer error”,ok:0.0} from:pansy to:percy chunk:{_ id :“social_advantage_analytics.edges- id ”100000007993210_116269473289“”,lastmod:Timestamp 90000 | 354,ns:“social_advantage_analytics.edges”,min: {_id:“100000007993210_116269473289”},max:{_id:“100000012316922_167580256615048”},分片:“pansy”}

这是一个老问题,但是要提供一些重要的事情:

  • 你正在运行什么版本的MongoDB?
  • 群集中的每个服务器是否可以与分配的端口(27018)上群集中的每个其他服务器通信? 这包括数据库碎片和mongos(平衡器)。

  • 碎片必须互相交谈以复制数据,并且由于发送和接收节点位于不同的区域中,它们是否在同一个安全组中? 有本地防火墙阻止通信?

  • 考虑检查每个服务器上mongod进程的打开文件描述符的数量。 在服务器代码中强制执行20k,但通常还有另一个限制。 以下是一些帮助的命令:

    lsof -p <pid of mongod> | wc -l su - mongod # or whatever user mongod is running as ulimit -n # => some systems default to 1024