KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V

目錄:
(3.1)瞭解cgroup工作機制
(3.2)KVM環境中對CPU資源的限制
(3.3)KVM環境中對網絡資源的限制
(3.4)P2V
(3.5)V2V


(3.1)瞭解cgroup工作機制
cgroup,其名稱源自控制組羣(control groups)的簡寫,是Linux內核的一個功能,用來限制、控制與分離一個進程組的資源(如CPU、內存、磁盤輸入輸出等)。這個項目最早是由Google的工程師在2006年發起,最早的名稱爲進程容器。在2007年時,因爲在Linux內核中,容器(container)這個名詞有許多不同的意義,爲了避免混亂,被重命名爲cgroup,並且被合併到2.6.24版的內核中去。自那以後,又添加了很多功能。cgroup的一個設計目標是爲不同的應用情況提供統一的接口,從控制單一的進程到操作系統層虛擬化。cgroup提供:
資源限制:組可以被設置不超過設定的內存限制,也包括虛擬內存
優先級:一些組可能會得到大量的CPU或磁盤IO吞吐量
結算:用來衡量系統確實把多少資源用到合適的目的上
控制:凍結組或檢查點和重啓動
cgroup是一個很重要的資源控制機制,有時候我們需要對CPU進行限制,對網絡進行限制,對內存或者磁盤IO進行限制,如果沒有做限制很可能會因爲某個程序或者進程大量消耗資源而導致系統崩潰,此時我們使用cgroup進行資源管理就會非常的有效。
(3.1.1)CPU管控器在kerner中被默認啓動,這可使所有系統service的可用CPU量相同,而與其所包含進程數量無關。此項默認設定可以使用/etc/systemd/system.conf配置文件中的defaultControllers參數來修改。如需管理CPU的分配,請使用單位配置文件[Service]部分中的下列指令:CPUShares=value,請使用CPU share的數量代替value。默認值爲1024,您可以增加此數值來給單位分配更多CPU。一般我們對CPU資源進行限制主要是通過命令行進行操作或者通過修改配置文件這樣兩種方式。現在我們先在vms002主機上安裝Apache服務。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.2)接着我們在通過systemd-cgtop命令發現此時並沒有對httpd服務做任何的限制。一般我們服務的啓動腳本是放在/usr/lib/systemd/system/目錄下的httpd.service文件中的。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.3)而我們需要對服務的屬性進行設置的時候,主要是通過命令# systemctl set-property httpd.service CPUShares=2048來完成的,此時在/etc/systemd/system/目錄下便會產生一個關於httpd.service的目錄文件。並且在90-CPUShares.conf文件中會產生我們命令行設置的信息,此時通過# systemd-cgtop命令查看,也已經產生了httpd的一行信息。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.4)對CPU等資源進行限制的時候,只有這個資源緊張的時候,這種分配才生效,當這種資源不緊張的時候,設置無效。我們發現此時vms002主機的系統中是有2個CPU在運行的,接着我們進入到/sys/devices/system/cpu/目錄中看到cpu1/online的數值爲1開啓狀態,我們可以將cpu1/online的設置爲0關閉禁用
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.5)接着我們在vms002主機上安裝一個cpuload軟件,並將cpuload可執行文件複製獨立的兩個文件cpuload1和cpuload2。同時創建cpuload1.service和cpuload2.service兩個定製服務文件,並將配置文件拷貝到/usr/lib/systemd/system/目錄下。自定義服務,定製服務
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.6)此時在系統中我們便可以看到兩個服務cpuload1.service和cpuload2.service,並且都是沒有啓動的狀態。我們將兩個服務啓動起來,此時通過如下的命令# ps mo pid,comm,psr `pgrep cpuload`,便可以看到cpuload1和cpuload2都是運行在0號CPU上的。此時我們通過top命令可以發現兩個cpuload服務的資源使用率基本差不多,也可以使用# systemd-cgtop命令查看。
# ps mo pid,comm,psr `pgrep cpuload`
# top -d 1
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.7)接着我們使用命令行的方式對cpuload1進行資源限制,此時在/etc/systemd/system/目錄下便產生了一個cpuload1.service.d的目錄。然後我們使用修改配置文件的方式創建cpuload2.service.d,並且在cpuload2.service.d目錄下的90-CPUShares.conf配置文件中將CPUShares的值更改爲1024
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.8)然後我們將服務重載一下,再將cpuload2的服務啓動起來,此時cpuload2服務就已經正常的運行了。
# systemctl daemon-reload
# systemctl restart cpuload2.service
# systemctl status cpuload2
# top -d 1
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.9)此時我們通過top命令發現cpuload1服務的CPU使用率基本是cpuload2服務CPU使用率的2倍,與我們設置的期望值一致。我們通過# systemd-cgtop命令同樣發現cpuload1服務也基本是cpuload2服務的CPU使用率的2倍
# top -d 1
# systemd-cgtop
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.10)接着我們對內存進行管理限制,我們先安裝一個內存測試的工具memload,同時在/usr/lib/systemd/system目錄下創建一個定製服務的配置文件memtest.service消耗1024M的內存。自定義服務,自定義一個服務,定製服務
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.11)我們將memtest服務啓動起來,此時便會發現可用的內存前後大約少了1024M左右
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.12)接着我們使用修改配置文件的方式來對內存資源做限制操作,我們進入到/etc/systemd/system/目錄中,創建一個目錄memtest.service.d,接着在memtest.service.d目錄中創建一個配置文件90-MemoryLimit.conf用來限制內存最大使用512M。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.13)服務中是設置了消耗1024M的內存,但實際上經過了cgroup的資源限制後,我們發現系統只是消耗了512M的內存了
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.14)接下來我們設置對CPU的親和性做限制,所謂CPU的親和性(affinity)就是指定進程在哪個特定的CPU上運行。正常的情況下httpd服務的進程是會隨機的運行在系統中的任意的CPU上的(圖3-32)。現在假設我們的系統有4核的CPU,此時如果我們有多個服務在同時運行,我們可以指定1號CPU運行Apache,2號CPU運行Nginx,3號CPU運行MySQL,同時單獨指定4號CPU不運行任何的服務,使得不同的服務運行在不同的CPU上,此時如果MySQL服務出現了異常,CPU的使用率已經達到了100%了,那麼也只是3號CPU的資源枯竭,不會影響到其他CPU上服務的運行,此時我們作爲管理員便可以使用4號CPU來做管理,管理員可以正常的登錄系統將系統中異常的進程kill掉。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.15)我們在/etc/systemd/system/httpd.service.d目錄下,創建一個資源限制的文件90-CPUAffinity.conf,在配置文件中使用cgroup設置CPU資源的親和性爲0號CPU
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.1.16)接着我們將服務全部重新加載一下,再將httpd服務重新啓動一下。此時發現httpd的進程經過了資源限制後,已經全部在0號CPU運行了。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V


