1. 程式人生 > >KVM虛擬機存儲管理

KVM虛擬機存儲管理

默認 可選 cluster 保存 格式化 磁盤 過多 虛擬化 note



KVM的存儲選項有多種,包括虛擬磁盤文件、基於文件系統的存儲和基於設備的存儲。

技術分享圖片



一、KVM的存儲性能解析對比

1、虛擬磁盤文件

  當系統創建KVM虛擬機的時候,默認使用虛擬磁盤文件作為後端存儲。安裝後,虛擬機認為在使用真實的磁盤,但實際上看到的是用於模擬硬盤的虛擬磁盤文件。這一額外的文件系統層會降低系統速度。

  當然,基於磁盤鏡像的虛擬磁盤並非全無益處,磁盤文件系統可以很輕松地用於其它的KVM虛擬化宿主機。但是如果您希望優化KVM虛擬化性能,最好考慮其它的存儲方式。


2、基於文件系統的KVM存儲

  在安裝KVM宿主機時,可選文件系統為dir(directory)或fs(formatted block storage)作為初始KVM存儲格式。默認選項為dir,用戶指定本地文件系統中的一個目錄用於創建磁盤鏡像文件。

  fs選項可以允許用戶指定某個格式化文件系統的名稱,把它作為專用的磁盤鏡像文件存儲。兩種KVM存儲選項之間最主要的區別在於:fs文件系統不需要掛載到某個特定的分區。

  兩種選項所指定的文件系統,都可以是本地文件系統或位於SAN上某個物理宿主機上的網絡文件系統。後者具備一定的優勢,因為SAN可以很輕易地實現多個主機同時訪問,而本地磁盤或文件系統則無法實現。

  還有一種基於文件的磁盤存儲方式是netfs,用戶可以指定一個網絡文件系統的名稱,如Samba.用這種方式作為KVM存儲很方便,因為這樣很容易訪問到位於其它服務器上的文件系統,同時用戶也可以通過多臺宿主機訪問磁盤文件。

  所有的這些基於文件的KVM存儲方式都有一個缺點:文件系統固有缺陷。因為虛擬機的磁盤文件不能直接讀取或寫入KVM存儲設備,而是寫入宿主機OS之上的文件系統。這也就意味著在訪問和寫入文件時中間增加了額外一層,這通常會降低性能。所以,如果您希望尋找KVM虛擬化性能最優方案,最好考慮基於設備的存儲。


3、基於設備的KVM存儲

  另外一種KVM存儲的方式就是使用基於設備的方式。共支持四種不同的物理存儲:磁盤、iSCSI、SCSI和lvm邏輯盤。磁盤方式指直接讀寫硬盤設備。iSCSI和SCSI方式可選,取決於用戶采取SCSI或iSCSI地址把磁盤設備連接。這種KVM存儲方式的優勢在於,磁盤的名稱是固定的,而不需要取決於宿主機OS搜索到磁盤設備的順序。

  這種連接磁盤的方式也有缺點:靈活性不足。虛擬磁盤的大小很難改變,而且基於設備的KVM存儲不支持快照。

  如果要優化KVM存儲的靈活性,可以使用LVM(Logical Volume Manager)。LVM的優勢在於可以使用快照,而快照並不是KVM虛擬化自帶的功能。

  LVM可以把所有存儲放到一個卷組裏,從而輕松創建一個邏輯卷。該卷組是物理磁盤設備的一個抽象,所以如果超出可用磁盤空間最大值,還可以向卷組中添加新的設備,從而極大簡化了增加存儲空間的過程,增加的空間在邏輯卷中直接可以使用。使用LVM使得磁盤空間分配更加靈活,而且增加和刪除存儲也更為容易。

  最後,LVM無論是在單宿主機或多宿主機環境中都可以很好工作。在多宿主機環境中,您可以在SAN上創建邏輯卷。如果使用Cluster LVM,可以很容易的配置成多個主機同時訪問某個邏輯卷。



二、KVM存儲池管理

  為簡化KVM存儲管理的目的,可以創建存儲池。在宿主機上創建存儲池,可以簡化KVM存儲設備的管理。采用存儲池的方式還可以實現對提前預留的存儲空間的分配。這種策略對於大型應用環境很有效,存儲管理員和創建虛擬機的管理經常不是同一個人。這樣,在創建首臺虛擬機之前先完成KVM存儲池的創建是很好的方法。


