从另一个Azure VM连接到Azure VM上的mongodb

时间:2016-08-26 05:15:13

标签: node.js mongodb azure

我正在开发一个使用Azure VM进行部署的NodeJS项目。目前,数据库和服务器位于一个VM中。通过此实现,我可以通过此public String getJSONFromUrl(String url) { HttpURLConnection c = null; try { URL u = new URL(url); c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setRequestProperty("Content-length", "0"); c.setUseCaches(false); c.setAllowUserInteraction(false); c.setConnectTimeout(5000); c.setReadTimeout(5000); c.connect(); int status = c.getResponseCode(); switch (status) { case 200: case 201: BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } br.close(); return sb.toString(); } } catch (IOException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } finally { if (c != null) { try { c.disconnect(); } catch (Exception ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } } return null; }

轻松访问数据库

现在,我正在尝试将数据库移动到另一个VM中。我为端口27017创建了一个端点,并在2个虚拟网络之间配置了VNET到VNET的连接。但是在尝试连接数据库时,我仍然收到错误mongoose.connect("mongodb://localhost")

有没有人有在Azure VM上配置mongodb的经验?

2 个答案:

答案 0 :(得分:0)

通过在一个VNET内使用子网进行网络分区而不是使用单独的VNET,您可以让您的生活更轻松(并且您可以节省资金)。

如果使用单独的VNET,则必须通过Internet配置VPN连接,或配置VNET对等(每GB传输的价格)。除非您有非常特殊的要求(例如您正在运行专用的ExpressRoute到内部部署网络),否则您希望将所有内容都放在同一个VNET中。

快速入门模板通常每个创建一个VNET;这是出于演示目的。在生产环境中,如果需要,您可以使用一个具有多个子网的VNET。如果查看模板,可以很容易地看到您在何处指定对现有VNET的引用。

答案 1 :(得分:0)

您可以尝试在mongodb服务器VM中创建SSH隧道,并通过此隧道连接mongodb服务器。您可以在https://azure.microsoft.com/en-us/blog/create-your-own-dedicated-mysql-server-for-your-azure-websites/处参考类似的情况。

在VM中安装mongodb之后,请尝试按照以下命令操作,最终在我身边工作正常:

  • sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 27017 -j ACCEPT
  • sudo netstat -anltp|grep :27017
  • sudo ssh -fNg -L 27017:127.0.0.1:27018 azurevmuser@servername
  • 在Azure管理门户
  • 中的VM的仪表板中为端口27018创建端点

然后您可以通过以下代码连接到mongodb:

 var mongoose = require('mongoose');
    mongoose.connect('mongodb://<your_server_vm>.cloudapp.net:27018/test');
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {
     console.log("we're connected!")
    });