虛擬化與容器

即時遷移(live migration)

即時遷移(live migration)是把一台執行中的虛擬機器從一台實體主機搬到另一台、而它持續執行、對內部正在發生的一切毫無可見中斷的能力。想像小心翼翼地把一整缸魚——連魚帶水——端起來,放到另一張桌上,而魚從未察覺被搬動過。這正是目標:虛擬機器內的資料庫、網頁伺服器或使用者的工作階段,在整台機器於其下被重新安置時持續提供服務,理想上只有以毫秒計的眨眼般停頓。

困難之處在於虛擬機器的記憶體——它龐大又不斷變動。常見技術是預先複製(pre-copy)。超管理器先在虛擬機器仍於來源端執行的同時,把它所有的記憶體頁複製到目的主機。當然,虛擬機器在複製期間會弄髒一些頁,於是超管理器接著只送出有變動的那些頁,再送這一輪期間變動的頁,如此反覆,髒頁集合逐漸縮小。最後,在一段極短的「停止並複製」時刻,它暫停虛擬機器,送出最後少數髒頁加上 CPU 暫存器與裝置狀態,再於目的端讓虛擬機器恢復——停頓短到連線與使用者都不會中斷。

即時遷移之所以重要,是因為它讓實體主機變成可拋棄的。維運人員可以為了維護而清空一台伺服器、藉由把繁忙的虛擬機器分散到各主機來平衡負載、或撤離一台出現硬體故障徵兆的機器——全程不必停掉服務。誠實的限制:它通常需要主機之間有共享或複製的儲存與快速網路;那段反覆的複製會耗用頻寬,若虛擬機器弄髒記憶體的速度快過連結能送出的速度,遷移可能陷入困境;而且兩台主機必須相容到足夠(常需相近的 CPU),客體才能安全地恢復。

一座資料中心需要把一台伺服器關機升級記憶體。維運人員不去關掉上頭的十二台虛擬機器,而是把每一台即時遷移到鄰近的伺服器。瀏覽這些虛擬機器所託管網站的使用者毫無察覺——頂多一個不到一秒的小頓——即使他們的虛擬機器在實體上已搬到了不同的硬體。

一台執行中的虛擬機器搬到另一台主機,只有不到一秒的停頓。

即時遷移不是瞬間傳送:若虛擬機器寫入記憶體的速度快過網路複製的速度,反覆的預先複製可能永遠收斂不了,被迫拉長停頓或退回備案。它通常也需要共享儲存與相容的主機 CPU。

又称
VM migration虛擬機器遷移