Постановка задачи:
У меня есть два экземпляра Amazon EC2, работающих на одном VPC. На одном ec2 запущено веб-приложение (веб-сайт Java Spring mvc), а на втором - mongodb.
Я могу сделать SSH с моего локального компьютера для обоих экземпляров, а также для двух экземпляров друг от друга. Также telnet отлично работает друг от друга, используя частный IP.
Я также могу подключиться к экземпляру ec2 mongodb из моего личного (локального) рабочего пространства, так как создаются необходимые правила для приема соединений от локального экземпляра и экземпляра ec2 веб-приложения.
Однако мой экземпляр веб-приложения не может подключиться к этому экземпляру 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 для веб-приложения 2 Mongodb
- Веб-приложение EC2 работает на RHEL + Java 1.8 + Tomcat
- Экземпляр EC2 Mongo работает на RHEL (следуя инструкциям https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/)
- Драйвер Java используется для подключения к MongoDB: {driver: {name: "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
.
Правила iptables, установленные для INPUT и OUTPUT в обоих экземплярах.