Mongo 副本集 选主错误 server selection error
问题
failed: server selection error: context deadline exceeded, current topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: 127.0.0.1:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp 127.0.0.1:27017: connect: connection refused
解决否
已解决
方案
登陆 mongo server 输入命令
rs.status()
这里看图片里,name
是: mongolab:27021
, 那么应用也会用这个地址去连 mongodb
,如果 dns
里没有 mongolab
,那么应用是连不上这个 mongo
的,最终报错就是链接超时。
查看一下Mongo集群之间的通讯 IP
,或者地址是怎么配置,是否配置的IP
的应用端能访问的IP
段。
例如,三个 mongo
集群配置在同一网段内—— 192.168.1.0
,如果你也按照这个 IP
来配置副本集,那么 mongo
之间通信是没问题的,但如果应用端可能读取 replica
信息后,会那副本集配置的 IP
信息去访问其他节点,这个时候应用会拿着 192.168.1.0
这个网断的 IP
去访问 mongo
,如果 mongo
和应用不在一个网段,就会导致如上问题。所以,mongo
的 replica
配置的IP也需是应用可访问的 IP
!
这也是,往往运维部署,发现,mongo
互通 OK,运维溜了。等应用来连,却连不上问题。
参考
- https://www.mongodb.com/docs/manual/replication/
- https://www.mongodb.com/docs/manual/reference/method/rs.initiate/