MongoDB 2.4.8同步线程报错:BSONObj size invalid

有次突然观察到线上很多获取图片出现响应码500的错误。由于历史遗留原因,以前的图片文件保存在MongoDB的GridFS里面。这次突然出现获取图片500的错误,很有可能MongoDB出问题了。

用mongo命令连接到PRIMARY节点上去查看副本集的状态,如下:

ptcupload:PRIMARY> db.version()
2.4.8
ptcupload:PRIMARY> rs.status()
{
    "set" : "ptcupload",
    "date" : ISODate("2016-04-11T15:56:08Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "ptcupload-mongodb-001:27018",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 6355878,
            "optime" : Timestamp(1460390155, 1),
            "optimeDate" : ISODate("2016-04-11T15:55:55Z"),
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "ptcupload-mongodb-002:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 45351,
            "optime" : Timestamp(1459863715, 2),
            "optimeDate" : ISODate("2016-04-05T13:41:55Z"),
            "lastHeartbeat" : ISODate("2016-04-11T15:56:08Z"),
            "lastHeartbeatRecv" : ISODate("2016-04-11T15:56:08Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "syncThread: 10334 BSONObj size: 1853163520 (0x0008756E) is invalid. Size must be between 0 and 16793600(16MB) First element: que: ?type=105",
            "syncingTo" : "ptcupload-mongodb-001:27018"
        },
        {
            "_id" : 2,
            "name" : "ptcupload-mongodb-003:37018",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 5992973,
            "lastHeartbeat" : ISODate("2016-04-11T15:56:07Z"),
            "lastHeartbeatRecv" : ISODate("2016-04-11T15:56:07Z"),
            "pingMs" : 0
        }
    ],
    "ok" : 1
}

整个副本集由一个PRIMARY、一个SECONDARY和一个ARBITER节点组成。从上面输出的副本集状态可以看到SECONDARY节点同步出现了问题:

"lastHeartbeatMessage" : "syncThread: 10334 BSONObj size: 1853163520 (0x0008756E) is invalid. Size must be between 0 and 16793600(16MB) First element: que: ?type=105"

还观察到SECONDARY节点的uptime为45351秒(12.59小时),远小于PRIMARY节点的uptime. 由此,怀疑12.59小时前SECONDARY节点宕机自动重启过。

我司MongoDB数据库有专门的数据库管理员管理,我们业务使用方没有查看服务器相关日志的权限,因此不方便调查故障原因。不过,对于这种情况,有一种修复办法,即将有问题的SECONDARY节点撤掉,重新加一个新的SECONDARY节点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Replica Set功能 1, Replica Set是指一组服务器的集群,其中有一个主服务器,用于处理用户的请...
    持续进步者阅读 9,315评论 2 10
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 9,002评论 0 7
  • 刚接触MongoDB,就要用到它的集群,只能硬着头皮短时间去看文档和尝试自行搭建。迁移历史数据更是让人恼火,近10...
    davidpp阅读 51,819评论 9 78
  • 老夫子的思路永远在礼的道路上一去不复返,在他看来,学会文化知识,如果没有礼仪的约束,人仍然还是有原始性的;只有约束...
    海水蓝阅读 1,261评论 0 0
  • 01 从梦境中醒来的时候,混沌中透过窗帘看见窗外熹微的光。 听到耳旁均匀的呼吸声,顾晚微微偏头看向身侧,借着微弱的...
    时挽阅读 4,328评论 2 7