问题

  前一阵有一个数据导出需求,按照各种数据库的使用方法,使用MongoExport方法导出数据,将数据导出到本地文件系统,在导出之后遇到此问题。

  此问题和mongoexport的原理有关,我们知道数据是hashed或者ranged存放在不同shardsvr上的,那么既然export需要导出到某一个节点的物理文件系统中,那么势必要进行一次数据传输。在mongodb中,这次数据传输是通过migrate实现的,即把所有其他shardsvr上的数据汇总到本地shardsvr中,再进行export。也就是说文件的分布结构从分布式转化为了单机模式,然后export完再慢慢balance回去。这会造成一些问题例如:

  1、migrate之后所有数据都在同一个节点,如果数据大会有文件系统空间问题,例如我们的mongodb存储是放在3块SSD组成的raid5上的,空间较小但是有着较佳的性能。而export目标地址则是8块7200r的SAS硬盘组成的raid50中,本来空间足够,但是数据全都导入到shardsvr上SSD的空间可能不足了。

  2、migrate会占用所有带宽,这个不用讲,坏处大家都懂。

  3、export之后会通过balancer负载均衡回去,balancer传输数据较慢,这次600G数据用了2天时间,在balancer负载均衡完之前spark都不太好用,因为数据不均匀。

  4、中间会有其他原因干扰balancer导致数据不能传输。

  简而言之就是需要进行2轮数据传输,并且还有一次export,即使使用spark把数据扔到单机节点上对单节点的网络压力都没这么大。

先放结论:

  1、mongoexport在sharding集群中并不好用,所以不建议使用mongoexport,如果非要使用建议先用spark导入到一个单机系统再使用。或者直接连接shardsvr上进行export,但是大集群shardsvr比较多所以得通过脚本进行,密码明文存在脚本里有点不符合安全性要求。

  2、nocusortimeout还是别用了,这玩意有点坑,有时程序异常终止或者其他原因会导致client已经不存在了,然而cursor还在,cursor在集群就没法moveChunk或者balance。。

问题解决过程

  a) mongoexport 共运行28小时;

  b) 运行完发现所有数据都被migrate到了export节点上,即数据分布由分布式变为了集中式;

  c) 调研mongoDB负载均衡策略发现理应进行自动负载均衡,查询balancer的enabel和running状态发现为(true、true);

  d) 使用moveChunk操作发现有两个cursor一直被占用;

  e) 调研cursor操作发现现在listCursor已不再被支持,无法查看所有cursor情况,也就无法通过killCursors接口进行kill;

  f) 尝试重启mongos和Mongod发现重启后cursor依旧存在并且会重新开始数据传输?共额外传输了1.5TB数据;

  g) 重启所有服务,负载均衡开始;

  h) 结论:(1)集群中不能使用mongo export;(2)不应使用noCursorTimeOut。如果使用要确定cursor被手动关闭。(3)再出现这类问题依旧没有好的解决办法,还是只能重启。

MongoExport后的负载均衡问题查询及解决:can't accept new chunks because there are still 2 deletes from previous migration的更多相关文章

  1. 在VMware 虚拟机中配置 windows2003系统的NLB负载均衡;0x800706D5错误的解决方法;没有接口可用于安装新的群集

    首先在VM里面 我装了3个2003的系统,  分别为 webservice01 ,webservice 02 , 以及   webview 这3台. 前面两台用于配置负载均衡,后面的webview就是 ...

  2. nginx 负载均衡 使用ip_hash方式解决session问题 测试

    ip_hash的方式比较弱智,但是在一般情况下是挺有效的~~,如果能保证nginx是最上一层的代理,那么能够得到用户的ip是真实位置,就能做到负载,但是一家公司的所有员工其实走的是同一个ip,那么在这 ...

  3. nginx负载均衡中利用redis解决session一致性问题

    关于session一致性的现象及原因不是本小作文的重点,可以另行找杜丽娘O(∩_∩)O哈哈~重点是利用redis集中存储共享session的实际操作. 一.业务场景:nginx/tomcat/redi ...

  4. 负载均衡DNS和反向代理优缺点

    负载均衡 (Load Balancing) 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡(又 ...

  5. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  6. 负载均衡之LVS集群

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  7. Windows平台分布式架构实践 - 负载均衡 上

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  8. http应用优化和加速说明-负载均衡

    负载均衡技术       现代企业信息化应用越来越多的采用B/S应用架构来承载企业的关键业务,因此,确保这些任务的可靠运行就变得日益重要.随着越来越多的企业实施数据集中,应用的扩展性.安全性和可靠性也 ...

  9. linux负载均衡总结性说明(四层负载/七层负载)

    在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...

随机推荐

  1. Vue.js之Vue计算属性、侦听器、样式绑定

    前言 上一篇介绍了Vue的基本概念,这一篇介绍一下Vue的基本使用. 一.搭建一个Vue程序 1.1 搭建Vue环境 搭建Vue的开发环境总共有三种方法: 引入CDN <script src=& ...

  2. 【2019年04月10日】股票的滚动市盈率PE最低排名

    仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 新钢股份(SH600782) - 滚动市盈率PE:3.87 - 滚动市净率PB:1.29 - 滚动年化股息收益率:1.31% - 钢铁 ...

  3. 返回枚举中的desciption

    /// <summary> /// 返回枚举中的desciption /// </summary> /// <param name="value"&g ...

  4. Laravel Homestead 离线安装

    一.写在之前,网络不够快想要安装Homestead,也是一个浩大的工程,对于下载一个 1.22G左右的 laravel/homestead box 也是非常的麻烦.那么如何才能离线安装呢? 接着往下看 ...

  5. k8s(4)-使用服务公开应用程序

    Kubernetes中的服务是一个抽象,它定义了一组逻辑Pod和一个访问它们的策略.服务允许从属Pod之间的松散耦合.与所有Kubernetes对象一样,使用YAML (首选)或JSON 定义服务.服 ...

  6. IDEA-各模块间引用出现问题的解决方法

    1 点击项目右上角的Project Structure 2 选择Modules->父项目->点击右上角的加号->添加需要依赖的模块

  7. python数据分析及展示(三)

    一.Pandas库入门 1. Pandas库的介绍 http://pandas.pydata.org Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas ...

  8. windows上,任务管理器中,进程命令行太长怎么办

    一.前言 在windows上,有时候需要查看进程命令行,但是有的进程的命令行太长了,很难看全 此时,可以使用下面的方法解决(红框改为自己要查看的进程即可): C:\Users\Gaoyu>wmi ...

  9. gym 101657 D

    理论1A.  //没删debug的文件读入.. 傻逼题. 先求出来每条边两侧的三角形,然后枚举边,根据叉积判断三角形位置,建图,拓扑排序. #include <bits/stdc++.h> ...

  10. hibernate02环境的搭建

    hibernate: 持久层的框架!是一个开放源代码的对象关系映射框架(ORM)!之前我们访问数据库使用JDBC!对JDBC进行了轻量级的对象封装!是一个全自动ORM框架!(底层可以自动生成sql语句 ...