След известно търсене тук моите съображения:
- Обикновено е добра практика да внедрите някаква логика за повторен опит на всеки ресурс, до който имате достъп в Azure (база данни, VM, ...). За MongoDb има частично внедряване, така че потенциално трябва да напишете свой собствен. Вижте също този проблем и това .
- Ако е възможно, всички ресурси на Azure трябва да са в една и съща виртуална мрежа на Azure (по този начин всички връзки се правят с помощта на Azure Private Ip вместо Public Ip. Това също е полезно от съображения за сигурност, защото не е необходимо да отваряте крайна точка на обществеността.
- Когато внедрявате MongoDb в Azure, опитайте се да следвате официалните указания на MongoDb .
- В този конкретен случай трябва да зададете
net.ipv4.tcp_keepalive_time
до стойност, по-ниска от tcp keep alive на Azure, която по подразбиране е 240 секунди. По този начин връзката се затваря и драйверът на MongoDb може да прихване това условие и да отвори нова връзка. Ако връзката е затворена от Azure, драйверът не може да я прихване. Ако искате да промените тази настройка на Azure (не се препоръчва), можете да я намерите в конфигурацията на Public Ip.
В моята среда за разработка съм задал net.ipv4.tcp_keepalive_time
до 120 и сега изглежда всичко работи добре. Помислете, че ако хоствате MondoDb в контейнер на Docker, трябва да зададете тази настройка на хоста на Docker.
Ето някои други полезни връзки:
- http://focusmatic. tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure
- https://docs.mongodb.org/ecosystem/platforms/windows -лазурно/
- https ://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/
- https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490
- Проблеми с връзката с MongoDB на Azure
- Время за изчакване на връзката с MongoDB (Azure)