2016-08-26 162 views
0

我正在使用Azure VM進行部署的NodeJS項目。目前,數據庫和服務器都在一個虛擬機中。有了這個實現,我可以很容易地訪問到這個數據庫,現在,我試圖將數據庫移動到另一個虛擬機。我爲端口27017創建了一個端點,並在兩個虛擬網絡之間配置了VNET到VNET的連接。但嘗試連接到數據庫時,仍然收到錯誤Connection refused從另一個Azure VM連接到Azure VM上的mongodb

有沒有人在Azure虛擬機上配置mongodb?

+0

您正在使用哪種類型的虛擬機,經典或手臂?你正在使用哪個平臺? Windows還是Linux? –

+0

我正在使用Linux經典虛擬機 – DucPham

+0

您是否配置了'mongodb.conf'以允許遠程MongoDB連接? –

回答

0

通過在一個VNET內部使用子網進行網絡分區而不是使用單獨的VNET,您將使您的生活變得更輕鬆(並且可以節省資金)。

如果您使用單獨的VNET,則必須通過Internet配置VPN連接,或配置VNET對等(它們按每GB傳輸的價格進行配置)。除非你有非常特殊的要求(比如你正在運行一個專用的ExpressRoute到內部網絡),否則你希望在同一個VNET中擁有一切。

quickstart-templates通常每個創建一個VNET;這是爲了演示的目的。在生產環境中,如果需要,您可以擁有一個帶有多個子網的單個VNET。如果您查看模板,可以很容易地看到您指定對現有VNET的引用。

+0

我打算將數據庫保存在一個虛擬機中,並且會有其他幾個虛擬機連接到其他位置。 我已經按照本教程配置了2 VNET之間的VPN連接https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-configure-vnet-to-vnet-connection/ 但是我仍然無法連接到其他VM中的數據庫 – DucPham

0

您可以嘗試在您的mongodb服務器虛擬機中創建SSH隧道,並通過此隧道連接mongodb服務器。你可以參考他在https://azure.microsoft.com/en-us/blog/create-your-own-dedicated-mysql-server-for-your-azure-websites/上的類似場景。

在虛擬機中安裝的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 [email protected]
  • 創建的端點端口27018位於Azure管理門戶虛擬機的儀表板中

然後你可以通過下面的代碼連接到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!") 
    });