(3.2)KVM環境中對CPU資源的限制
(3.2.1)我們先在vms002主機的KVM環境中創建一個rhel7-1的虛擬機。發現這臺rhel7-1虛擬機的線程是同時任意運行在當前vms002主機的0號和1號CPU上的。
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.2.2)我們可以在virt-manager的界面配置rhel7-1虛擬機的親和性爲1號CPU。此時rhel7-1虛擬機的所有進程都默認是在1號CPU上運行
# virsh edit rhel7-1
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.2.3)接着我們再創建一個虛擬機rhel7-2,並且設置rhel7-2虛擬機也是運行在1號CPU上,此時我們發現rhel7-1和rhel7-2兩臺虛擬機都運行在1號CPU上了。而且使用# top -d 1命令發現,兩臺虛擬機的CPU使用率基本是持平的。
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
# top -d 1
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.2.4)接着我們來調整KVM環境裏兩臺虛擬機的CPU消耗的屬性,我們先將兩臺虛擬機關機,然後再分別編輯rhel7-1和rhel7-2,通過命令# virsh edit rhel7-1對rhel7-1虛擬機進行設置,cputune表示調優,我們設置CPUShares的值爲2048,設置rhel7-2虛擬機的CPUShares的值爲1024
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.2.5)接着我們將兩臺虛擬機關機後在重新開機啓動,並執行# cat /dev/zero > /dev/null的命令,通過# top -d 1命令查詢到rhel7-1虛擬機的CPU使用率基本是rhel7-2虛擬機使用率的2倍,使用# systemd-cgtop命令也基本可以看出兩臺虛擬機在0號CPU運行,且rhel7-1的使用率是rhel7-2的使用率的2倍
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V


