前景描述:

  在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. [是男人就过8题——Pony.ai]Perfect N-P Arrays

    [是男人就过8题--Pony.ai]Perfect N-P Arrays 题目大意: 一棵\(n(\sum n\le5\times10^6)\)个结点的树,每个结点都有一个括号.求树上一个合法的括号序 ...

  2. CSS(五)

    定位 关于定位 我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下: relative 生成相对定位元素,元素所占据的文档流的位置不变,元素本身相对文档流的位置进 ...

  3. js以键值对的方式获取URL的参数

    在前端日常的开发中,大多数时候我们只需用js获取到url中的参数即可,这个实现起来也很方便如: function getQueryString(value) { const reg = new Reg ...

  4. HTML入门5

    格式化文本,高阶处理,接下来了解,标记引文,描述列表,计算机代码和其他文本,上下标,联系信息等数据. 学习不太知名的HTML元素来标记高级语义特征. 描述列表,也叫自定义列表,第三种类型的列表,除了u ...

  5. [LeetCode] Number of Matching Subsequences 匹配的子序列的个数

    Given string S and a dictionary of words words, find the number of words[i] that is a subsequence of ...

  6. rbac权限控制,基于无线分类

    2018年9月18日11:21:28 数据库结构 CREATE TABLE `admin` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `c ...

  7. 用sort方法输出数组

  8. Toad for Oracle 创建表空间和用户

    表空间 1.找到Tablespace,右键,单击Create Tablespace 2.输入表空间名字,例如:test_tablespace3.单击"Date Files"选项卡, ...

  9. Spring Cloud 之Eureka(一)

    简介 Eureka是Spring cloud 的基本套件之一,是基于Netflix 的Eureka做的二次封装,主要是负责完成微服务架构中的服务治理功能.它是微服务架构中最为核心和基础的模块,它主要是 ...

  10. jmeter 之变量传递

    最近遇到个问题,一个线程组的变量怎么应用到另一个线程组,试了下,通过提取器设置的变量只能用于当前线程组,不能用于其他线程组,只能试试设置property Parameters,应该还有别的办法这只是其 ...