Ошибка сброса соединения JDBC сервера Sql: только на Amazon EC2

Контекст: Облако

У нас есть веб-приложение на основе Java, которое мы обычно размещаем на наших собственных серверах. Недавно мы использовали облако Amazon Web Services (AWS EC2) для размещения экземпляра.

Эта «облачная настройка» соответствует нашей типичной настройке «на месте»: один сервер для сервера приложений, другой сервер для сервера базы данных. (Несколько серверов приложений указывают на один и тот же сервер базы данных)

Проблема В этой облачной настройке мы получаем прерывистый «сброс соединения из-за ошибок однорангового узла» между базой данных и драйвером jdbc, где через (по-видимому) случайные интервалы и в случайных точках кодовой базы соединение с базой данных не работает.

Вот несколько примеров. фрагменты ошибок для журнала

Пример трассировки стека 1:

at com.participate.pe.genericdisplay.client.taglib.GenDisplayViewTag.doStartTag(GenDisplayViewTag.java:77)
    ... 75 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:304)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.getMetaData(SQLServerConnection.java:1734)
    at org.jboss.resource.adapter.jdbc.WrappedConnection.getMetaData(WrappedConnection.java:354)

Пример трассировки стека 2

    at java.lang.Thread.run(Thread.java:619)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1368)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1355)
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1532)
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274)
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4437)
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4389)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:1457)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1462)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.setAutoCommit(SQLServerConnection.java:1610)
    at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkTransaction(BaseWrapperManagedConnection.java:429)

Техническая среда

  • Jboss 4.2.2.GA (Jboss-Web 2.0 / Tomcat 6)
  • MSSQL 2005 2.0 jdbc драйвер

Некоторые моменты

  • Мы никогда не видели эту проблему в наша собственная среда (т.е. собственные центры обработки данных), в которой приложение работает в течение нескольких лет
  • . Это привело меня к выводу, что «с сетевой средой Amazon творится что-то забавное». Я могу ошибаться / что-то упускать / и т. Д.
  • Эта проблема возникает только с нашим приложением. У нас есть другие приложения java и php, в которых не было этой проблемы. Другое приложение java использует другой драйвер jdbc (jtds, afaik)
  • Это не похоже на простой тайм-аут соединения

Вопросы

-Кто-нибудь видел это раньше? -Если это «известная проблема» EC2, можем ли мы настроить способ решения проблемы (то есть убедиться, что все находится в собственной подсети или виртуальном частном облаке (vpc)? -Любые настройки драйвера jdbc для решения этой проблемы?

** Обновить ** Я расширил и увеличил вознаграждение по этому вопросу.

Что касается дополнительной информации: два виртуальных сервера (база данных и сервер приложений) находились в разных подсетях, т.е. один переход между двумя серверами.

В не облачной среде у нас есть "нулевые переходы" между двумя серверами.

Наши администраторы хостинга заявили, что мы не можем контролировать подсети наших экземпляров EC2. Это заставило меня задуматься, поможет ли виртуальное частное облако.

заранее спасибо

12
задан user331465 14 June 2011 в 16:38
поделиться