MongoDB集群单mongos的问题总结
问题发现
在使用过程中,通过spark访问集群的效率不是很令人满意,80核心同时运行的速度比单核心也就快了20倍左右,预测瓶颈在mongodb读写上。当然,此时没遇到其他问题暂时没进行问题梳理。
在数据规模增大之后,通过spark访问mongodb集群会造成mongos节点远程连接时输入命令卡顿,怀疑出现了某些性能瓶颈。
具体问题出现如下:
1、某一天发现主节点mongod崩溃。
2、当天重新执行spark任务,第二天发现主节点服务器无法连接,去机柜查看发现主节点服务器宕机,于是决定认真查找瓶颈。
3、重新运行任务,执行top命令:发现计算机核心使用率为100%左右,由于本服务器拥有32核心,并且spark使用其中16核心,所以在ubuntu系统下CPU使用率小于1600%都是正常的,CPU不是系统瓶颈。
使用free -m发现内存仍有剩余,内存不是系统瓶颈。
使用sudo iftop命令,发现TX和RX都在800Mb以上,初步确认是网络带宽瓶颈。
查询系统IO和硬盘容量,排除磁盘问题。
4、确认为网络带宽问题。
问题解决
本地网络环境采用的是万兆网卡和千兆交换机,对于大部分应用足够使用,但是执行spark任务时,由于mongos只有主节点存在,所以所有数据读取任务均占用主节点带宽,如果想要正常使用则需要降低并发度或者提供负载均衡。
Mongodb自身支持负载均衡,对一个sharding集群而言,所有的元数据信息分别存放在mongod里面,但是所有router信息都是放在configsvr中的(包含权限管理的用户信息等),所以想要拓展mongos异常简单,把Mongos的config文件分发到想要启动mongos的机器上,修改一下bindIP直接启动即可,启动后的使用方式和之前的mongos一致,用户信息也都存在不需要重新创建用户。
由于本集群使用了5台服务器部署Mongod,于是解决办法就是将Mongos也启动5个,相当于启动了5个单独的服务端。
启动后重新执行spark任务,在每台服务器上执行iftop查看网络使用,发现TX和RX均有300Mb左右。网络带宽不再是集群的使用瓶颈。
Mongodb的标准uri格式如下:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
所以使用时也异常简单,把代码中创建MongoURI或者ReadConfig或者spark.mongodb.imput.uri中的uri按上面格式加入多个host和port即可。
问题反思
1、问题出现早有预兆,应当及早解决这些问题,提前引起重视。
2、mongodb的文档中对URI的介绍在Reference > Connection String URI Format中,当时没有看到,所以没找到怎么连接多个Mongos的方法。只启动一个mongos,但是当时其实也有考虑过可能遇到并发瓶颈的问题,但是没有深究。之后的平台搭建要进行更详尽的设计再进行部署会更加合适。
3、直接在物理机上部署虽好,但是在容器上更容易进行拓展。并且当前的系统以后可能会在多地部署,如果直接部署在k8s上会省下大量部署时间和节约大量人力成本。
4、曾经以为千兆网够用了,以后采购还是万兆网设备更好。
MongoDB集群单mongos的问题总结的更多相关文章
- mongodb集群安装及到现在遇到的一些问题
集群搭建 只有3台服务器,开始搭建mongodb集群里主要参照的是http://www.lanceyan.com/tech/arch/mongodb_shard1.html,端口的设置也是mongos ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群—— 分片
从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...
- Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)
参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
随机推荐
- SpringCloud(一)浅谈SpringCloud
前言 现在微服务实在是太火了,所以我们必不可少的是要学习一下SpringCloud了,服务化的核心就是将传统的一站式应用 根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享D ...
- 【Postgres】空间数据库创建
1.数据库创建问题-Navicat-ERROR: source database "template1" is being accessed by other users 2.解决 ...
- JVM可达性分析算法中,哪些可以作为 root ?
被启动类(bootstrap 加载器)加载的类和创建的对象: JavaStack 中的引用的对象 (栈内存中引用的对象): 方法区中静态引用指向的对象: 方法区中常量引用指向的对象: Native 方 ...
- Failed while changing version of Java to 1.8.
在使用eclipse导入一个新的项目时,项目-->鼠标右键-->Properties 弹出框中修改Project Facets为1.8时,eclipse报错,错误信息如下: <spa ...
- C# Aspose.Cells.dll Excel操作总结
简介 Aspose.Cells是一款功能强大的 Excel 文档处理和转换控件,不依赖 Microsoft Excel 环境,支持所有 Excel 格式类型的操作. 下载 Aspose.Cells.d ...
- 茶馆小人书 (AFO)
茶馆小人书 ——AFO 乌云重重地压住了整个天际,阴风凛冽袭人,随着远方穹顶上的几声闷响,豆大的雨点便开始清洗这座城市.北方的雨,就是这么突然.任性,恰似北方人的性情,豪放不羁,一旦开始便不可收拾 ...
- react better-scroll 编写类似手机chrome的header显示隐藏效果
关键代码 const H = 50; // header的高度 const H2 = H / 2; let cy = 0; class Home extends Component { @observ ...
- python全栈开发 * 进程之间的通信,进程之间数据共享 * 180726
进程之间的通信(IPC)队列和管道一.队列 基于管道实现 管道 + 锁 数据安全(一).队列 队列遵循先进先出原则(FIFO) 多用于维护秩序,买票,秒杀 队列的所有方法: put()(给队列里添加数 ...
- Java Web 笔试(面试)题
1.Servlet 的生命周期,并说出 Servlet 与 CGI 的区别 Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servle ...
- (二)juc线程高级特性——CountDownLatch / Callable / Lock
5. CountDownLatch 闭锁 Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. CountDownLatch 一个同步辅助类, ...