1、存儲池的基本概念

存儲池是一個由libvirt管理的文件、目錄或存儲設備,提供給虛擬機使用。存儲池被分為存儲卷,這些存儲卷保存虛擬鏡像或連接到虛擬機作為附加存儲。libvirt通過存儲池的形式對存儲進行統一管理、簡化操作。對於虛擬機操作來說,存儲池和卷並不是必需的。支持以下類型存儲池:

技術分享圖片



2、virsh中和存儲池相關的命令

pool-autostart 自動啟動某個池

pool-build 建立池

pool-create-as 從一組變量中創建一個池

pool-create 從一個 XML 文件中創建一個池

pool-define-as 在一組變量中定義池

pool-define 在一個XML文件中定義(但不啟動)一個池或修改已有池

pool-delete 刪除池

pool-destroy 銷毀(刪除)池

pool-dumpxml 將池信息保存到XML文檔中

pool-edit 為存儲池編輯 XML 配置

pool-info 查看存儲池信息

pool-list 列出池

pool-name 將池 UUID 轉換為池名稱

pool-refresh 刷新池

pool-start 啟動一個(以前定義的)非活躍的池

pool-undefine 取消定義一個不活躍的池

pool-uuid 把一個池名稱轉換為池 UUID



3、創建基於目錄的存儲池(dir:Filesystem Directory)

virsh pool-define-as test dir --target /kvm/test

virsh pool-build test

virsh pool-start test

virsh pool-autostart test



4、創建基於分區的存儲池(fs:Pre-Formatted Block Device)

Libvirtd會自動掛載mount分區

(1)準備分區並創建文件系統

fdisk /dev/sdc

mkfs.xfs /dev/sdc1

(2)創建:

virsh pool-define-as test fs --source-dev /dev/sdc1 --target /kvm/test

virsh pool-build test

virsh pool-start test

virsh pool-autostart test


5、創建基於磁盤的存儲池(disk:Physical Disk Device)

virsh pool-define-as test disk --source-dev /dev/sdc --source-format gpt --target /dev

virsh pool-define test

virsh pool-start test

virsh pool-autostart test


技術分享圖片

6、創建基於LVM的存儲池(logical:LVM Volume Group)

基於LVM的存儲池要求使用全部磁盤分區

創建存儲池時,首先準備一個vg,vg中不需要創建lv

virsh pool-define-as kvmvg logical --source-name kvmvg --target /dev/kvmvg

7、創建基於iSCSI的存儲池(iscsi:iSCSI Target)

virsh pool-define-as storage01 iscsi --source-host 192.168.2.20 \ //存儲服務器的地址

> --source-dev iqn.2017-10.com.cloud.www:storage001 \ //target目標

> --target /dev/disk/by-path

virsh pool-start storage01

virsh pool-autostart storage01


技術分享圖片

8、基於NFS的存儲池(netfs:Network Export Directory)

[root@kvm001 ~]# virsh pool-define-as --name kvmnfs --type netfs \

> --source-host 192.168.2.20 \

> --source-path /nfsshare \

> --target /nfstest //需要提前創建目錄



三、KVM存儲池管理

1、virsh中和存儲池相關的命令

vol-clone 克隆卷。

vol-create-as 從一組變量中創建卷

vol-create 從一個 XML 文件創建一個卷

vol-create-from 生成卷,使用另一個卷作為輸入。

vol-delete 刪除卷

vol-download 將卷內容下載到文件中

vol-dumpxml 保存卷信息到XML文檔中

vol-info 查看存儲卷信息

vol-key 根據卷名或路徑返回卷的key

vol-list 列出卷

vol-name 根據給定卷key或者路徑返回卷名

vol-path 根據卷名或key返回卷路徑

vol-pool 為給定密鑰或者路徑返回存儲池

vol-resize 重新定義卷大小

vol-upload 將文件內容上傳到卷中

vol-wipe 擦除卷



2、在存儲池中創建一個qcow2格式的卷

virsh vol-create-as vm test.qcow2 1G --format qcow2

3、向vm2虛擬機添加test

用法:attach-disk <domain> <source> <target>

virsh attach-disk vm2 /kvm/vfs/test.qcow2 /kvm/vfs --cache none












KVM虛擬機存儲管理