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)建立在现有网络结 ...
随机推荐
- 自定义GridView实现分割线解析
前两天在些项目的时候碰到常用的GridView要实现一些分割线,之前就是用本方法利用listView和Item的背景颜色的不同线显示分割线.这是最low的一种做法.于是我就简单的写了一个自定义的 Gr ...
- linux系统关闭指定服务的方式
1.根据名称称查找并关闭:pgrep -f 名称 | xargs kill -9 2.根据端口称查找并关闭:lsof -i:端口 | grep LISTEN|awk '{print $2}'|xarg ...
- proxy_set_header Host 所引发的凶案
背景介绍:新搭建了一套测试环境.slb为2.2.2.2,由于应用的特殊性,需要走 test.aaa.com.cn 域名,而该域名在老的测试服务器1.1.1.1有两个不能迁移的服务也在使用,故想出对策, ...
- 阅历>感悟
1.强扭的瓜不甜.在招聘的时候,面试官看不上你,你也不用赖着要去,你去能干好工作吗?面试官通常比你更清楚这个是事情.在比如谈恋爱,姑娘有更好的目标,不喜欢你了,决定离开你了,你再怎么挽留都是没意义的, ...
- Gym 101972
F读错题wa了三个小时.自闭了,不然I题有可能能出的..已经想到组合数也敲完组合数板子了. A:这...**题吧,第一眼看的这个就秒了 #include<bits/stdc++.h> #d ...
- Java9之HashMap与ConcurrentHashMap
HashMap在Java8之后就不再用link data bins了,而是转为用Treeify的bins,和之前相比,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成.: * This ...
- elk-Kibana设置登录认证-通过nginx转发(六)
一.kibana的登录认证问题 kibana是nodejs开发的,本身并没有任何安全限制,直接浏览url就能访问,如果公网环境非常不安全,可以通过nginx请求转发增加认证,方法如下: tips:ki ...
- mysql 锁查询
1.查看正在被锁定的的表 show OPEN TABLES where In_use > 0; in_use:多少个线程在使用 name_locked:是否被锁 2.查询哪些线程正在运行. 这个 ...
- Excel GET.DOCUMENT说明
GET.DOCUMENT(type_num, name_text) Type_num 指明信息类型的数.下表列出 type_num 的可能值与对应结果. Type_num 返回 1 ...
- Redis安装[Windows]
一. redis下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip ...