无法连接至docker-compose起的mongo副本集

1.replset内部都能ping通,单独访问或者连接任意一个repeset都没问题
2.pymongo和mongoose都测试过,无法访问到
3.一旦添加副本集参数replicaSet就会报错,无法连接server
4.members配置如下:

clipboard.png

求大神解答

阅读 4.3k
1 个回答

首先要理解pymongo或者mongoose这样的驱动连接MongoDB的过程中会发生什么。其实驱动在你眼皮底下做了很多事情来达到高可用,负载均衡等等。为了实现这些功能,驱动连接的并不仅仅是你指定的那一个节点,甚至也不是用你提供的IP地址来连接。而是用你提供的IP和端口连接到复制集,然后查询集群中一共有多少节点,各自的状态是什么,再对所有结点建立连接。当你的集群发生变动,新增了节点或者减少了节点,驱动也是会探测到的。
这些功能要求,驱动实际连接的是复制集中配置的节点IP和端口,以你的例子来说,实际上是在连:

  • shard_server11:27017
  • shard_server21:27017

看上去这些hostname是无法解析的,所以你也就无法访问了。
这不是一个容器特有的问题,普通复制集也是同样的原理,但是这里加上容器把事情变得更复杂。因为普通复制集只要能解析上面的hostname就可以了,而如果你把应用放在宿主机上,是不可能访问到容器内部的IP的。所以,你的应用也必须在容器中,并且要能解析上面这些hostname。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题