如果帮助了你,希望可以点赞、评论,你的点赞与评论是我最大的创作动力!

问题

我在一台服务器上开了3个mongo服务组成一个mongo的复制集,这也是网上常见的教授搭建复制集的方式。然后我再另一台服务器上跑程序连接mongo复制集的时候,却死活不行。就是报这个错误!
我就郁闷了我是连接的192.168.1.53这个服务器的地址,怎么报错显示死活要连接我本地的mongo呢!为此我debug了很久都没找到原因,缓缓吧!一周后我恍然大悟,原来是当初搭建复制集的时候,挂载配置host的问题。
下面是报错:

pymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27019: [WinError 10061] 由于目标计算机积极拒绝,无法连接。,127.0.0.1:27018: [WinError 10061] 由于目标计算机积极拒绝,无法连接。, Timeout: 30s, Topology Description: <TopologyDescription id: 5f4de49d2be4dd66f0ebc6be, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription (‘127.0.0.1’, 27018) server_type: Unknown, rtt: None, error=AutoReconnect(‘127.0.0.1:27018: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’)>, <ServerDescription (‘127.0.0.1’, 27019) server_type: Unknown, rtt: None, error=AutoReconnect(‘127.0.0.1:27019: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’)>]>

原因

大家来看网上经常见的一个演示mongo复制集挂载的一个配置,通常大家会在一个服务器开启三个mongodb服务,然后到主节点进行如下配置,然后初始化挂载成功。

config = {"_id" : "rs0","members": [{ "_id" : 0, "host" : "127.0.0.1:27017" },{ "_id" : 1, "host" : "127.0.0.1:27018" },{ "_id" : 2, "host" : "127.0.0.1:27019" }]
}
rs.initiate(config)

在这台服务器上连接mongodb复制集当然没有问题,但是在其他服务器上使用uri连接复制集时,会出现上面的错误。下面是我的uri

mongodb://myadmin:password@192.168.1.53:27017,192.168.1.53:27018,192.168.1.53:27019/source_data/?replicaSet=rs0

别问我为什么使用uri这样连接复制集,这样做是因为:如果你连接单一mongo服务的话,复制集的primary节点会由于重新选举而切换,你连接的mongo节点也随之降级为secondary,这是你的数据库操作就失效了,所以千万不要直接连接复制集的主节点primary,使用下面uri连接的这种方式,可以连接到复制集,而且也不用担心的primary切换会影响对数据库的操作。

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

仔细想想uri是如何能使其连上复制集的呢?其实大概是这样的,先将uri的各个参数解析,然后连接每个host:port,直到连接到rs0复制集的主节点primary,该节点返回rs0复制集节点的members信息,此时如果要操作数据库的数据时,是根据members的信息来连接到当前的primary执行数据操作(大概就是这个流程,具体的实现肯定要复杂很多)。问题就在这一步,来看我们当初挂载复制集节点时的members信息

"members": [{ "_id" : 0, "host" : "127.0.0.1:27017" },{ "_id" : 1, "host" : "127.0.0.1:27018" },{ "_id" : 2, "host" : "127.0.0.1:27019" }]

是不是想起了什么,是127.0.0.1啊!再看报错

pymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27019: [WinError 10061] 由于目标计算机积极拒绝,无法连接。,127.0.0.1:27018: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

这才使得连接数据库的程序,一直去连接本地数据库。就问你坑不坑,果然你只有更深入的了解了它的机制才能分析出到底是什么原因导致的错误。

解决

原因已经找到了,接下来就需要解决了。首先避免这种事情的发生,在搭建复制集时不要再使用网上的127.0.0.1了,即使你是再一台服务器上开三个mongo服务,也请把host参数写成服务器的地址或者hostname,例如本文我使用的192.168.1.53,
如果事情已经发生,就像我,此mongo服务还一直在使用,我也是心很累。请看我另一篇:mongodb复制集节点替换实践【避坑指南】

mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题相关推荐

  1. 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  2. [踩坑合集] 双linux系统卸载/安装,nvidia驱动安装,引导项缺失,开机黑屏,nvidia-smi和nvcc -v CUDA版本不匹配

    "个人文化属性" 双系统 1. 双linux系统格式化一个linux系统 2. 安装新的20系统(双系统) 3. 重启后直接进入grub界面(修复它) 3.1 寻找你的系统分区 3 ...

  3. 面试官给我挖坑:单台服务器并发TCP连接数到底可以有多少 ?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"k8s"领取阿里云<深入浅出k8s.pdf> 欢迎跳转到本文的原文链接:h ...

  4. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

    曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了. 我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用 ...

  5. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...

    前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...

  6. 超融合架构提升单台服务器性能,浅谈超融合架构

    超融合架构是什么? 超融合架构是基于标准通用的硬件平台,通过软件定义实现计算.存储.网络融合,实现以虚拟化为中心的软件定义数据中心的技术架构.其主要特征是: (1)软件定义 独立于硬件,采用商业通用标 ...

  7. 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少

    前言 曾几何时我们还在寻求网络编程中C10K问题(有关C10K问题请见文章<The C10K problem(英文在线阅读.英文PDF版下载.中文译文)>)的解决方案,但是现在从硬件和操作 ...

  8. 如何扩容单台服务器的存储容量?

    作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...

  9. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数      问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:     对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完 ...

最新文章

  1. 明天参加GDG devfest
  2. linux mysql 5.7 双机热备_2017年5月5日 星红桉liunx动手实践mysql 主主双机热备
  3. 要玩转这个星际争霸II开源AI,你只需要i5+GTX1050
  4. 好看的php提示弹窗,漂亮的jquery提示效果(仿腾讯弹出层)
  5. 外媒:苹果聘请更多司机在加州测试其自动驾驶汽车
  6. Linux 下Shell脚本中的加减乘除运算
  7. java 送参数_关于java:如何以编程方式发送带参数的HTTP请求?
  8. 安装exchange
  9. 滤波ad毛刺 c语言算法,Σ-Δ型ADC AD7124和AD717x的后置/增强型滤波器
  10. OpenCV图像灰度化的六种方法
  11. 产品的10大设计原则
  12. HDU5285.wyh2000 and pupil
  13. 回程静态路由及trunk简单链路
  14. 请问这个验证码是怎么做的?
  15. 【Vivado】 [Place 30-574] 时钟使用普通IO时的报错解决办法
  16. 创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA的 电源接口和拨码开关、JTAG仿真器接口
  17. W5100S SPI+DMA 中的片选信号处理
  18. 线段树开4N空间证明
  19. PHP 将连续的汉语拼音分隔开
  20. 蛋糕店会员卡充值方案有哪些?

热门文章

  1. 微型计算机常用的worm是,具有多媒体功能的微型计算机系统中,常用的的WORM是()A.只读型大容量软盘B.只读型光盘C.一次性写...
  2. Android 利用图片取色法巧妙制作彩虹调色圆环
  3. 年前最后一期,送VIP黑卡~
  4. SSRF漏洞详解(练习持续更新中)
  5. 【Ubuntu 下 pip 报错】 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) aft
  6. 我的世界java笔刷指令_笔刷-goBrush 插件 | 我的世界 | MC世界侠
  7. 虫师 selenium 4.6登录126邮箱获得验证信息
  8. UWB 高精度定位技术
  9. zookeeper常用命令行操作
  10. 【最快的ubuntu系统安装微信教程】