前景描述:

  在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. K个排序链表的合并(Hard)

    问题来源:选自leetCode 23:合并K个排序链表 问题描述: 题目给定信息: 不确定需要合并的链表的数目,但依然要求我们把给定的这些有序链表合并成一个链表,并且保证合并的链表依然是有序的. 问题 ...

  2. 使用JS获取input值

    获取input值,设置input值 可以使用 $(".class") $("#id") $("input[name='name']") re ...

  3. CSS3_文本样式

    1. 文字阴影 text-shadow 使用: text-shadow:    水平方向偏移量    垂直方向偏移量    模糊程度    颜色; #box { text-shadow: 10px 1 ...

  4. Promise 用法

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 Promise的构造函数接收一个参数,是 ...

  5. 课堂笔记及知识点----树(2018/10/24(pm))

    树 概念:由一个或多个(n≥0)结点组成的有限集合 T, 有且仅有一个结点称为根( root), 当 n>1时,其余的结点分为 m(m≥0)个互不相交的有限集合 T1,T2, …, Tm.每个集 ...

  6. jquery弹窗插件layer:layer.layui.com

    这两天在做抽奖转盘功能,浏览器自带的alert弹出框太low,本人又基本不会前端, 于是借鉴前人用fancybox插件做的效果 结果没看懂其写法(http://www.0101shop.com/goo ...

  7. kettle获取系统时间

    Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + ...

  8. subline text3 安装 rem装换工具

    CSSREM 一个CSS的px值转rem值的Sublime Text 3自动完成插件. 插件效果如下: 安装 下载本项目,比如:git clone https://github.com/flashli ...

  9. spark优化参数调节和故障参数调节

    1:“物尽其用”,但给spark分配多个机器后,先需配置spark-submit shell如下: /usr/local/spark/bin/spark-submit \ --class com.sp ...

  10. thinkphp ckeditor与ckfinder

    thinkphp ckeditor与ckfinder 下载 ckeditor下载地址 ckfinder下载地址 整合 将ckeditor与findeditor下载完成后,放到public目录下,配置c ...