阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB集群单mongos的问题解决实例

224次阅读
没有评论

共计 2261 个字符,预计需要花费 6 分钟才能阅读完成。

问题发现

在使用过程中,通过 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 相关教程见以下内容

 

MongoDB 文档、集合、数据库简介  http://www.linuxidc.com/Linux/2016-12/138529.htm

 

MongoDB 3 分片部署及故障模拟验证  http://www.linuxidc.com/Linux/2016-12/138529.htm

 

Linux CentOS 6.5 yum 安装 MongoDB  http://www.linuxidc.com/Linux/2016-12/137790.htm

 

CentOS 7 yum 方式快速安装 MongoDB  http://www.linuxidc.com/Linux/2016-11/137679.htm

 

MongoDB 的查询操作  http://www.linuxidc.com/Linux/2016-10/136581.htm

 

在 Azure 虚拟机上快速搭建 MongoDB 集群  http://www.linuxidc.com/Linux/2017-09/146778.htm

 

MongoDB 复制集原理  http://www.linuxidc.com/Linux/2017-09/146670.htm

 

MongoDB 3.4 远程连接认证失败  http://www.linuxidc.com/Linux/2017-06/145070.htm

 

Ubuntu 16.04 中安装 MongoDB3.4 数据库系统  http://www.linuxidc.com/Linux/2017-07/145526.htm

 

MongoDB 权威指南第 2 版 PDF 完整带书签目录 下载见 http://www.linuxidc.com/Linux/2016-12/138253.htm

 

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149534.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2261字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中