我應該如何將 KVM 安裝在具有 SSD 和 HDD 且只有一個 RAID 卡的伺服器上,以最大限度地利用我的硬體?
我在當地拍賣會上買了一台戴爾 Poweredge,主要是因為它太划算了,不能放棄,但我只有通過 AWS 和 Linode 使用虛擬伺服器的經驗(即我是新手,所以這可能沒有多大意義)。
我計劃在 ubuntu 上安裝 KVM 以啟動許多虛擬 linux 伺服器來替換我的許多付費 VPS 實例,但我不確定如何最好地利用伺服器硬體的所有資源。具體而言,規格包括:Dell R720、2x E5-2640 12 核 (2.5 Ghz)、1 個 RAID 卡(PERC H710P Mini - Embedded)、128GB RAM、8.2TB 磁碟空間(2 個 SSD @ 185GB ea.;13 個 HDD @ 558GB 一個)。據我所知,似乎不建議同時使用 SSD 和 HDD 創建虛擬磁碟。我能想到的最好的選擇是放棄 2 個 SSD 的性能,只使用所有驅動器來創建一個虛擬驅動器,然後安裝並執行一個 ubuntu 實例(任意選擇),我在其中安裝 KVM,然後啟動通過 KVM 的虛擬伺服器。
同樣,我不確定我在這裡是否有意義,但如果有人可以幫助我找到一種通過 KVM 最大限度地利用我的硬體的好方法,我將不勝感激。
編輯:我在 serverfault 上能找到的最接近的是這個問題:can-i-mix-ssd-with-spindle-hdds
Edit2:或者 KVM 本身提供了發現、連接和/或管理硬體資源的方法?
完全取決於您在儲存數量、性能和冗餘方面的要求。
您可以猜測將多個虛擬驅動器分配給單個 VM 是可能的。VM 將每個虛擬驅動器視為不同的塊(如 /dev/vda 和 /dev/vdb)。
假設您的虛擬機應該具有用於系統啟動和程序執行的 SSD 性能,並且具有更慢但更大的儲存空間來儲存文件(如媒體)。
您可以將兩個 SSD 組裝在一個 RAID-1 陣列中,將主機系統安裝在該陣列上。您可以選擇:將整個陣列用於您的主機系統並將虛擬機 SSD 驅動器儲存在一個目錄中(不推薦),或者將主機系統安裝在一個較小的分區中(盡可能小但留有餘量)並將剩餘空間用於另一個分區,安裝在 /mnt/guest-ssd/ 中(推薦)。
您可以將所有 HDD 組裝在一個 RAID-10 或 RAID-5 陣列中,在 RAID 陣列上創建一個非常大的分區,並將其掛載到 /mnt/guest-hdd/ 作為範例。
兩個 RAID 陣列都將受益於冗餘。由 HDD 製成的 RAID-10 或 RAID-5 陣列相對於單個 HDD 將獲得更好的讀寫性能。
這種架構的第一個優點是:來賓驅動器作為文件儲存在 /mnt/guests-ssd/ 和 /mnt/guests-hdd/ 兩個分區/目錄中。可以輕鬆傳輸圖像以進行備份或遷移。第二個優點是對實際 HDD 容量進行了抽象。/mnt/guests-hdd/ 中的虛擬驅動器可以小於或大於 558 GB。
這種情況的一個缺點是:您沒有很多 SSD 容量。如果 SSD 在 RAID-1 陣列中,您將只能獲得 185 GB 作為主機和來賓系統的 SSD 儲存。這與您可以使用這麼多 RAM 創建的 VM 數量無關。您的資源(RAM、SSD 和 HDD)之間可能存在不均衡,但這取決於您的需求。如果要創建多個 VM 進行儲存,它們將需要小型 SSD(僅適用於 OS + NFS/FTP/…)和大型 HDD。如果您想要許多帶有數據庫(大量 iops)或其他磁碟密集型應用程序的 VM,您應該用更大的 SSD 替換兩個 SSD,並且可能用 SSD 替換幾個 HDD。或使用此處其他人建議的記憶體解決方案。
知道您可以將塊設備傳遞給 VM,並且 RAID 陣列作為塊設備呈現給主機系統,您可以為您的 VM 提供對 RAID 陣列的直接訪問。VM 不會對這個塊背後的 RAID 機制有良心,但這種方法不如前一種靈活:塊的大小將是 HDD 大小的倍數。
- 如果一個 VM 需要中等儲存空間 (500 GiB),您可以使用 2 個 HDD 創建一個 RAID-1 陣列並將此塊/陣列傳遞給 VM。
- 如果一個虛擬機需要大容量儲存,您可以建構一個帶有 4 個硬碟的 RAID-10 陣列,這樣它將獲得一個具有冗餘和改進的 r/w 性能的虛擬 1.1 TiB 驅動器(與單個硬碟相比快 2 倍)。
- 如果一個 VM 需要 XL 儲存,您可以建構一個具有 8 個 HDD 的 RAID-10 陣列,這樣您將獲得一個具有冗餘和改進的 r/w 性能的 2.2 TiB 塊(與單個 HDD 相比快 4 倍)
你可以看到有更多的選擇和更多的配置要做。很少有場景需要這種設置。
或者 KVM 本身提供了發現、連接和/或管理硬體資源的方法?
KVM 不管理主機上的儲存/驅動器。Libvirt 允許您配置儲存池(本地,通過網路,…),但它不會配置 RAID(硬體或軟體),它不會為您建構架構,它不會代替您做出關於您如何做的決定規劃您的儲存、網路、節點和其他資源。
你只能玩這個野獸,玩 KVM/libvirt ;)