问题陈述: 我有两个在同一VPC上运行的Amazon EC2实例。一个ec2正在运行Web应用程序(一个Spring MVC Java网站),而第二个实例正在运行mongodb。
我可以从本地计算机对两个实例以及彼此的两个实例执行ssh。 telnet也可以使用私有ip彼此完美地工作。
我还可以从个人(本地)工作区连接到ec2 mongodb实例,因为创建了必要的规则以接受来自本地和Web应用程序的ec2实例的连接。
但是,无论何时尝试加载索引页,我的Web应用程序实例都无法连接到此mongodb实例并引发以下异常。
例外:
com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[xxx.xx.xx.xxx:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
com.mongodb.diagnostics.logging.JULLogger log
INFO: Exception in monitor thread while connecting to server xxx.xx.xx.xxx:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Permission denied (connect failed)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57)
at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
... 3 more
com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=xxx.xx.xx.xxx:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Permission denied (connect failed)}}]}. Waiting for 30000 ms before timing out
其他详细信息: -已创建两个安全组。 1用于Web应用程序2 Mongodb -EC2 Web应用程序在RHEL + Java 1.8 + Tomcat上运行 -EC2 Mongo实例在RHEL上运行(遵循https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/中的指示) -Java驱动程序用于连接到MongoDB是{驱动程序:{名称:“ mongo-java-driver”,版本:“ 3.4.1”} -bind_ip设置为0.0.0.0,目前没有管理安全性。
假设: 我确定mongodb ec2实例正在接受连接,因为我可以从本地工作空间进行连接。
在这方面的任何线索或方向都会非常有帮助。谢谢。
bind_ip设置为0.0.0.0
安全组正在接受来自几乎所有地方以及入站和出站0.0.0.0/0的连接
在两个实例上为INPUT和OUTPUT设置的iptables规则。