项目原因,最近在对MongoDB进行数据存储优化
 
原有问题:
日志数据量比较大,存到一张表,需要手工定时删除数据,且删除数据时间按天算
数据会定时打包到HDFS,查询时间很慢,需要优化
机器内存占用过大,副本集主节点内存占用超过90%,其他节点超过80%
 
解决方法:
对日志进行按天写表,定时删除历史表
对日志表增加TTL索引,定时删除过期数据
一次创建自动增加索引,索引查询
 
 
本次问题来自增加索引,数据量大表的,增加索引方式,应该为后台增加[background: true],TTL TimeToLive 创建方式为增加expireAfterSeconds,单位为秒
语句如下:
 db.KafkaFpInfo.createIndex({"TrackTime":1},{background: true,expireAfterSeconds: 1728000})
1、执行语句后,发现主节点,已经看到索引生成进度日志,服务器内存正常,CPU从100%升级到300%左右;
2、看到主节点索引生成完成后,开始同步从节点
3、此时,主节点日志报错,显示两个从节点心跳丢失;三副本,两个节点丢失,副本集进入恢复模式,废了
4、查看从节点机器进程,发现两台MongoDB进程已经崩溃;尝试启动服务,发现跑索引,跑到10%时,服务返回超时
 
Job for mongodb.service failed because a timeout was exceeded. See "systemctl status mongodb.service" and "journalctl -xe" for details.

查看明细 "systemctl status mongodb.service"
mongodb.service start operation timed out. Terminating.
mongodb.service stop-final-sigterm timed out. Killing.
5、查看索引只跑到了10%,猜测是原因是索引未完成,就超时了,尝试对服务增加超时配置;
TimeoutSec=0     # 单位是秒,0为不限制
 
cat /etc/systemd/system/mongodb.service
[Unit] Description=mongodb_service
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongodbuser
Group=mongodbuser
# (open files)
LimitNOFILE=64000
Type=forking
ExecStart=/data/mongodb/mongobin/bin/mongod --config /etc/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/mongodb/mongobin/bin/mongod --shutdown --config /etc/mongodb.conf
PrivateTmp=true
TimeoutSec=0 # 单位是秒,0为不限制 [Install]
WantedBy=multi-user.target
6、再次重启从节点mongoDB服务,日志显示索引生成中,直到报索引生成100%,启动服务命令未再报超时,服务启动成功。
 
正常情况下,该问题应该是解决了;但又有的如下的报错:
“could not find member to sync from” 
猜测可能是同步出问题了。
尝试关闭一个从节点的mongoDB服务,删除该从节点的上数据。让数据重新同步过来。
因数据比较大,启动后IO持续比较高。  [用iotop 查看磁盘IO]
 
经过漫长的几小时,这个从节点终于恢复了。
 

MongoDB加索引DB崩溃的问题的更多相关文章

  1. MongoDB加索引

    1.登陆MongoDB, 命令行在MongoDB主目录下执行:mongo -port 27017 2.切换至需要添加索引的db 并授权 use MeetingBooking db.auth({&quo ...

  2. 大数据环境下mongoDB要加索引

    mongodb在存储大数据时,对查询的字段需要添加索引,我测试的是阿里云30多万的数据量,不加索引查询已经到8秒,而添加索引之后是毫秒级! 为集合加索引 mongodb支持内嵌属性添加索引 db.ag ...

  3. MongoDB数据库索引构建情况分析

    前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能.这时,就需要评判当前索引的构建情况是否合理.有4种方法可以使 ...

  4. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  5. 五、MongoDB的索引

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...

  6. MongoDB之索引

    索引是用来加快查询的,这里不解说索引的原理和数据结构.事实上大部分数据库的索引就是B+Tree,想要了解的同学能够看索引原理,要掌握怎样为查询配置最佳索引会有些难度. MongoDB索引差点儿和关系型 ...

  7. 关于mongodb创建索引的一些经验总结(转)

    查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...

  8. mongodb 的索引

                索引加快了查询速度,但是降低了写入速度.所以不要在没必要的属性上加索引.             在 mongodb 中索引可以按倒序/正序创建,便于排序.           ...

  9. 总结:如何使用redis缓存加索引处理数据库百万级并发

    前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...

随机推荐

  1. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  2. 谈谈什么是MySQL的表空间?

    今天我要跟你分享的话题是:"大家常说的表空间到底是什么?究竟什么又是数据表?" 这其实是一个概念性的知识点,当作拓展知识.涉及到的概念大家了解一下就好,涉及的参数,留个印象就好. ...

  3. sublime 3 phpfmt配置(大括号对齐)

    默认选项:  default: phpfmt.sublime-settings:         {         "version": 2,         "php ...

  4. web安全原理分析-SQL注入漏洞全解

    简介 靶场:榆林学院信息安全协会--入侵榆大实验靶场 数字型注入 1 字符型注入 1 布尔注入 1.布尔注入简介 mysql bool注入是盲注的一种.与报错注入不同,bool注入没有任何报错信息输出 ...

  5. 实验吧[WEB]——what a fuck!这是什么鬼东西?

    解题链接:http://ctf5.shiyanbar.com/DUTCTF/1.html 原题链接:http://www.shiyanbar.com/ctf/56 解题必看: 的jother编码定义: ...

  6. 图像分割必备知识点 | Dice损失 理论+代码

    本文包含代码案例和讲解,建议收藏,也顺便点个赞吧.欢迎各路朋友爱好者加我的微信讨论问题:cyx645016617. 在很多关于医学图像分割的竞赛.论文和项目中,发现 Dice 系数(Dice coef ...

  7. vulnhub: DC 4

    信息收集: yurang@kali:~$ nmap -sn 192.168.76.1/24 Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-04 ...

  8. 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)

    今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...

  9. 给你的C/C++学习路线建议

    因为程序员的高工资,吸引了大部人学习编程,但是通过书籍和视频来学习,总是别人推荐一点是一点,那么如何才能系统有效的学习呢?今天就为你来介绍~ C语言是所有学习编程的人都应该首要学习的语言,今天就C语言 ...

  10. 技巧收藏|10个JavaScript常用数组操作方法

    摘要:这篇文章,向大家展示了在日常开发中,数组有哪些小技巧值得借鉴和学习. 在web前端开发第二阶段Javascript中,数组是一个重要且常见的知识点,我们经常将数据存储在数组中,遍历数组或替换数组 ...