博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过安全网闸访问MongoDB
阅读量:6861 次
发布时间:2019-06-26

本文共 1269 字,大约阅读时间需要 4 分钟。

前景描述:

  在10.235的内网3台虚拟机上部署了mongodb的副本集,同网段中的虚拟机上部署的Springboot工程可正常访问。

spring配置文件:

data:  mongodb:    uri: mongodb://iot:iot@10.235.10.10:27017,10.235.10.11:27018,10.235.10.12:27019/db

  后来由于某些原因,数据库需要放到网闸后面,应用通过网闸访问。

网闸配置信息如下:

网闸 mongo
172.255.254.23:27017 10.235.10.10:27017
172.255.254.23:27018  10.235.10.11:27018
172.255.254.23:27019 10.235.10.12:27019

 

 

 

更改后spring配置文件:

data:  mongodb:    uri: mongodb://iot:iot@172.255.254.23:27017,172.255.254.23:27018,172.255.254.23:27019/db

  现在遇到的问题是应用链接mongo异常,日志信息如下:

最终应用连接mongo使用的是真实的(网闸后)mongo服务ip地址,而不是网闸IP地址,所以超时:

  问题:通过日志信息可以发现通过网闸地址172.255网段连接注册mongo集群正常,但是连接成功后网闸地址被从集群连接信息中被提出,从新加入网闸后的真实IP信息(真实IP应用不可达,所以报了连接超时)。

  定位问题原因:应该是副本集模式连接之后发现连接的ip和执行rs.status的返回结果不一致,所以讲连接的IP(网闸)提出,然后又加入真实节点IP(rs.status返回的网闸后真实节点IP)。

排查过程中发现spring配置文件改为单节点可正常连接使用:

data:  mongodb:    uri: mongodb://iot:iot@172.255.254.23:27017/db

  问题:单节点模式可正常连接,集群模式连接后发现节点不在真实集群中?

  定位问题原因:查看mongo-driver源码过程中发现已集群模式连接mong会启用一个事件监听(用以判断集群中节点的存活状态,及时提出无用节点,加入新增节点 )

至此,导致此问题的原因已定位。

临时解决方案

将集群连接模式拆分为3个单数据源连接

uri: mongodb://iot:iot@172.255.254.23:27017/dburi: mongodb://iot:iot@172.255.254.23:27018/dburi: mongodb://iot:iot@172.255.254.23:27019/db

代码控制选择可写节点,此临时方案未实现读写分离,且需损耗部分数据库性能。

 

最终解决方案:

待续。。。。。。

转载于:https://www.cnblogs.com/jackiega/p/10039208.html

你可能感兴趣的文章
《构建之法》阅读笔记二
查看>>
20165324 前四周总结反思
查看>>
11.11评价
查看>>
第一章--第一节:环境搭建
查看>>
hdu 2665 划分树
查看>>
hdu 4251 划分树
查看>>
poj 1704 Georgia and Bob(阶梯博弈)
查看>>
JQuery中的$.ajax()
查看>>
js 幻灯片
查看>>
Keras序列模型学习
查看>>
[bzoj2809] 派遣
查看>>
Flask 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
查看>>
PHP输出缓冲
查看>>
Windows2003上使用IIS7 Express使用FastCgi运行php
查看>>
安装程序时 “向数据库写入数据时发生错误!”
查看>>
图文:高春辉和他的网站梦
查看>>
网页之间的参数传递
查看>>
HTML5 做波形运动的小球
查看>>
初步学习Django-第四篇:views.PY文件详解
查看>>
OAuth2简易实战(四)-Github社交联合登录
查看>>