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)建立在现有网络结 ...
随机推荐
- ajax方法如何给全局变量赋值
在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...
- 11.12git部分和redis
2018-11-12 09:54:58 这星期把luffycity看完,然后周末回学校 越努力,越幸运!永远不要高估自己! 具体可以参考 戳我啊!! 一些git常用命令: 目前已使用Git的四个命令 ...
- 10.30 rest_framework总结
2018-10-30 20:25:23 终于学完了rest_framework 这个框架! 这个框架有一些基本组件!最重要的就是看源码!要一个类一个类的去找!按顺序! 并且要自己配置类的时候要先看源 ...
- B - 吉哥系列故事——恨7不成妻
单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=72 77=71 ...
- POJ - 3279(枚举+暴力)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14297 Accepted: 5257 Descrip ...
- ZooKeeper注册中心安装详细步骤(单节点)
安装 Dubbo 注册中心 Dubbo 建议使用 Zookeeper 作为服务的注册中心. 注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/h ...
- jquery的设计亮点
jquery的亮点我目前学习到一下几点: 1.封装库利用window的挂载实现闭包. 库一定要封装来防止变量污染全局,方式要么对象,要么立即执行函数.jquery用了立即执行函数.因为立即执行函数里的 ...
- python 获取本机ip
有的设备上,有host相关配置,或者网络环境特殊,导致从hostname获取ip不符合预期. 如下函数整合了多种获取ip的方式,大部分情况都可涵盖,一般情况下可以满足需求~ 核心是创建一个UDP协议下 ...
- mysql提权常用方法。 hack某某
一般是root权限,知道mysql root权限,root账号密码 启动项提权:原理:利用高权限的root写入一个vbs脚本到启动项,再通过一些方法如ddos,社工管理员之类的方法来让服务器重启,运行 ...
- day17 十七、时间模块
一.时间模块 import time print(time) # <module 'time' (built-in)> import time print('暂停开始') secs = t ...