前景描述:

  在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/db
uri: mongodb://iot:iot@172.255.254.23:27018/db
uri: mongodb://iot:iot@172.255.254.23:27019/db

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

最终解决方案:

待续。。。。。。

通过安全网闸访问MongoDB的更多相关文章

  1. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  2. mongodb3.6 (五)net 客户端访问mongodb设置超时时间踩过的“坑”

    前言 在上一篇文章中,我们有提到net访问mongodb连接超时默认为30秒,这个时间在实际项目中肯定是太长的.而MongoClientSettings 也确是提供了超时属性,如下图: 可实际使用中, ...

  3. Python访问MongoDB,并且转换成Dataframe

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/13 11:10 # @Author : baoshan # @Site ...

  4. Java 调用 groovy 脚本文件,groovy 访问 MongoDB

    groovy 访问 MongoDB 示例: shell.groovy package db import com.gmongo.GMongoClient import com.mongodb.Basi ...

  5. 使用spring boot访问mongodb数据库

    一. spring boot中传参的方法 1.自动化配置 spring Boot 对于开发人员最大的好处在于可以对 Spring 应用进行自动配置.Spring Boot 会根据应用中声明的第三方依赖 ...

  6. 使用Go客户端访问MongoDB

    1.安装MongoDB 1.1 到官网:www.mongodb.org/downloads下载windows最新版本,解压到目标目录下. 1.2 创建数据存储目录 mongodb需要一个数据文件夹来保 ...

  7. 使用SQL访问MongoDB

    使用SQL访问MongoDB 简介 使用SQL访问MongoDB有多种解决方案,就我所知的,除了今天要介绍的MongoDB Connector for BI外,还有Studio 3T,但后者只有在企业 ...

  8. MongoDB最简单的入门教程之五-通过Restful API访问MongoDB

    通过前面四篇的学习,我们已经在本地安装了一个MongoDB数据库,并且通过一个简单的Spring boot应用的单元测试,插入了几条记录到MongoDB中,并通过MongoDB Compass查看到了 ...

  9. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

随机推荐

  1. 4.2模拟赛 wormhole(期望DP Dijkstra)

    \(\color{white}{orzmjt又切题了...}\) \(Description\) 给定一张有向图,每条边在每一时刻有\(p_i\)的概率存在.求最优策略下从\(1\)走到\(n\)最少 ...

  2. Hadoop日志文件

    初学者运行MapReduce作业时,经常会遇到各种错误,往往不知所云,一般直接将终端打印的错误贴到搜索引擎上查找,以借鉴前人的经验. 对于hadoop而言,当遇到错误时,第一时间应是查看日志,日志里通 ...

  3. __http原理__HTTP 协议简介

    HTTP 协议通信流程 超文本 除了文本以外,还有其他数据类型的内容 HTTP 协议 指计算机网络通信中 两台计算机之间所必须遵守的规定或规则 Hypertext Transport Protocol ...

  4. vue_实例_组件的生命周期

     重绘重排 中重复出现的是 mounted(){...} beforeUpdate(){...} uptated(){...} 其他钩子函数只会出现一次 <!DOCTYPE html> & ...

  5. Java+面向对象初学感想

    在先导课之前我未曾接触C和Python之外的语言,在大一学年的课程中,用面向过程的思想方法足以完成绝大多数课程要求,故而我也对面向对象的编程思想知之甚少,虽然多有耳闻但是对它一直没有一个正式的学习了解 ...

  6. js 第三期 小肩膀 第一段

    var 时间戳 = new.Date().getTime();//系统引擎 var 时间戳 = Date.now(); //V8引擎 数据类型 false =  underfuned =null = ...

  7. pta编程总结

    币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字母a-j ...

  8. java web 下载本地文件并弹出下载框

    window.open("/dept/download") jsp代码 @RequestMapping(value = "/download", method ...

  9. Windows bat批处理使用

    mkdir commonmkdir datamkdir savemkdir data\tsushima_m_mapmkdir save\tsushima_m_map msxsl ..\common\r ...

  10. JavaScript中的this所引用的对象和如何改变这个引用

    this是函数内部的一个特殊对象,它引用的是函数执行环境对象.也就是运行是基于函数的执行环境绑定. 1.在网页全局作用域中调用函数时,this引用window var color='black'; f ...