我的 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”,最小值:{_id:“100000007993210_116269473289”},最大值:{_id:“100000012316922_167580256615048”},状态:“失败”,errmsg:“套接字异常”,计数:{克隆:0,克隆字节数:0,追赶:0,稳定:0},确定:1.0} 我的内存使用量:0
5 月 20 日星期五 07:53:28 [conn6158] 警告:moveChunk 传输数据时出错,导致迁移中止:{active:false,ns:“social_advantage_analytics.edges”,来自:“slytherin/draco:27018”,最小值:{_id:“100000007993210_116269473289”},最大值:{_id:“100000012316922_167580256615048”},状态:“失败”,errmsg:“套接字异常”,计数:{克隆:0,克隆字节数:0,追赶:0,稳定:0},确定:1.0}
接收服务器:
5 月 20 日星期五 14:51:10 [migrateThread] 即将记录元数据事件:{ _id:“george-2011-05-20T14:51:10-293”,服务器:“george”,clientAddr:“(NONE)”,时间:新日期 (1305903070637),内容:“moveChunk.to”,ns:“social_advantage_analytics.edges”,详细信息:{最小值:{ _id:“100000007993210_116269473289” },最大值:{ _id:“100000012316922_167580256615048” },注释:“中止” } }
5 月 20 日星期五 14:51:10 [migrateThread] 错误:迁移失败:套接字异常
分片服务器:
5 月 20 日星期五 07:53:05 [Balancer] balacer 移动失败:{原因:{active:false,ns:“social_advantage_analytics.edges”,来自:“slytherin/draco:27018”,最小值:{_id:“100000007993210_116269473289”},最大值:{_id:“100000012316922_167580256615048”},状态:“失败”,errmsg:“套接字异常”,计数:{克隆:0,克隆字节数:0,追赶:0,稳定:0},确定:1.0},errmsg:“数据传输错误”,确定:0.0}从:pansy 到:percy 块:{_id: “social_advantage_analytics.edges-ID“100000007993210_116269473289”, lastmod:时间戳 90000|354,ns:“social_advantage_analytics.edges”,最小值:{_id:“100000007993210_116269473289”},最大值:{_id:“100000012316922_167580256615048”},碎片:“pansy”}
答案1
这是一个较老的问题,但需要提供一些重要信息:
- 您正在使用哪个版本的 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