兩個虛擬機器託管在同一台電腦上,我們將它們命名為 VM1 和 VM2。兩個 VM 都託管一個runC
運行伺服器應用程式的容器,客戶端直接在主機上運行,並連接到 VM1 中容器中運行的服務。
我想建立一個故障轉移服務,如果我關閉 VM1 上的容器,客戶端應該連接到 VM2 上執行的容器。
我已經使用以下方法實作並測試了浮動IPkeepalived 和 VRRP如建議的這鏈接,但這僅在整個虛擬機發生故障時才有效,如果VM1 上的容器發生故障,我必須為容器實現容錯服務,即使VM1 已啟動(即容器發生故障),客戶端也應該連接到在VM2上運行的副本但託管該容器的虛擬機器已啟動。
這裡的限制是我不想使用任何可能成為單點故障的負載平衡器/HAproxy 服務。
知道我怎樣才能實現這個目標嗎?還是不可能做到這一點?
編輯: (正如評論中所建議的,添加細節以消除可能的混淆。)VM2 上的容器從主容器(即 VM1 上運行的容器)啟動時起就沒有運行過,有一個名為 as 的容器檢查點/恢復實用程序criu
,您可以查看它這裡和這裡。因此,使用此實用程序,VM1 的容器會遷移到 VM2,方法是先對該容器設定檢查點,然後將該狀態遷移到 VM2 並還原它。但現在還需要確保客戶端能夠連接到在 VM2 上執行的容器。到目前為止,我只是在網路命名空間中運行容器並添加來自 VM1 介面的路由。這樣我就可以防止硬體故障,就像前面提到的那樣,如果 VM1 本身出現故障keepalived 和 VRRP,但現在我想要的是,當容器的狀態遷移到 VM2 一側並且容器出現故障但 VM1 已啟動並且該容器的遷移狀態在 VM2 上恢復時,如何確保客戶端將連接到現在在VM2 上運行容器?我必須模擬這個場景。