Po kilku poszukiwaniach tutaj moje rozważania:
- Dobrą praktyką jest zazwyczaj zaimplementowanie logiki ponawiania prób w każdym zasobie, do którego uzyskujesz dostęp na platformie Azure (baza danych, maszyna wirtualna, ...). W przypadku MongoDb istnieje częściowa implementacja, więc powinieneś potencjalnie napisać własną. Zobacz także ten problem i to .
- Jeśli to możliwe, wszystkie zasoby na platformie Azure powinny znajdować się w tej samej sieci wirtualnej platformy Azure (w ten sposób wszystkie połączenia są nawiązywane przy użyciu prywatnego adresu IP platformy Azure zamiast publicznego adresu IP. Jest to również przydatne ze względów bezpieczeństwa, ponieważ nie trzeba otwierać punktu końcowego publicznie.
- Wdrażając MongoDb na platformie Azure, postaraj się postępować zgodnie z oficjalnymi wytycznymi MongoDb .
- W tym konkretnym przypadku powinieneś ustawić
net.ipv4.tcp_keepalive_time
do wartości niższej niż tcp utrzymywania aktywności platformy Azure, która domyślnie wynosi 240 sekund. W ten sposób połączenie zostaje zamknięte, a sterownik MongoDb może przechwycić ten warunek i otworzyć nowe połączenie. Jeśli połączenie zostanie zamknięte przez platformę Azure, sterownik nie może go przechwycić. Jeśli chcesz zmienić to ustawienie na platformie Azure (niezalecane), możesz je znaleźć w konfiguracji publicznego adresu IP.
W moim środowisku programistycznym ustawiłem net.ipv4.tcp_keepalive_time
do 120 i teraz wszystko wydaje się działać bez zarzutu. Weź pod uwagę, że jeśli hostujesz MondoDb w kontenerze Docker, powinieneś ustawić to ustawienie na hoście Docker.
Oto kilka innych przydatnych linków:
- http://focusmatic. tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure
- https://docs.mongodb.org/ecosystem/platforms/windows -lazur/
- https ://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/
- https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490
- Problemy z połączeniem MongoDB na platformie Azure
- Przekroczone limity czasu połączenia MongoDB (Azure)