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有这些优势: 大数据量,可以通过 ...
随机推荐
- git报错You are not allowed to force push code to a protected branch on this project
当我们有时候回滚了代码,想强制push到远程仓库的时候, git push origin --force 会报如下错误: You are not allowed to force push code ...
- Oracle 10G 安装文档
Oracle 10G安装指导 1. 解压文件10201_database_win32.zip,并双击解压目录下的setup.exe,出现安装界面,如下: 2. 输入口令和确认口令,如:password ...
- 局域网ARP攻击防护
通过借助一些安全软件来实现局域网ARP检测及防御功能. A.电脑管家 电脑管家--工具箱--下载ARP防火墙模块 不支持window2003 B.服务器安全狗 Windows版下载:http://fr ...
- cocos2dx添加新的类后出现错误undefined reference to的解决办法
使用cocos compile -p android编译cocos2dx项目的时候出现如下错误(新建了TestScene.h,TestScene.cpp): jni/../../Classes/App ...
- C#获取一个数组中的最大值、最小值、平均值
C#获取一个数组中的最大值.最小值.平均值 1.给出一个数组 ,,,,,-,,,,}; 2.数组Array自带方法 本身是直接可以调用Min(),Max(),Average()方法来求出 最小值.最大 ...
- H5常用技巧
工作每天都是接触移动的,特将平时工作中常用的技巧整理总结. 一.@support断定浏览器支持情况定义不同样式 @1像素边框 @supports (-webkit-backdrop-filter:bl ...
- 11.13git和redis
2018-11-13 15:46:40 git完结 redis完结, 还剩一点路飞项目!!!做完回学校!!!! 越努力,越幸运!永远不要高估自己! 关于 redis具体使用可以参考: http://w ...
- 第四天,通过windows来执行第一个python文件步骤
该看 第 38部分的啦
- ArcGIS AddIN 与ArcMap自带工具进行交互
参考示例代码:C:\Program Files (x86)\ArcGIS\DeveloperKit10.1\Samples\ArcObjectsNet\Brushing 核心代码: //获取Selec ...
- elk-logstash-kibana(三)
一.修改logstash.yml unzip logstash-6.3.2 vim config/logstash.yml #添加:检查所有ip http.host: "0.0.0.0&qu ...