Mongodb

MongoDB可以使用TCP Balancer動態管理Mongos之間的平衡嗎

  • December 13, 2021

如果我有一個維護 10 個應用程序的業務,我需要將這 10 個應用程序的請求負載動態分配給 3 個 Mongos。

就像 TCP 負載均衡器需要連接到 MongoDB 配置伺服器並不斷獲取 3 個 Mongos 的健康狀態並根據健康狀態分配來自應用程序的請求負載(獲取特定的 Mongos 是忙還是閒)。

使用 TCP Balancer 可以實現上述任何事情嗎?或者它只是可以用來配置負載靜態。

請確認。

如果那些 (10) 應用程序位於自己的節點上(您有多個應用程序節點),則每個節點都可以安裝 mongos,因此應用程序 Connect 的 localhost mongos。這些 mongos 然後連接到您的配置伺服器和集群。

您只需使用 LB 將客戶端負載分配給這些應用程序伺服器。

不,MongoDB 不支持外部 TCP 負載均衡器(在 mongos 前面)。將 mongos 路由器放置在每個應用程序伺服器上。在應用伺服器前面可以有 TCP LB。

首先,mongos 就像分區系統前的路由器。驅動程序,即 mongodb 客戶端的名稱,將連接到 mongos 並讓它處理路由 CRUD 操作的分區。這非常有效。MongoDB 為不同的語言和框架提供了許多不同的驅動程序。

其次,對於結果大於單個批次的查詢,會創建一個游標。它基本上是驅動程序中多個批次的相關標識符。驅動程序發出查詢 (OP_QUERY) 並接收第一批結果。如果來自 OP_QUERY 的響應包含游標 ID,則意味著有更多結果,驅動程序可以發出 OP_GET_MORE 來檢索下一批。這裡唯一的要求是將 OP_GET_MORE 發佈到最初接收它的同一伺服器。原因

那麼,問題是什麼?好吧,假設負載均衡器已放置在一堆不同的伺服器前面,並且 mongodb 需要將 OP_GET_MOREs 發送到與初始 OP_QUERY 相同的伺服器,負載均衡器將需要了解 MongoDB 有線協議以保證這種行為。當然,問題是負載均衡器不理解 MongoDB 有線協議。所以,簡單地說,負載均衡 mongos 根本行不通,對吧?

負載均衡 Mongos

引用自:https://dba.stackexchange.com/questions/185317