
我已經研究了幾天的高可用性解決方案,到目前為止我發現UCARP對於 IP 故障轉移非常有用。
它非常簡單並且可以完成工作。
我正在考慮更進一步:
如果路由器連接共享相同IP的兩個節點會將所有資料包傳送到兩個節點(在任何時候),那麼我就可以實現更大的負載平衡。
這就像“主-主”解決方案而不是“主-備份”。
源IP是可分割的。
這冗餘組,假設兩個這樣的節點共享一個(「虛擬」)IP,如上所述。
當它們都啟動時,它們會簡單地劃分客戶端的來源 IP(其純數字)並知道如何做出反應。
例如,Node1 取得除以 2 的 IP
。
客戶端發起 TCP/IP 連線(透過共用 IP)。
連接兩個節點的路由器向兩個節點發送此請求。
如果客戶端的 IP 完全被 2 整除,則 Node1 進行應答。
此時 Node2 會忽略,因為它知道 Node1。
如果一個節點發生故障,例如 Node1,另一個節點(Node2)會偵測到它 - 通常,無論如何,就像 UCARP 所做的那樣!
此時 Node2 將開始為其餘客戶端提供服務。
當 Node1 回來時,Node2 將停止應答來自可被 2 整除的 IP 的 SYN 請求(TCP/IP 連線發起的第一步),讓 Node1 繼續提供服務。
路由器的方向可能會出現問題:需要將每個傳入資料包傳送到冗餘組中的X個節點。高(呃)內部網路負載。
另一個可能的問題問題是每個節點實際上都會收到很多資料包,即使是那些它不「想要」的資料包。
對於今天的路由器/網卡,我認為與以下優點相比,這是一個非常小的價格非常高的可用性。
更不用說在這種情況下我會100%利用我的資源(以一種好的方式)而不是擁有一台或多台除了「備用」之外什麼也不做的「備用」伺服器。
我的確切問題是:
1)是否已經有這樣的解決方案? (開源、免費軟體、基於 Linux)。
2)路由器可以支援這樣的東西嗎?它應該支援什麼標準?關於此功能,我會向 DS/VPS 提供者提出什麼要求?
無論如何,這是我對這個主題的一些思考。我很高興得到一個由連結和幾句話支持的簡潔答案。顯然,不僅如此,我們還歡迎:)
答案1
我認為這是不可能/可行的。它絕對不存在,因為與標準方法相比,它的用途非常有限。
我看到的主要問題是追蹤每個進出的 IP 封包,並以對應用程式完全透明的方式同步兩台電腦上的 IP 堆疊的狀態。如何「模擬」節點 1 上的應用程式執行工作但不應答,或神奇地獲取節點 2 的狀態?它不能只是繼續 nocde 1 應用程式的 tcp 通信,而無需......特殊編程。