簡體   English   中英

從NodeJS服務器發現MongoDB服務器IP

[英]Discovery of MongoDB Server IP from NodeJS Server

我有一個MongoDB實例在DigitalOcean的雲計算上運行。 我的Node(Express)應用程序的另一個實例在另一個雲計算上運行。 有沒有一種方法可以發現數據庫的IP,而不必將其硬編碼到我的應用程序中,因此可以更輕松地進行擴展? 我知道您可以將實例連接到負載均衡器並對其進行硬編碼,但這並不是理想選擇,並且並非在所有情況下都可行,因為每次環境變化時都必須重新配置它。 盡管我正在考慮,但我不希望做一些訪問DigitalOcean API的事情,因為那是特定於平台的。 我問的原因是,我想盡可能地使配置自動化,以便在每次創建/銷毀實例時都不必進行大量配置。 我使用的是靜態IP,因此更改IP不會有問題。 我正在研究諸如consul之類的服務發現系統,我可能會轉向類似的東西,但我認為它(consul)對於我的應用來說似乎有些過時了,盡管我正在考慮這樣做。

您可以使用環境變量來避免將值硬編碼到代碼中。 當應用程序使用dotenv之類的程序包啟動時,可以從流程環境中加載這些值。

發現Web資源當前IP的通常方法是使用DNS主機名。 這不需要安裝任何其他服務,並且只要主機名是可解析的,便可以使用公共IP或專用IP。 有可用的低成本域名(少量美元/年),其中還包括將域名主機名(例如db.yourdomain.xyz )別名為Digital Ocean主機名或IP的服務。 推薦提供程序不在Stack Overflow的范圍內,但有很多。 要比較的一個方面是續訂價格,該價格通常比初始注冊價格高得多。

如果最終將MongoDB部署從獨立版本升級到副本集,則MongoDB 3.6+支持基於DNS的發現格式(SRV查找) ,該格式允許您更改副本集中的主機而無需重新配置客戶端。

負載平衡器和服務發現系統對於管理單個服務器來說是過大的殺傷力,但最終它們也會通過DNS公開資源。 例如,請參閱Consul的DNS接口 (該接口還包括類似於MongoDB基於DNS的發現格式的SRV查找 )。 您也可以通過對Consul API的HTTP請求執行服務發現,但這是更復雜的集成路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM