將同一個分區掛載到多個虛擬機是否安全?
我正在使用帶有 Xen Hypervisor 的 ubuntu 20.04。在我的機器上,我有一個 SSD 來託管我的 VM 映像,然後是四個我有數據的 sata 驅動器。我目前的設置是將數據掛載到我的 domain0 上,然後通過網路文件伺服器將該數據提供給其他 VM。
這似乎效率低下,因為所有虛擬機都必須通過我的 NIC 才能訪問數據。我認為這是一個很大的瓶頸是否正確?
在同一台物理機中提供數據的行業標準是什麼?對此設置有何建議或改進?
在每個 VM 上安裝數據 LVM 是否有害?我對這種方法的擔憂是,如果兩個 VM 嘗試同時訪問同一個數據點會發生什麼?此設置是否容易受到數據損壞的影響?
一般來說,不,除非您遇到兩個非常具體的限制之一。任何一個:
- 設備需要以只讀方式(必須在設備級別,而不是文件系統級別)公開給所有 VM,並且不得在執行時從任何地方寫入。
或者:
- 該卷必須使用可辨識集群的文件系統進行格式化,並且所有 VM 都必須是集群的一部分(如果需要訪問數據,主機系統也必須是其中的一部分)。
通常,不支持集群的文件系統被設計為假定它們具有對其備份儲存的獨占訪問權限,即除非他們做一些事情來改變它們,否則它的內容不會改變。如果違反此約束,這顯然會導致記憶體問題,但實際上比這更糟糕,因為它擴展到文件系統的內部結構,而不僅僅是文件數據。這意味著您可以通過同時將文件系統安裝在多個節點上來非常輕鬆地完全破壞文件系統。
集群感知文件系統是解決此問題的傳統解決方案,它們使用基於網路的鎖定或共享儲存本身的特殊同步形式來確保一致性。在 Linux 上,您的選擇幾乎是 OCFS2 和 GFS2(根據個人經驗,我推薦 OCFS2 而不是 GFS2,但 YMMV)。但是,他們需要集群中所有節點的更多內容才能保持同步。作為一般規則,由於它們強制執行鎖定和記憶體失效要求,它們對許多工作負載具有顯著的性能限制,它們往往涉及大量磁碟和網路流量,並且與傳統的單節點相比,它們可能功能不完整文件系統。
我想指出,通過本地網橋的 NFS(做你想做的“簡單”選項)實際上是相當有效的。除非您使用相當奇怪的設置或堅持每個 VM 都位於其自己的 VLAN 上,否則 NFS 流量甚至不會觸及您的 NIC,這意味著這一切都發生在記憶體中,因此幾乎沒有效率問題(尤其是如果您為虛擬機使用半虛擬化網路)。
理論上,如果你設置 9P,你可能會得到比 NFS 更好的性能,但所付出的努力可能並不值得(性能差異可能不會太大)。
除了所有這些之外,還有第三種選擇,但在單台機器上使用它是多餘的。您可以設置像 GlusterFS 或 Ceph 這樣的分佈式文件系統。如果您的數據並非天生與您的虛擬機共存(也就是說,您可能在數據所在的節點以外的節點上執行虛擬機),這實際上可能是最佳選擇,因為雖然它不如 NFS 或 9P 高效,但它將在基礎架構方面為您提供更大的靈活性。