记华为云容器化连接mongodb的一次经历

起因:公司跟华为有战略合作, 需要将应用迁移至华为云,在迁移过程中容器中的应用连接mongo死活连不上,mongo的安全组什么的都加了就是不行,现象如下

  mongo的主备节点为 10.125.80.1:8635,10.125.80.2:8635  配置信息存在zk里, 程序读取到zk的配置去连接mongo的时候出现如下错误

问题描述:

  如上图,正确读取到zk里的配置为10.125网段的两个正确的ip,然后看日志发现 纳尼? mongo的主从hosts怎么变成192.168网段了?怎么回事 ?见鬼了? 然后我检查了所有的配置没找到任何地方有配置192.168,所以只能去找公司的运维同事,

先找到运维A: "不知道怎么回事? 这么诡异?是不是你们的配置写错了?"   so... 我回去再次检查了一下配置,确实代码没找到问题。

然后又找到运维B:" 是不是你们的配置写错了? "    我坚信的说没写错 我都排查过了。 然后运维看了一会检查了安全组等信息,也没找到咋回事。那么好吧 ,只能靠自己了, 追踪一下mongo的源码吧 根据日志信息在mongo的驱动jar里发现有这么一段代码

 

是mongo初始化连接时候会创建守护线程 然后会在当前连接执行ismaster命令获取mongo服务信息,看到这代码后感觉看到了希望 赶紧去华为控制台里执行了一下这个命令 返回结果如下

原来192.168的是这里返回的 mongo的驱动会获取到这个返回的结果去解析hosts然后比较初始化给的地址是否在这个hosts里 如果不在则remove 日志信息里有remove的信息。

然后我拿着我的"证据",就是上面这个截图去找运维了  "这么诡异? 这个ip是啥 ? 没配置这个ip啊"运维表示也没头绪... so  然后就联系了华为的运维人员,然后在群里双方的运维balabala了一大堆之后,华为表示 之前确实也遇到过这个问题,192.168的网段是华为的同步ip,我们配置的是业务ip ,容器里面想要连上 需要华为同事手动在后台操作才可以。 

然后就提供我们的服务器信息给华为同事后台配置完之后果然连上了!!! 坑已填上..  

这里要夸一下华为,华为的服务态度和响应速度还是挺棒的,华为表示这个问题后续会优化。 当然也得谢谢我们的运维同事的跟进。

ok!  

 

posted @ 2019-08-13 17:19  柴柴1226  阅读(431)  评论(0编辑  收藏  举报