高并发下多台mongos的连线

weixin_42625723 2019-01-09 11:32:35
我的使用场景是高并发连接多台 mongos, , 当把连线仅指定单一台 mongos 没问题 (app1, app3 to mongos1; app2, app4 to mongos2) 但 当把全部的 mongos 都列在连线字符串上时, 也可以操作 mongodb. 只是当完成几万个工作后, 突然两台 mongos 都不工作了. 正在连线中的mongo shell 下指令都会报错, 显示无法连接, 或是被拒绝连接等信息, 而此时 mongos proess 还是活着.

怀疑过连线满, 用 ulimi -n 增加了 open file 上限, 也在 mongos config 加上 net.maxIncomingConnections 2000. 但启 mongos 后, mongo shell 连入, 在重复大量插入 (request 经过中间件), 以 db.serverStatus().connections 看到 available 还是 818, 而进行相同大量插入时, current 会一值增加, 直到约 300 左右, 突然又死了. 看起来是连线数更改可能未发生效果; 但连线也还没到上限数就拒绝任何 client 了.

求解 !!
...全文
421 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42625723 2019-02-19
  • 打赏
  • 举报
回复
类似的情况持续发生. 比如会造成某分片的 Primary 挂掉 (process完全不见了). 可重启, 但2019-02-19T13:36:08.773+0800 I NETWORK 又很快就挂了. 查该节点的 log, 确实看到 [main] --maxConns too high, can only handle 51200 (我已经把 ulimit, net.InComingConnections 都设为 64000. 但进入 mongo 后, 看到的 available 是 51179). mongos 也用相同设置 我的客户端使用的连线有设置 maxPoolSize=100, minPoolSize=20. MongoClient 也固定使用一个, 并没有每次 new 一个来用. 运行过程中, 各 Primary 查到的 connections.current 都持续在 300 左右. 离 50000 还很远, 也并不会无限增加. 一般看到帖子都写该如何调大连限数. 可是我已经放大了, 依然发生. 这到底是客户端代码得调整还是 mongo 设置得调? 怎感觉 mongos 到 mongod (primary) 的连线不是连线池呢?
rucypli 2019-02-18
  • 打赏
  • 举报
回复
看看mongos mongod config的error日志

1,746

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