最近一个业务上线的时候涉及到mongodb,这个服务占用了7台服务器。上线的时候会有一小段时间发生
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
但是这个异常只有几个服务器有,几个服务器是好的。(很重要的线索)
一时间没有思路,网上说是连接空闲时间太长被回收了客户端没有感知。
单纯的我差点就信了个邪。
无意间发现阿里云文档有描述过该问题:
阿里云DataWorks文档
瞬间想起了是不是和白名单有关系,遂逐个排查,果然发现有几台服务器是没有在白名单范围内的。
然后联想到该事故一下子就清晰了,一开始我们的kakfa的topic分区只有一个,但是上了7台服务器,这个时候线上就开始报这个异常了,报着报着就不报了,原因就是kafka的消费者重新负载均衡了,因为当前消费者消费太慢了,mongo直接30秒超时。最终路由到了一台有白名单的服务器上坑此坑次执行了。
在使用云服务器的时候一定要注意白名单这个问题,其实可以通过172.19.189.0/24
的形式涵盖内网所有网段,避免后续加了机器,忘记补充白名单了。
希望能帮助到在坑里徘徊的有缘人吧..阿门~