共计 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