目錄:
(3.1)瞭解cgroup工做機制
(3.2)KVM環境中對CPU資源的限制
(3.3)KVM環境中對網絡資源的限制
(3.4)P2V
(3.5)V2Vcentos
(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服務。
(3.1.2)接着咱們在經過systemd-cgtop命令發現此時並無對httpd服務作任何的限制。通常咱們服務的啓動腳本是放在/usr/lib/systemd/system/目錄下的httpd.service文件中的。
(3.1.3)而咱們須要對服務的屬性進行設置的時候,主要是經過命令# systemctl set-property httpd.service CPUShares=2048來完成的,此時在/etc/systemd/system/目錄下便會產生一個關於httpd.service的目錄文件。而且在90-CPUShares.conf文件中會產生咱們命令行設置的信息,此時經過# systemd-cgtop命令查看,也已經產生了httpd的一行信息。
(3.1.4)對CPU等資源進行限制的時候,只有這個資源緊張的時候,這種分配才生效,當這種資源不緊張的時候,設置無效。咱們發現此時vms002主機的系統中是有2個CPU在運行的,接着咱們進入到/sys/devices/system/cpu/目錄中看到cpu1/online的數值爲1開啓狀態,咱們能夠將cpu1/online的設置爲0關閉禁用
(3.1.5)接着咱們在vms002主機上安裝一個cpuload軟件,並將cpuload可執行文件複製獨立的兩個文件cpuload1和cpuload2。同時建立cpuload1.service和cpuload2.service兩個定製服務文件,並將配置文件拷貝到/usr/lib/systemd/system/目錄下。自定義服務,定製服務
(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
(3.1.7)接着咱們使用命令行的方式對cpuload1進行資源限制,此時在/etc/systemd/system/目錄下便產生了一個cpuload1.service.d的目錄。而後咱們使用修改配置文件的方式建立cpuload2.service.d,而且在cpuload2.service.d目錄下的90-CPUShares.conf配置文件中將CPUShares的值更改成1024
(3.1.8)而後咱們將服務重載一下,再將cpuload2的服務啓動起來,此時cpuload2服務就已經正常的運行了。
# systemctl daemon-reload
# systemctl restart cpuload2.service
# systemctl status cpuload2
# top -d 1
(3.1.9)此時咱們經過top命令發現cpuload1服務的CPU使用率基本是cpuload2服務CPU使用率的2倍,與咱們設置的指望值一致。咱們經過# systemd-cgtop命令一樣發現cpuload1服務也基本是cpuload2服務的CPU使用率的2倍
# top -d 1
# systemd-cgtop
(3.1.10)接着咱們對內存進行管理限制,咱們先安裝一個內存測試的工具memload,同時在/usr/lib/systemd/system目錄下建立一個定製服務的配置文件memtest.service消耗1024M的內存。自定義服務,自定義一個服務,定製服務
(3.1.11)咱們將memtest服務啓動起來,此時便會發現可用的內存先後大約少了1024M左右
(3.1.12)接着咱們使用修改配置文件的方式來對內存資源作限制操做,咱們進入到/etc/systemd/system/目錄中,建立一個目錄memtest.service.d,接着在memtest.service.d目錄中建立一個配置文件90-MemoryLimit.conf用來限制內存最大使用512M。
(3.1.13)服務中是設置了消耗1024M的內存,但實際上通過了cgroup的資源限制後,咱們發現系統只是消耗了512M的內存了
(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掉。
(3.1.15)咱們在/etc/systemd/system/httpd.service.d目錄下,建立一個資源限制的文件90-CPUAffinity.conf,在配置文件中使用cgroup設置CPU資源的親和性爲0號CPU
(3.1.16)接着咱們將服務所有從新加載一下,再將httpd服務從新啓動一下。此時發現httpd的進程通過了資源限制後,已經所有在0號CPU運行了。服務器
(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`
(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`
(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
(3.2.4)接着咱們來調整KVM環境裏兩臺虛擬機的CPU消耗的屬性,咱們先將兩臺虛擬機關機,而後再分別編輯rhel7-1和rhel7-2,經過命令# virsh edit rhel7-1對rhel7-1虛擬機進行設置,cputune表示調優,咱們設置CPUShares的值爲2048,設置rhel7-2虛擬機的CPUShares的值爲1024
(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倍網絡
(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 訪問到光盤鏡像的內容的。
(3.3.2)咱們能夠經過修改配置文件的方式對KVM環境中的虛擬機的網絡資源進行限制。在rhel7-1(192.168.122.65)虛擬機上設置進流量和出流量最大都是128k,而rhel7-2(192.168.122.115)虛擬機不做任何的網絡流量限制。
# virsh edit rhel7-1
(3.3.3)而後咱們在vms002主機上建立一個200M的文件,並經過scp的方式拷貝到兩臺虛擬機,以便比較其傳輸速度的快慢。測試發現200M的文件拷貝到rhel7-2主機用了7秒,而將200M的文件拷貝到rhel7-1主機上至少用了7分鐘,從而說明了咱們的網絡資源限制的配置生效了。ide
(3.4)P2V
(3.4.1)注意:若是出現瞭如下報錯「狀態 :睡眠中,進程ID:3475」,能夠經過執行以下的命令處理。
# rm -rf /var/run/yum.pid
(3.4.2)物理到虛擬,即Physical to virtual,簡稱P2V。它是指將操做系統、應用程序或者數據從計算機的物理硬盤中遷移到一個虛擬化環境中或是磁盤分區中。P2V能夠手工建立或定義一個虛擬環境,並在此環境中安裝操做系統、應用程序或者數據,這可能會是一個冗長或不肯定的過程,尤爲是在一個包含大量舊的硬件條件的新環境中。爲了簡化操做,會有一些支持所有或者部分虛擬化的自動軟件工具,也就是咱們所熟識的遷移工具。一般P2V就是建立虛擬的應用服務器環境,如在IBM服務器上搭建虛擬環境從而運行Windows系統。
(3.4.3)如今咱們準備完成的P2V遷移的拓撲圖以下所示,物理機被遷移的系統使用的是rhel7.1的版本,同時物理機須要使用virt-p2v-0.9.1-2.1.el6.centos.noarch鏡像盤來引導,虛擬化環境的宿主機使用的是rhel6.6的系統,且在咱們的虛擬化環境中須要安裝virt-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系統在被遷移時的引導盤。
(3.4.5)接着咱們設置TestRhel7物理機在開機時,使用virt-p2v-0.9.1-2.20130730.1.el6.centos.iso這個引導盤進入系統。
(3.4.6)接着咱們設置KVMhost主機,將rhel6.6的光盤鏡像掛載到/mnt目錄下,而且設置好aa.repo的YUM源。並在KVMhost主機的系統中將虛擬化的環境安裝一下,同時將KVMhost主機的CPU虛擬化功能打開。
(3.4.7)因爲須要打開圖形化功能,因此咱們須要保證KVMhost主機上的xorg-x11-xauth.x86_64這個軟件包安裝起來。配置完成後將系統重啓一下便可。
(3.4.8)接着咱們還要在KVMhost主機上安裝virt-v2v軟件,並在/etc/fstab文件中進行光盤自動掛載的配置(/dev/cdrom光盤鏡像掛載到/mnt目錄下)
/dev/cdrom /mnt iso9660 defaults,ro,loop 0 0
(3.4.9)接着咱們在KVMhost主機上的/etc/virt-v2v.conf配置文件中進行配置,咱們設置默認的存儲storage生效,並設置默認的網絡network生效,並將virt-manager打開
(3.4.10)接着咱們將TestRhel7主機啓動並使用光盤鏡像引導,進入到了virt-p2v的界面,選擇鏈接網絡,而後輸入KVMhost主機的IP地址和密碼
(3.4.11)此時做爲物理機的TestRhel7此時便已經遷移到了咱們KVMhost主機的虛擬機上了,設置好網卡、硬盤、顯示的相關協議後,由物理機遷移過來的虛擬機即可以正常的啓動了。工具
(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系統安裝半虛擬化驅動
(3.5.2)其中vmdk文件是TestRhel7虛擬機的硬盤文件,vmx文件是TestRhel7虛擬機的配置文件,咱們將這兩個文件拷貝到KVMhost宿主機中
(3.5.3)首先咱們要將vmware的硬盤文件轉換成KVM所能讀取的硬盤格式。
# qemu-img convert -O qcow2 -f vmdk TestRhel7.vmdk TestRhel7.qcow2
(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
(3.5.5)修改一下名稱爲v_TestRhel7,將模擬器的值修改成/usr/libexec/qemu-kvm,同時存儲須要設置磁盤的格式爲vda,且硬盤的位置爲/var/lib/libvirt/images/TestRhel7.qcow2
(3.5.6)接着將TestRhel7.xml配置文件拷貝到/etc/libvirt/qemu的目錄中,將TestRhel7.qcow2的硬盤文件拷貝到存儲池中,而後建立遷移到KVMhost宿主機中的虛擬機v_TestRhel7
# virsh define TestRhel7.xml---此處指的是文件名稱
# virsh start v_TestRhel7---此處指的是虛擬機的名稱
(3.5.7)而後將v_TestRhel7虛擬機的硬盤格式更改成qcow2格式,而後啓動虛擬機,此時虛擬機即可以正常的啓動了。oop
—————— 本文至此結束,感謝閱讀 ——————測試