加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

这场MongDB事故暴露的潜在危机,你是否也正在忽视?

发布时间:2018-12-31 01:41:47 所属栏目:MySql教程 来源:张开威
导读:副标题#e# 一、MongoDB特性 MongoDB是一个可扩展的高性能基于文档的NoSQL数据库,具备但不限于以下特性: 无数据结构限制和高性能 MongoDB以文档结构的存储方式,能够更便捷的获取数据; MongoDB没有表结构的概念,每条记录可以有完全不同的结构,业务开发

在整个调整过程中,经历了多次压测,下面展示部分测试数据:

这场MongDB事故暴露的潜在危机,你是否也正在忽视?

服务器ip+信息采集时间组合分片测试数据

上表为最终的片键改造方案下的部分压测数据,可以看出,调整前后性能提升较大。

三、心得

我们整理一下mongodb在咪咕的运维心得,希望能抛砖引玉。

运维流程机制

  •  务必建立完善的运维管理流程,故障处理机制等;
  •  规范化、模板化:对日常运维务必做到规范化,比如安装规范,避免人为原因重复踩坑。

硬件配置

确保内存设置能满足性能需求:确保内存>索引容量+高频访问数据容量

  •  大多数情况下,MongoDB热数据(索引和最频繁访问的数据)全部缓存在RAM中时性能最好;
  •  相对于其它优化,扩大内存的效果尤为显著;如果热数据超过了单个服务器的RAM,此时往往需要考虑扩大内存或者分片。

使用SSD磁盘

  •  写操作负载高的应用采用SSD:SSD提供强大随机读取性能,大部分情况下符合MongoDB的数据访问模式。

使用RAID

  •  出于安全和性能考虑,可采用合适的RAID模式,推荐RAID-10。

选用多核和更快的CPU

  •  MongoDB在更快的CPU上提供更好的性能,且WiredTiger存储引擎能够充分利用多核处理器资源(并发线程数和cpu核心数量相等)。

系统配置

开启NTP时间同步

  •  使用复制集或者分片集群需要开启NTP时间同步,这对于MongoDB正常运行尤为重要。

禁用NUMA

  •  MongoDB运行在NUMA系统上会导致性能下降,因此需关闭NUMA配置。 
  1. linux6 修改/boot/grub/grub.conf中kernel,添加numa=off  
  2. linux7 修改/etc/grub2.cfg中linux16部分添加numa=off 

禁用Transparent Huge Pages

  •  数据库往往具有稀疏而不是连续的内存访问模式。应该在Linux机器上禁用THP以确保使用MongoDB获得最佳性能。 
  1. kernel 参数添加transparent_hugepage=never 

设置readahead

  •  预读值是文件操作系统的一个优化手段,程序请求读取一个页面的时候,文件系统会同时读取下面的几个页面并返回。
  •  设置合理的readahead值有利于提高MongoDB性能,使用MMAPv1引擎推荐设置为32或16,对于WiredTiger无论何种存储介质都建议设置为0。 
  1. blockdev --report  
  2. blockdev --setra 0 /dev/sda 

设置合适的磁盘调度策略

  •  磁盘调度策略应当根据应用类型和硬件配置进行设置,对于MongoDB,推荐使用noop。 
  1. sed -i '/vmlinuz-/s/$/ elevator=deadline/' /boot/grub/grub.conf 

文件系统选择

  •  MongoDB在WiredTiger存储引擎下建议使用XFS文件系统。

关闭数据库文件的atime

  •  操作系统会维护文件最后的访问时间metadata,对于数据库意味着每次文件系统每访问一个页就会提交一个写操作,这将降低整个数据库的性能,禁止系统对文件的访问时间更新会有效提高文件读取的性能。 
  1. /dev/xvdb /data xfs noatime,nodiratime 0 0 

设置合理的系统内核参数

系统为防止单个用户/进程占用大量资源(比如线程、文件等),在内核参数上进行了限制,这些限制默认值较低,这会导致MongoDB运行可能遭遇一些不必要的问题。因此应当根据实际情况对内核参数进行适当调整。

  1. mongo soft nofile 64000  
  2. mongo hard nofile 64000  
  3. mongo soft nproc 32000  
  4. mongo hard nproc 32000  
  5. fs.file-max=98000  
  6. kernel.pid_max=64000  
  7. kernel.threads-max=64000  
  8. vm.max_map_count=128000 

MongoDB配置

尽量避免使用单机

  •  单机不具备容错能力,生产中应当尽量避免使用,如处于某些限制只能使用单机,那么需要确保拥有完善的备份机制和故障恢复机制。

每台服务承载一个MongoDB实例

  •  为获得最佳性能,每个服务器只部署一个MongoDB实例,降低资源争夺;如一台服务器上需要运行多个MongoDB实例,应当为每个实例分配合理的内存,避免内存争夺导致oom。

分片使用多路查询路由

  •  在不同服务器上部署mongos,最好将mongos部署在应用服务器上,应用连接本机的mongos。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读