High-Availability
Microsoft 集群相對於 Microsoft 網路負載均衡器的優勢
直到最近,我還假設 Microsoft NLB 在作業系統/機器級別而不是應用程序級別工作。即,NLB 只監視機器上的心跳以檢查機器是否處於活動狀態,然後在某個節點出現故障時關閉它。
但是,我在一個聲稱不同的伺服器故障問題上發現了這條評論。根據評論
NLB 只是將連接路由到打開的 TCP 埠。如果您的應用程序關閉了埠,那麼 NLB 將不會再將連接路由到該埠,直到埠再次打開。
- 以上是真的嗎?NLB 是否在埠級別監視應用程序?
- 如果 (1) 的答案是“是”,那麼它會針對服務關閉和服務掛起情況進行切換,還是僅針對其中一種情況進行切換?
- 如果 NLB 確實完成了上述所有操作,那麼使用集群的情況又如何呢?唯一的優點是,對於集群,您不需要複製數據。但整體集群將是更昂貴的解決方案。
- 對於像 MS SQL Server 這樣的標準產品與我自己的服務相比,上述問題的答案會有所不同還是相同?
- 如果 NLB 不執行上述操作,而僅執行 OS/Machine 級別的心跳,那麼除了集群之外,還有其他方法可以為我自己的服務提供 HA 和切換嗎?
這不是 NLB 的工作方式。NLB 埠規則確定哪些埠/埠在 NLB 主機之間進行負載平衡。未“綁定”到 NLB 埠規則的流量不會在 NLB 主機之間進行負載平衡。NLB沒有監視與埠規則關聯的埠,並在關閉該/那些埠/埠或在特定主機上的該/那些埠/埠上提供服務的應用程序崩潰時禁用到該主機的 NLB 集群流量。NLB 使用第 2 層“心跳”來確定集群中主機的可用性。如果主機未能通過心跳機制,那麼所有其他主機將“收斂”(或重新收斂)從集群中移除無響應的主機,這樣就不會將集群流量(基於埠規則)定向到無響應的主機。響應主機。NLB 嚴格來說是第 3 層(網路層)負載均衡機制。它不是第 7 層(應用層)負載均衡機制。
在 NLB 埠規則中定義的 NLB 主機(例如 HTTP 或 RDP)上掛起的應用程序仍然接收 NLB 流量是完全正常的,即使應用程序無法接受該流量也是如此。這是因為 NLB 不知道第 3 層之上的任何內容。