Dopo qualche ricerca ecco le mie considerazioni:
- In genere è buona norma implementare una sorta di logica di ripetizione su ogni risorsa a cui si accede in Azure (database, macchina virtuale, ...). Per MongoDb esiste un'implementazione parziale, quindi dovresti potenzialmente scriverne una tua. Vedi anche questo numero e questo .
- Se possibile, tutte le risorse su Azure dovrebbero trovarsi nella stessa rete virtuale di Azure (in questo modo tutte le connessioni vengono effettuate utilizzando IP privato di Azure anziché IP pubblico. Ciò è utile anche per motivi di sicurezza perché non è necessario aprire l'endpoint al pubblico.
- Quando si distribuisce MongoDb in Azure, provare a seguire le linee guida MongoDb .
- In questo caso particolare dovresti impostare il
net.ipv4.tcp_keepalive_time
a un valore inferiore a tcp keep alive di Azure, che per impostazione predefinita è 240 secondi. In questo modo la connessione viene chiusa e il driver MongoDb può intercettare questa condizione e aprire una nuova connessione. Se la connessione viene chiusa da Azure il driver non può intercettarla. Se vuoi modificare questa impostazione su Azure (non consigliato) puoi trovarla all'interno della configurazione IP pubblico.
Nel mio ambiente di sviluppo ho impostato il net.ipv4.tcp_keepalive_time
a 120 e ora tutto sembra funzionare bene. Considera che se ospiti MondoDb all'interno di un container Docker dovresti impostare questa impostazione sull'host Docker.
Qui alcuni altri link utili:
- http://focusmatic. tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure
- https://docs.mongodb.org/ecosystem/platforms/windows -azzurro/
- https ://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/
- https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490
- Problemi di connessione MongoDB in Azure
- Timeout connessione MongoDB (Azure)