`
vtrtbb
  • 浏览: 359971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]MongoDB常见问题处理

 
阅读更多

说明: 这里的问题是我在看MongoDB官网文章时,从里面总结出来的。

mongod process "disappeared"

           这个说的是mongodb进行消失,可以理解为死掉等。可以从下面中找问题在
               #grep mongod /var/log/messages

               #grep score /var/log/messages

Socket errors in sharded clusters and replica sets

         echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time 默认是7200

关于tomm many open files:

           First:检查以下几项:

          lsof | grep mongod

          lsof | grep mongod | grep TCP

          lsof | grep mongod | grep data | wc

       可以用:ulimit解决: ulimit -n X

 

High TCP Connection Count

TCP Connection过大时,可以检查是不是client apps使用连接池问题

Mongod (hard) connection limit

            这个连接数限制在20000,可以手动调整大小

Data files count with very large databases

            数据在T级以上时,确定是否做了限制(手动增加),再用repairdatabase时,会同时有2 copies

No space left on device

            这个时候reads仍然在进行,要做的是first shutdown servers, then to delete some      data and compact

     Checking Siez of a collection(检查集合)

              >db.(collectionname).validate();

 

NUMA

       Linu,Numa and MongoDB不能很好的一起工作。如果机器在numa硬件运行的时候,需要把它关闭。一般出现大规模性能慢下来或一段时间cpu占用很高的system time 。可以从日志中抓取NUMA字。(我也翻译不出这个NUMA是什么意思)

关闭的方法:一:在启动mongoDB的时候:

                    numactl --interleave=all ${MONGODB_HOME}/bin/mongod --config conf/mongodb.conf

                   二:在不关闭mongoDB时:

                   echo 0 > /proc/sys/vm/zone_reclaim_mod

         案例:http://blog.csdn.net/weiyuanke/article/details/7639915http://huoding.com/2011/08/09/104 http://www.ttlsa.com/html/1211.html

NFS

            官网不建意采用NFS系统文件运行mongoDB,因为NFS版本问题会导致性能很低或无法工作

SSD

          mongoDBSSD(固态硬盘)运行很快,但是比RAM低。可以用mongoperf进行硬盘性能状态分析。

Virtualization

            mongoDB在虚拟化上运行的很好,如OpenVZ 兼容EC2 VMWare也可以但是clone的时候会出现一些问题由其在a member of a replica set(一个复制节点上),要想可用的,需要journaling处在可用状态,再进行clone。如果没有的开启journaling的时候,stop m ongod ,clone, and tehn restart     

        注意:在MongoDB中要用IP地址不要使用机器名或localhost,不然会出现链接不数据库的。

Journal(日志):

日志的开启:--journal ;关闭:--nojournal ,默认时间是100ms

              启动时会在数据目录下创建一个journal地文件目录,在受到毁坏时,再启动mongoDB不需要再运行repair,它会自动恢复的。

               可以通过运行journalLatencyTest测试写入磁盘的性能和同步性能。

                >use admin

                >db.runCommand("journalLatencyTest")

Backup with --journal journal是支持回滚恢复。

journaling的时候,stop m ongod ,clone, and tehn restart     

        注意:在MongoDB中要用IP地址不要使用机器名或localhost,不然会出现链接不数据库的。

The Linux Out of Memory OOM Killer

情况一:

Feb 13 04:33:23 hostm1 kernel: [279318.262555] mongod invoked oom-killer: gfp_mask=0x1201d2, order=0, oomkilladj=0

    这是因为内存溢出导致mongodb进程被刹死

情况二:

   内在没有溢出,能过db..serverStatus()mongostat查看内存virtualbytes - mappedbytes的界限

情况三:

    ulimit的限制

t:minor-latin; mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family: Calibri;mso-hansi-theme-font:minor-latin'>中journal是支持回滚恢复。 journaling的时候,stop m ongod ,clone, and tehn restart     

        注意:在MongoDB中要用IP地址不要使用机器名或localhost,不然会出现链接不数据库的。

 

mongodb占用空间过大的原因,在官方的FAQ中,提到有如下几个方面:

 1、空间的预分配:为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间,而且申请的量从64M128M256M那样的指数递增,直到2G为单个文件的最大体积。随着数据量的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。

         2、字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储,如果value域相对于key域并不大,比如存放数值型的数据,则数据的overhead是最大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用空间就小了,但这就要求在易读性与空间占用上作为权衡了。我曾建议作者把字段名作个index,每个字段名用一个字节表示,这样就不用担心字段名取多长了。但作者的担忧也不无道理,这种索引方式需要每次查询得到结果后把索引值跟原值作一个替换,再发送到客户端,这个替换也是挺耗费时间的。现在的实现算是拿空间来换取时间吧。

         3、删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只标记“已删除”即可,以后还可以重复利用。

RepairDatabase命令:

  数据库总会出现问题的,关于修复的方法如下:

运行db.repairDatabase()来整理记录,但这个过程会比较缓慢。

当MongoDB做的是副本集群时:可以直接把数据rm掉,然后再重新启动。

       当在不是primariy server上运行时,会得到一个"clone failed for wkgbc with error: query failed wkgbc.system.namespaces"

 解决方法:为了修复,需要restart server 不加--replSet选项并且要选用不同的端口

LINUX下找出哪个进程造成的IO等待很高的方法:

       可以判断是不是IO问题造成的:

          #/etc/init.d/syslog stop

          #echo 1 > /proc/sys/vm/block_dump

          #dmesg |egrep "READ|WRITE|dirtied"|egrep -o '([a-zA-Z*])'|sort|uniq -c|sort -rn|head

下面是从网上找的案例:

昨天我访问mongodbpython程序开始出错,经常抛出AssertionError异常,经查证只是master查询异常,slave正常,可判断为master的数据出了问题。

修复过程:

1、在masterdb.repairDatabase(),不起作用; 这个时间很长

2、停止slave的同步;

3、对slavemongodump,备份数据;

4、对mastermongostore,把备份数据恢复,使用–drop参数可以先把原表删除。

5、恢复slave的同步。

实例二:碎片整理-replSet架构

1rs.freeze(60)    60s内该机器无法成为primary

2、在primary机上进行rs.stepDown([120]) 让该机器成为从节点且在120s内不会成为primary

3、在primary ,可以将data的数据删掉 ,启动。数据会自动两步上去的。

 

转:http://blog.chinaunix.net/uid-23284114-id-3331545.html

分享到:
评论

相关推荐

    mongodb 常见问题处理方法收集

    以上就是MongoDB常见问题的一些处理方法。在日常运维中,理解并掌握这些问题的解决方案对于提升MongoDB系统的稳定性和效率至关重要。同时,定期更新MongoDB到最新版本、备份数据、监控系统性能以及遵循最佳实践也是...

    mongodb3.2.4说明文档

    这部分内容解答了关于 MongoDB 存储方面的一些常见问题。 #### 十、复制 **10.1 复制介绍** 复制是 MongoDB 中一种重要的高可用性机制,通过在多个服务器之间复制数据,可以实现数据冗余和故障转移。 **10.2 ...

    阿里巴巴:玩转MongoDB从入门到实战.pdf

    6. **MongoDB最佳实践**:书中分享了如何优化MongoDB的使用,避免常见误区,如误解其可靠性问题,以及如何利用内嵌文档和数组代替JOIN操作来提高性能。 7. **MongoDB基本概念**:与关系数据库对比,MongoDB有数据库...

    MongoDB常见18道面试题及答案.docx

    5. GridFS:MongoDB使用GridFS来存储大文件,将文件拆分为多个小文档,解决单个BSON文档大小限制问题,便于管理和检索。 6. 数据文件大:预分配空间策略防止文件碎片,提高写入效率。 7. 更新迁移中的块:更新会...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    MongoDBTemplate是Spring Data MongoDB的核心组件,它提供了丰富的API来执行常见的数据库操作。 首先,让我们深入理解`MongoDBTemplate`。它是MongoDB操作的抽象层,封装了大量的CRUD(创建、读取、更新、删除)...

    MongoDB with F#

    MongoDB 中的一个常见问题是大量使用字符串作为键名,这可能导致类型不一致和潜在的数据错误。F# 的强类型系统可以在这里发挥作用: - **定义自定义类型**:通过定义特定的数据类型,可以确保键名的一致性和类型的...

    springmvc+mybatis+mongoDB

    这种技术栈既能够充分利用Spring的全面功能,又能够满足处理不同类型数据的需求,是当前企业级开发的常见选择。在实际项目中,开发者需要理解每项技术的核心特性,并熟练掌握它们的整合方式,以便构建出高效、健壮的...

    MongoDB4.2.21 Linux版本安装包

    在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者的常见任务。本篇将详细介绍在Linux上安装MongoDB 4.2.21的步骤,以及相关的知识点。 首先,我们需要了解MongoDB的体系结构。MongoDB由以下几个核心...

    mongodb+redis资源

    MongoDB和Redis是两种非常流行的NoSQL数据库,它们在现代数据存储和处理中扮演着重要角色。...同时,这些资源也可能包含一些最佳实践和常见问题解决方案,对于解决日常运维中遇到的问题非常有帮助。

    MongoDB应用设计模式:MongoDB Applied Design Patterns

    - **监控和诊断**:学习使用MongoDB的内置工具进行性能监控和问题诊断,如mongostat、mongotop等。 - **写操作优化**:批量写入、批量更新和事务管理,减少网络往返,提高写入效率。 5. 安全性与备份: - **身份...

    Java开发面试-MongoDB专区

    此外,面试官还可能会问到如何处理MongoDB的事务和并发访问等问题。此外,面试官可能会询问关于MongoDB的性能优化和数据模型设计方面的问题。例如,如何通过索引提高查询性能,如何使用分片技术实现数据的水平扩展,...

    MongoDB Cookbook

    最后,书中可能会涵盖一些最佳实践和性能调优技巧,包括如何监控和优化数据库性能,以及如何解决常见的运行时问题。这些内容对于任何希望最大化MongoDB潜力的开发者和管理员都是必不可少的。 总而言之,《MongoDB ...

    MongoDB Applied Design Patterns

    书中还讨论了如何在MongoDB中处理多对多关系,这是一个相对复杂的关系类型,但在Web应用中非常常见。由于MongoDB的文档模型的扁平化特性,处理多对多关系可能需要一些创新的方法,例如通过引用到单独的关联表或使用...

    Laravel开发-mongodb

    9. **CRUD操作**:与MySQL类似,Laravel-MongoDB支持常见的增删查改操作,如`create()`,`find()`,`update()`,`delete()`等。 10. **聚合框架**:MongoDB提供了强大的聚合框架,用于处理复杂的分析查询,Laravel-...

    MongoDB_参考手册

    18. **故障排查**:收集了常见问题及其解决方案,如连接问题、性能瓶颈等,帮助快速定位并解决问题。 19. **软件获取**:提供了MongoDB软件的下载链接,包括官方版本与第三方包管理器(如Ubuntu、Debian、CentOS、...

    mongodb-linux 4.0.6

    同时,了解如何监控和优化MongoDB的性能,以及如何处理常见的错误和故障,也是非常重要的。 在Linux环境下,你可以利用系统日志、监控工具如`top`和`htop`,以及MongoDB自带的`mongostat`和`mongotop`命令来监控...

    Mongodb视频-燕十八 mongodb视频教程全集21讲+mongodb高级实战开发视频教程

    - 常见性能问题及其解决方案。 - 系统监控工具的使用方法。 - 内存、CPU等资源的优化策略。 **第10讲:安全性** - 认证机制的配置方法。 - 授权模型的理解与实践。 - 数据加密技术和安全策略的应用。 **第11讲:...

Global site tag (gtag.js) - Google Analytics