(3.3)KVM環境中對網絡資源的限制
(3.3.1)注意:如果我們在vms002(192.168.26.102)主機上搭建了一個FTP服務,並且在/var/ftp目錄下牀架了一個dvd的目錄,此時使用掛載將vms002主機上的光盤鏡像掛載到/var/ftp/dvd目錄上,此時如果在KVM環境中有一臺虛擬機rhel7-1(192.168.122.65)主機,那麼這個rhel7-1虛擬機是可以通過ftp://192.168.122.1/dvd 訪問到光盤鏡像的內容的。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.3.2)我們可以通過修改配置文件的方式對KVM環境中的虛擬機的網絡資源進行限制。在rhel7-1(192.168.122.65)虛擬機上設置進流量和出流量最大都是128k,而rhel7-2(192.168.122.115)虛擬機不作任何的網絡流量限制。
# virsh edit rhel7-1
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.3.3)然後我們在vms002主機上創建一個200M的文件,並通過scp的方式拷貝到兩臺虛擬機,以便比較其傳輸速度的快慢。測試發現200M的文件拷貝到rhel7-2主機用了7秒,而將200M的文件拷貝到rhel7-1主機上至少用了7分鐘,從而說明了我們的網絡資源限制的配置生效了。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V


(3.4)P2V
(3.4.1)注意:如果出現了以下報錯“狀態 :睡眠中,進程ID:3475”,可以通過執行如下的命令處理。
# rm -rf /var/run/yum.pid
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.2)物理到虛擬,即Physical to virtual,簡稱P2V。它是指將操作系統、應用程序或者數據從計算機的物理硬盤中遷移到一個虛擬化環境中或是磁盤分區中。P2V可以手工創建或定義一個虛擬環境,並在此環境中安裝操作系統、應用程序或者數據,這可能會是一個冗長或不確定的過程,尤其是在一個包含大量舊的硬件條件的新環境中。爲了簡化操作,會有一些支持全部或者部分虛擬化的自動軟件工具,也就是我們所熟識的遷移工具。通常P2V就是創建虛擬的應用服務器環境,如在IBM服務器上搭建虛擬環境從而運行Windows系統。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.3)現在我們準備完成的P2V遷移的拓撲圖如下所示,物理機被遷移的系統使用的是rhel7.1的版本,同時物理機需要使用virt-p2v-0.9.1-2.1.el6.centos.noarch鏡像盤來引導,虛擬化環境的宿主機使用的是rhel6.6的系統,且在我們的虛擬化環境中需要安裝virt-v2v軟件。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.4)我們使用KVMhost(192.168.26.131)作爲宿主機,安裝rhel6.6的系統,然後使用TestRhel7作爲被遷移的物理機,安裝的是rhel7.1的系統。我們將virt-p2v-0.9.1-2.20130730.1.el6.centos.noarch.rpm軟件放置到KVMhost宿主機上,並將virt-p2v使用rpm安裝起來,隨後我們便得到了一個virt-p2v-0.9.1-2.20130730.1.el6.centos.iso的鏡像文件,這個文件我們將作爲TestRhel7系統在被遷移時的引導盤。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.5)接着我們設置TestRhel7物理機在開機時,使用virt-p2v-0.9.1-2.20130730.1.el6.centos.iso這個引導盤進入系統。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.6)接着我們設置KVMhost主機,將rhel6.6的光盤鏡像掛載到/mnt目錄下,並且設置好aa.repo的YUM源。並在KVMhost主機的系統中將虛擬化的環境安裝一下,同時將KVMhost主機的CPU虛擬化功能打開。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.7)由於需要打開圖形化功能,所以我們需要保證KVMhost主機上的xorg-x11-xauth.x86_64這個軟件包安裝起來。配置完成後將系統重啓一下即可。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.8)接着我們還要在KVMhost主機上安裝virt-v2v軟件,並在/etc/fstab文件中進行光盤自動掛載的配置(/dev/cdrom光盤鏡像掛載到/mnt目錄下)
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
/dev/cdrom /mnt iso9660 defaults,ro,loop 0 0
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.9)接着我們在KVMhost主機上的/etc/virt-v2v.conf配置文件中進行配置,我們設置默認的存儲storage生效,並設置默認的網絡network生效,並將virt-manager打開
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.10)接着我們將TestRhel7主機啓動並使用光盤鏡像引導,進入到了virt-p2v的界面,選擇連接網絡,然後輸入KVMhost主機的IP地址和密碼
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.4.11)此時作爲物理機的TestRhel7此時便已經遷移到了我們KVMhost主機的虛擬機上了,設置好網卡、硬盤、顯示的相關協議後,由物理機遷移過來的虛擬機便可以正常的啓動了。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V


