Virtualization

將正在執行的虛擬機從一個 Hypervisor 遷移到另一個 Hypervisor 是如何實際工作的?

  • April 29, 2014

在雲環境中將正在執行的虛擬機從一個管理程序遷移到另一個管理程序實際上是如何工作的?

我知道這是可能的並且存在此功能。但是,當正在執行的虛擬機從一個 Hypervisor 遷移到另一個 Hypervisor 時,實際上會發生什麼呢?我很難想像這可能沒有絲毫中斷?

雖然我可以想像,如果裸機在物理上非常接近,它可能會以某種方式實現,但我很難將正在執行的虛擬機從美國數據中心遷移到歐盟數據中心。

誰能解釋實際發生的事情以及如何實現沒有可察覺的停機時間但保持一致性?

從概念上講,該過程很簡單:開始通過網路將 VM 的所有 RAM 從一個物理主機複製到另一個物理主機,並跟踪您已經複製的記憶體部分在複製它們之後已經更新。對更改的 RAM 重複循環,直到更改集變小,暫停 VM,複製 RAM 的最後一位(和 CPU 寄存器狀態),然後開始在新的物理主機上執行 VM。發送一個免費的 ARP,這樣網路就可以看到 VM 的新位置,然後就可以離開了。它不是 100% 透明的——在暫停和 ARP 延遲之間,VM 將離線大約一秒鐘。

為了使其工作,記憶體 IO 速率必須小於主機之間的連結速度(這就是為什麼 VMotion 首選使用直接 10GigE 連結,主機之間沒有路由器),以及主機之間的延遲需要非常短——VMware 需要 5 毫秒的往返時間。

源主機和目標主機需要具有相同的底層磁碟儲存,這通常將您限制在同一房間內的主機。您可以進行同步儲存複製以走得更遠,但通常會降低性能(因為每個磁碟操作都必須到遠端並接收確認)。

有一些方法可以將服務遷移到更遠的距離(甚至在大陸之間),但這些方法可以切換應用程序的活動實例在哪裡(以及如何到達它),而不是實時遷移 VM 本身。

引用自:https://serverfault.com/questions/591647