Тайм-аут соединения с MySQL в Windows Azure - PullRequest
0 голосов
/ 01 февраля 2011

У нас есть приложение Windows Azure (архитектура Lokad.CQRS), которое интегрируется с несколькими сторонними системами.Одна из этих интеграций происходит в mySQL.Все шло хорошо, но в последнее время у нас есть одна база данных mySQL, к которой приложение Windows Azure не может подключиться, что приводит к тайм-ауту.

Вот соответствующая трассировка стека:

System.TimeoutException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond ---> 
System.IO.IOException: Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. --->
System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
--- End of inner exception stack trace ---
at MyNetworkStream.HandleOrRethrowException(Exception e)
at MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32  offset, Int32 count)
at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlConnection.Open()

ВажноОсновные моменты:

  • целевая база данных доступна из Windows Azure (используется переадресация портов для проверки при подключении через MySQL Workbench);
  • интеграция с целевой БД работает должным образом из Local Azure DevFabric;
  • Проблема в Windows Azure возникает для подключений в кабине и в пуле.
  • TCP / IP, обычный порт, без SSL;
  • Время ожидания подключения для этой операциидостаточно большой - 5 секунд, и он постоянно выходит из строя (но всегда происходит с компьютера, не являющегося Azure, расположенного недалеко от сетевого элемента NE)

У нас есть соединение Oracle, MS SQL, mySQL и PostgreSQL, работающее от Lokad.CQRS поверх Windows Azure в различных настройках и конфигурациях (серверы баз данных под управлением Linux / Windows).Но этот конкретный случай с MySQL просто полностью сбивает меня с толку.

Есть предположения о том, что может быть причиной проблемы?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Я просто позвонил вам, чтобы задать вам несколько вопросов, поскольку мы хотели бы отследить эту проблему и помочь убедиться, что у нас нет проблем с приложениями oss, работающими в Windows Azure. Дайте мне знать, если вы этого не видите.

Джас Сандху, @jassand Команда по стратегии взаимодействия http://interoperabilitybridges.com http://blogs.msdn.com/interoperability

0 голосов
/ 02 февраля 2011

Решение:

По какой-то причине Azure Production Fabric добавляла слишком много времени ожидания для соединения с целевой базой данных, оно всегда истекло.Одно и то же соединение с соседней в Европе машиной никогда не нарушало тайм-аут соединения.

Увеличение времени ожидания соединения для этого конкретного случая (в 5 раз) действительно помогло решить проблему, не добавив слишком большого риска для остальныхраспределенной системы.

Вероятно, проблема была в конфигурации сети на NE DC, неисправном маршрутизаторе или чем-то еще.

...