我已经设置了docker并创建了四个容器(每个容器都安装了一个启用了身份验证的mongodb实例),以使用仲裁器启用mongodb复制。我还向主机公开了mongodb的27017
端口,以便外部应用程序可以连接它,但是我无法从Eclipse与我的JAVA Spring应用程序连接。
以下是我使用过的mongo uri:
mongodb://用户名:密码@ 192.168.1.102:18088,192.168.1.102:18089,192.168.1.102:18099 /?authSource = dbName; replicaSet = rs0; readPreference = secondaryPreferred; authMechanism = SCRAM-SHA-1; waitQueueMultiple = 100
Exception
“”在等待与com.mongodb.client.internal.MongoClientDelegate$1@739c3a21匹配的服务器时,等待30000毫秒后超时。群集状态的客户端视图为{type = REPLICA_SET,服务器= [{地址= mongo3:27017,类型=未知,状态=正在连接,异常= {com.mongodb.MongoSocketException:mongo3},由{java.net.UnknownHostException:mongo3}}引起,{地址= mongo2:27017,类型=未知,状态= CONNECTING,异常= {com.mongodb.MongoSocketException:mongo2},由{java.net.UnknownHostException:mongo2}}引起,{地址= mongo1:27017,类型=未知,状态=正在连接,异常= {com.mongodb。由{java.net.UnknownHostException:mongo1}}引起的MongoSocketException:mongo1},由{address = mongorb:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketException:mongorb}引起的{java.net.UnknownHostException:mongorb}}];嵌套异常是com.mongodb.MongoTimeoutException:等待服务器匹配com.mongodb.client.internal.MongoClientDelegate$1@739c3a21的服务器在30000毫秒后超时。群集状态的客户端视图是{type.REPLICA_SET,服务器= [{address = mongo3:27017,type = UNKNOWN,state = CONNECTING,异常= {com.mongodb.MongoSocketException:mongo3},由{java.net.UnknownHostException: mongo3}},{地址= mongo2:27017,类型=未知,状态=连接,异常= {com.mongodb.MongoSocketException:mongo2},由{java.net.UnknownHostException:mongo2}}引起,{地址= mongo1:27017 ,类型=未知,状态=正在连接,异常= {com.mongodb.MongoSocketException:mongo1},由{java.net.UnknownHostException:mongo1}},{地址= mongorb:27017,类型=未知,状态=正在连接,异常引起= {com.mongodb.MongoSocketException:mongorb},由{java.net.UnknownHostException:mongorb}}]“”
答案 0 :(得分:0)
此位:
在每个mongo实例中重复{地址= mongo3:27017,类型=未知,状态=正在连接,异常= {com.mongodb.MongoSocketException:mongo3},由{java.net.UnknownHostException:mongo3}}引起
,从本质上讲,这意味着您的mongo实例不可访问,因为mongorb
,mongo1
,mongo2
和mongo3
不是'不能正确映射到相应的IP。
它似乎也好像您试图将每个实例映射到192.168.1.102
上的不同端口一样,但是您的代码正在默认端口27017
上发出所有请求。
我不熟悉Eclipse或Spring,但是您可能应该为每个实例配置主机,IP和端口,然后它应该可以正常运行。