建好叢集了,虛擬機器卻無法遷移:缺的是儲存空間
建好叢集並不會讓虛擬機器變得可以遷移。讓遷移成為可能的不是網路,而是磁碟所在的位置。而且容器的遷移方式和虛擬機器不同。
AtlasPVE ·
本條目涵蓋以下問題
- proxmox 遷移失敗
- proxmox 線上遷移無法運作
- proxmox 需要共用儲存空間嗎
- proxmox lxc 遷移
- proxmox 本機儲存空間遷移
叢集建好了,節點彼此看得到,在介面中全都並排顯示。接著嘗試把一台虛擬機器遷移到另一個節點,卻失敗了。
缺的不是叢集,而是儲存空間。
移動的不是虛擬機器,而是記憶體
遷移一台執行中的虛擬機器,意思是把它記憶體中的狀態複製到另一個節點。這透過網路進行,而且很快。
但虛擬機器的磁碟也是必需的,而磁碟比記憶體大好幾倍。如果磁碟只存放在第一個節點自己的硬碟上,第二個節點就無法存取它。遷移要不是根本無法開始,就是必須連磁碟一起複製,這樣花的就不再是幾秒,而是幾分鐘甚至幾小時。
所以答案一句話就能說完:磁碟必須從兩個節點都看得到。
兩種安排方式
共用儲存空間。磁碟放在兩個節點都會連線的共同位置:網路儲存設備、儲存伺服器,或分散式儲存層。遷移時磁碟完全不需要複製,因為它本來就在那裡。這是最快也最乾淨的方式。
複寫。磁碟維持在本機,但會定期複製到另一個節點。遷移時只傳送自上次複製以來變更的部分,所以速度很快。代價是:因為複本是依排程建立的,最後幾分鐘的資料可能會遺失。在計畫中的遷移裡這不是問題;在突發故障時則可能是。
決定哪一種合適的問題是:如果一個節點突然失效,能接受遺失幾分鐘的資料?如果答案是一分鐘都不行,就需要共用儲存空間。如果答案是幾分鐘沒關係,複寫就足夠,而且便宜得多。
容器的遷移方式和虛擬機器不同
這是第一次建置叢集的人最常感到意外的地方。虛擬機器可以在執行中遷移。容器不行:它會先關機、遷移,然後再次啟動。
所以即使有叢集,容器也不存在不中斷遷移這回事。這不是缺陷,而是容器的本質:虛擬機器帶著自己的核心,容器使用伺服器的核心,而那個核心無法隨之移動。
實際的結果:決定哪些工作放在容器、哪些放在虛擬機器時,要把這一點考慮進去。如果無法容忍中斷的工作放在容器裡,那項工作會在維護之夜停止。
事先排好順序
在更新某個節點的那個晚上,下列問題的答案應該早已準備好:這個節點上有多少台虛擬機器、多少台可以遷移、多少台必須關機,以及可遷移的那些要移到哪個節點。
在當晚才臨時想清楚是個壞主意。寫下一次,然後收好備用。
Atlas 的做法
在更新節點之前,Atlas 會列出在該節點上執行中的虛擬機器,並建議一個遷移順序:哪台虛擬機器移到哪個節點。這項建議的設計是把它們輪流分散到各個線上節點。
容器的區別在這裡明確呈現。虛擬機器建議的方法是執行中遷移;容器則是關機、遷移、啟動這條流程。產品不把這當成一個選項提供,而是說明容器無法用其他方式遷移。
交由高可用性管理的虛擬機器也會被標示出來,因為手動遷移它們,和交給管理器自己決定,是兩回事。
而這項建議始終只是建議:遷移指令不會自行執行,按鈕必須由人按下。
一個坦白的限制:目前 Atlas 把每一台執行中的虛擬機器都視為可遷移,並不會檢查它的磁碟是否真的能從另一個節點看到。所以產品不會代為回答上面的儲存空間問題,這個問題必須由管理者自己回答一次。閱讀這項建議時,應記住這一點。
資料來源
Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。