MongoExport后的负载均衡问题查询及解决:can't accept new chunks because there are still 2 deletes from previous migration
问题
前一阵有一个数据导出需求,按照各种数据库的使用方法,使用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的更多相关文章
- 在VMware 虚拟机中配置 windows2003系统的NLB负载均衡;0x800706D5错误的解决方法;没有接口可用于安装新的群集
首先在VM里面 我装了3个2003的系统, 分别为 webservice01 ,webservice 02 , 以及 webview 这3台. 前面两台用于配置负载均衡,后面的webview就是 ...
- nginx 负载均衡 使用ip_hash方式解决session问题 测试
ip_hash的方式比较弱智,但是在一般情况下是挺有效的~~,如果能保证nginx是最上一层的代理,那么能够得到用户的ip是真实位置,就能做到负载,但是一家公司的所有员工其实走的是同一个ip,那么在这 ...
- nginx负载均衡中利用redis解决session一致性问题
关于session一致性的现象及原因不是本小作文的重点,可以另行找杜丽娘O(∩_∩)O哈哈~重点是利用redis集中存储共享session的实际操作. 一.业务场景:nginx/tomcat/redi ...
- 负载均衡DNS和反向代理优缺点
负载均衡 (Load Balancing) 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡(又 ...
- Windows平台分布式架构实践 - 负载均衡
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- 负载均衡之LVS集群
h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...
- Windows平台分布式架构实践 - 负载均衡 上
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- http应用优化和加速说明-负载均衡
负载均衡技术 现代企业信息化应用越来越多的采用B/S应用架构来承载企业的关键业务,因此,确保这些任务的可靠运行就变得日益重要.随着越来越多的企业实施数据集中,应用的扩展性.安全性和可靠性也 ...
- linux负载均衡总结性说明(四层负载/七层负载)
在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...
随机推荐
- c#判断是否有网络
//调用操作系统API [System.Runtime.InteropServices.DllImport("wininet")] private extern static bo ...
- win10下VS2017配置GSL库
GSL库:GNU Scientific Library 1. 下载:下载Complete package, except sources和Sources两个exe文件 2. 安装:将两个exe安装 ...
- Qt编写自定义控件8-动画按钮组控件
前言 动画按钮组控件可以用来当做各种漂亮的导航条用,既可以设置成顶部底部+左侧右侧,还自带精美的滑动效果,还可以设置悬停滑动等各种颜色,原创作者雨田哥(QQ:3246214072),驰骋Qt控件界多年 ...
- 完美:利用旧版iCloud更改Apple ID地区
朋友们,你们有没有尝试过从大陆地区以外的App Store上下载APP呢?或许听起来蛮有趣的,其实并不难,只需要更改Apple ID的地区就可以了,许多用户就是卡在下一步,需要输入付款信息,不过下面苹 ...
- cf 938E
哇自闭了. 一样个毛啊. 和之前见过的几道感觉很类似啊. 首先一个数如果有贡献那么在他后面一定有一个大于它的数,并且前面的全比他小,然后我就跑偏了... 于是我们先排个序,显然无影响,我们可以考虑从 ...
- python 接口自动化测试二(request.get)
环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它 ...
- padding 和 float属性
padding = {上内,右内,下内,左内} 内边距 padding:"10, 5,15,20" float = "true" 控件固定住.
- Ubuntu 安装 JDK8
安装python-software-properties $sudo apt-get install python-software-properties $sudo apt-get install ...
- loadrunner笔记(二):飞机订票系统--客户信息注册
(一) 几个重要概念说明 集合点:同步虚拟用户,以便同一时间执行任务. 事务:事务是指服务器响应用户请求所用的时间,当然它可以衡量某个操作,如登录所需要的时间,也可以衡量一系列的操作所用的时间,如从 ...
- Oracle出现高占内存的解决办法:
因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大.而通常,我们自己的环境并不需要分配那么大的内存来支持Oracle ...