(3.5)V2V
(3.5.1)V2V(Virtual-to-Virtual)遷移是在虛擬機之間移動操作系統和數據,照顧主機級別的差異和處理不同的虛擬硬件。虛擬機從一個物理機上的VMM遷移到另一個物理機的VMM,這兩個VMM的類型可以相同,也可以不同。如VMware遷移到KVM,KVM遷移到KVM。可以通過多種方式將虛擬機從一個VM Host系統移動到另一個VM Host系統
(3.5.2)現在我們準備完成的V2V遷移的拓撲圖如下所示,被遷移的虛擬機是vmware環境中的一臺rhel7.1的虛擬機,虛擬化環境中使用的宿主機是rhel6.6的系統,其中rhel7.1的虛擬機是TestRhel7,rhel6.6主機是KVMhost。我們需要將TestRhel7作爲虛擬機遷移到KVMhost宿主機中作爲虛擬機運行。
注意:如果是要把物理機的Windows系統P2V到KVM裏的話,不要忘記了要在Windows系統安裝半虛擬化驅動
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.2)其中vmdk文件是TestRhel7虛擬機的硬盤文件,vmx文件是TestRhel7虛擬機的配置文件,我們將這兩個文件拷貝到KVMhost宿主機中
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.3)首先我們要將vmware的硬盤文件轉換成KVM所能讀取的硬盤格式。
# qemu-img convert -O qcow2 -f vmdk TestRhel7.vmdk TestRhel7.qcow2
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.4)由於vmware虛擬機的配置文件的格式是文本的格式,一行一個條目,而KVM虛擬機的配置文件的格式是xml格式,兩種配置文件不通用,所以我們需要把vmware的配置文件轉換成KVM所能讀懂的配置文件,我們使用virt-goodies_0.4.tar.gz軟件,找到vmware2libvirt可執行文件,並生成TestRhel7.xml文件。
注意:故障排錯,需要將TestRhel7.xml和TestRhel7.vmdk放在同一個文件夾裏然後執行轉換xml文件的操作
# ./vmware2libvirt -f /root/TestRhel7.vmx > /root/TestRhel7.xml
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.5)修改一下名稱爲v_TestRhel7,將模擬器的值修改爲/usr/libexec/qemu-kvm,同時存儲需要設置磁盤的格式爲vda,且硬盤的位置爲/var/lib/libvirt/images/TestRhel7.qcow2
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.6)接着將TestRhel7.xml配置文件拷貝到/etc/libvirt/qemu的目錄中,將TestRhel7.qcow2的硬盤文件拷貝到存儲池中,然後創建遷移到KVMhost宿主機中的虛擬機v_TestRhel7
# virsh define TestRhel7.xml---此處指的是文件名稱
# virsh start v_TestRhel7---此處指的是虛擬機的名稱
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
(3.5.7)然後將v_TestRhel7虛擬機的硬盤格式更改爲qcow2格式,然後啓動虛擬機,此時虛擬機便可以正常的啓動了。
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V
KVM虛擬化技術詳解(三)--guestos資源限制及P2V,V2V

—————— 本文至此結束,感謝閱讀 ——————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章