zoukankan      html  css  js  c++  java
  • mongodb监听oplog时发生的一个问题处理

    1月底上线时,遇到一个问题,3.0任务创建,没有同步到4.0的表中。之前团队小伙伴做了监听oplog操作。

    原因剖析:

    1、oplog监听应该是监听了有问题的从节点,所以没有监听到

    2、从节点为什么出问题。继续往下看

    1)可以先查看下述链接,关于mongo的此问题的bug描述:https://jira.mongodb.org/browse/SERVER-30939

    2)mongo的从节点不可用是因为在不停的创建索引。如果数据跟索引全部同步完成了,从节点是可以恢复的。

    问题触发条件:对很多个集合后台创建索引,mongo会进入一种状态,其中一个或多个“repl index builder”线程会无限循环,从而一次又一次地重复创建索引。关键是,这个不是必现,多做测试可以出现。

    3)风险:

    这个问题需要尽快解决,不然会是一个大问题。如果这时主节点失效,发生切换,数据同步延迟,会导致数据丢失

    4)解决思路:不要同时对多个集合后台创建索引。

    5)解决方法:

    方法一:项目中是遍历集合,创建索引的间隙做适当的sleep操作

    方法二:是否创建索引做判断。

    经排查创建索引的集合中,有很多只有几十、几百条数据。数据量较小,创建索引没意义。所以,可以对超出一万条记录的集合创建索引。这样能减少创建索引的操作次数

    方法三:mongo3.6之后解决了这个问题,可以升级到4.0+版本,4.0相较于3.6,change stream有变化。

    3、问题严重性:

    这个问题,每天4点定时任务索引创建,连续观察三天,都是从库到9:30-10:20左右才完全恢复可用。所以不得不改了。还好10:30之前创建3.0任务这个操作较少。所以问题反馈的不多。

    4、实践验证

    因为升级4.0还要做业务适配,还要做数据迁移及验证,且赶在过年前了。所以用了解决方法的前两个方法操作。创建索引那里修改并上线。观察几天此问题没有再次出现。

  • 相关阅读:
    CSS3阴影 box-shadow的使用和技巧总结[转]
    $.getJSON(url,function success(){})回调函数不起作用
    实现最小宽度的几种方法及CSS Expression[转]
    关于sql 中 group by 和 having
    hackerrank DFS Edges
    hackerrank [Week of Code 33] Bonnie and Clyde
    AtCoder Regular Contest 076
    大模数乘法模板
    AtCoder Grand Contest 016
    CodeChef June Challenge 2017
  • 原文地址:https://www.cnblogs.com/mabiao008/p/14370160.html
Copyright © 2011-2022 走看看