一:虛擬化之KVM(上)

一:虛擬化之KVM(上)

閱讀(750)

一:傳統的物理機部署方案、虛擬化與雲計算定義:

服務器選型及採購—IDC選擇及上架-系統選擇及安裝–應用規劃及部署–域名選擇及註冊–DNS映射–外網訪問:

工信部備案-公安部備案–ICP備案(電子商務網站–>ICP證經營性ICP備案),遊戲公司文化部(文網文)備案等,在備案沒有成功之前網站是不能上線訪問的,論壇BBS有BBS公告備案是備案的前置審批,沒有的話備案不成功,還要在公安局系統備案,另外域名接入到一個地方比如機房還要做接入備案,備案在個人名下的備案不能直接轉公司,個人註銷後網站屬於未備案狀態隨時可能會被封,域名備案一般可以找代理,因爲過程比較複雜:

傳統數據中心面臨的問題:

服務器資源利用率低下,CPU、內存等不能共享

資源分配不合理

初始化成本高

自動化能力差

集羣環境需要大量的服務器主機

1.1:雲計算的定義

雲計算是一種交付模式

雲計算必須通過網絡使用

支持彈性橫向擴展、按需付費和快速擴展

無需關心基礎設置,服務器硬件、存儲、機房安全、硬件監控、底層數據安全等無需考慮

1.2:雲計算的概念與分類:

雲計算是概念最早是由Google 前首席執行官埃裏克施密特(Eric Schmidt)在2006 年8 月9 日的搜索引擎大會上首次提出的一種構想,而“雲計算”就是這種構想的代名詞,雲計算以虛擬化爲基礎,以網絡爲中心,爲用戶提供安全、快速、便捷的數據存儲和網絡計算服務,包括所需要的硬件、平臺、軟件及服務等資源,而提供資源的網絡就被稱爲“雲”。

公有云:向aws、阿里雲以及azure都屬於公有云,每個人都可以付費使用,不需要自己關心底層硬件,但是數據安全需要考利。

私有云:在自己公司內部或IDC自建openstack等環境

混合雲:臨時需求使用公有云,但是主要業務放在自己的私有云,即自己的私有云的部分業務和公有云有交接,這部分稱爲混合雲

1.3:雲計算的分層:

1.4:虛擬化的分類:

服務器虛擬化-虛擬服務器

桌面虛擬化-瘦客戶機連接win7 實現普通辦公

存儲虛擬化-SAN(基於磁盤)/NAS(NFS/Samba)/GlusterFS

應用虛擬化-將辦公軟件虛擬化,最典型的就是office

網絡虛擬化-SDN

1.5:KVM

kmv是一種技術,雲計算是一種模式,虛擬化是利用相應的技術方法在一臺物理機器上將其按照不同的需求劃分成多個相同或者不同的虛擬操作系統,並且各個虛擬系統可以同時運行,互不干擾,其中任何一個虛擬系統的損壞都不影響同一物理服務器上的其他虛擬系統。

1.6:虛擬化的前生與今世:

1964年,IBM推出了專爲 System/360 Mainframe 量身訂造的操作系統 CP-40,首次實現了虛擬內存和虛擬機。1967 年,第一個管理程序(hypervisor)誕生,5年之後,IBM 發佈用於創建靈活大型主機的虛擬機(VM)技術,該技術可根據動態的需求快速而有效地使用各種資源。從此,虛擬化這一詞彙正式被引入了IT的現實世界。20世紀 90 年代 Windows 的廣泛使用以及 Linux 作爲服務器系統的出現奠定了 x86 服務器的行業標準地位。1998年VMware公司在美國成立,  1999年VMware發佈了它的第一款產品VMware Workstation、 2001年發佈VMware GSX Server和VMware ESX Server宣佈進入服務器虛擬化市場, 2003年VMware推出了VMware Virtual Center, 2004年推出了64位支持版本,同年被EMC收購,2013年收入52.1億美元。 2007年8月21日,思傑宣佈5億美元收購XenSource公司,並推出服務器虛擬化XenServer、桌面虛擬化XenDesktop和應用虛擬化XenApp,2013年收入29億美元。2008年3月13日微軟在北京發佈Windows Server 2008,內置虛擬化技術hyper-v。2008年9月,紅帽以1.07億美元的價格收購KVM的母公司Qumranet,並推出企業級虛擬化解決方案RHEV,目前最新版本3.3,2013年收入超過13億美元

1.7:目前全球主要的虛擬化廠商

1.8:各廠商對比:

1、Vmware是目前市場上服務器虛擬化佔有率最高的廠商,原因是其起步早、並且優先於其他廠商推出X86虛擬化產品、產品功能相對完善從而有限佔據市場,但是其代碼不公開,並且嚴重依賴Windows服務器系統,也就是廠商綁定,一旦用了Vmware就得購買微軟的系統,購買了微軟的系統就處處受微軟的限制,另外Vmware的授權費用較高(每顆CPU授權78000元,兩顆起售)。2、微軟針對WindowsServer2008標準版、企業版與數據中心版,各推出內建Hyper-V的虛擬化環境,需要購買Win Server 2008、Hyper-Vmanager與CPU授權等,其總體花費較高,而且穩定性不高,目前使用市場較小。3、思傑看到Vmwae在虛擬化領域的成果之後在2007年收購XenSource公司(Xen虛擬化),隨後推出針對服務器虛擬化的XenServer、桌面虛擬化XenDesktop以及針對應用虛擬化的XenApp,但是思傑的虛擬化方案成本比較高,配置和管理非常複雜,Xen Desktop也嚴重依賴微軟的WinServer系統,也就是要先購買微軟的服務器授權,然後在WinServer上安裝Xendesktop,因此產生了較高的費用而且穩定性也不是很好。4、 紅帽的虛擬化基於KVM,而KVM(kernel-based Virtual Machne )是紅帽在2008年收購而來,其代碼完全開源,工作原理是將模塊kvm.ko加載到kernel裏運行,從而獲得最高效的虛擬能力,紅帽成立於1995年是全球最大的Linux開源技術廠家, KVM 是基於虛擬化擴展(Intel  VT 或AMD-V)的X86 硬件,是Linux 完全原生的全虛擬化解決方案,主要是通過準虛擬網絡驅動程序的形式用於 Linux 和 Windows 客戶機系統的,KVM支持廣泛的客戶機操作系統,比如 Linux、BSD、Solaris、Windows XP、windows 7、windows 8、ubuntu等大多數操作系統,目前KVM已經是各大linux發行版本所支持的虛擬化產品。

二:虛擬化技術之KVM:

Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM目前已成爲學術界的主流VMM之一。
KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的完全虛擬化。而Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的完全虛擬化。但Xen本身有自己的進程調度器,存儲管理模塊等,所以代碼較爲龐大。廣爲流傳的商業系統虛擬化軟件VMware ESX系列是基於軟件模擬的Full-Virtualization。

IBM,文檔:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/

lxd容器虛擬化: https://linuxcontainers.org/lxd/introduction/

qume是軟件虛擬化,即使用軟件完全模擬出一個具備CPU/內存/和硬盤的等設備的服務器,KVM是全虛擬化,Xen是半虛擬化,KVM在部分設備也支持半虛擬化

2.1:環境準備:

2:2.1:確認CPU已經支持虛擬化,intel的CPU虛擬化技術交vmx,AMD的CPU交svm:

[root@localhost ~]# grep -E   "vmx|svm" /proc/cpuinfoflags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust smep

2.2.2:安裝kvm平臺及工具包:

[root@localhost ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install

2.2.3:啓動libvirtsd並設置爲開機啓動,librirtd會創建一個橋接的網卡virbr0而且IP地址是192168.122.1:

[root@localhost ~]# systemctl  start libvirtd[root@localhost ~]# systemctl  enable  libvirtd[root@localhost ~]# ifconfig  virbr0virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:cb:ca:b0  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.2.4:爲虛擬機分配IP地址的服務:

[root@localhost ~]# ps -aux | grep dnsnobody     2877  0.0  0.0  15552   888 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       2878  0.0  0.0  15524   180 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       4546  0.0  0.0 112664   980 pts/0    S+   13:29   0:00 grep --color=auto dns

2.2.5:創建磁盤:

[root@llocalhost ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G #創建一個格式爲raw大小爲10G的裸磁盤Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=10737418240

2.2.6:開始安裝:

[root@linux-node1 ~]# virt-install  --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.raw  --network network=default --graphics  vnc,listen=0.0.0.0 --noautoconsole開始安裝......創建域......                                                                                                                       |    0 B  00:00:01     域安裝仍在進行。您可以重新連接到控制檯以便完成安裝進程。#virsh-install命令幫助:[root@linux-node1 ~]# virt-install  --helpusage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]使用指定安裝介質新建虛擬機。optional arguments:  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         使用 libvirt URI 連接到 hypervisor

通用選項:
  -n NAME, --name NAME  客戶端事件名稱
  --memory MEMORY       配置虛擬機內存分配。例如:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
  --vcpus VCPUS         爲虛擬機配置的 vcpus 數。例如:
                        --vcpus 5
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2,
  --cpu CPU             CPU 型號及功能。例如:
                        --cpu coreduo,+x2apic
                        --cpu host
  --metadata METADATA   配置虛擬機元數據。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安裝方法選項:
  --cdrom CDROM         光驅安裝介質
  -l LOCATION, --location LOCATION
                        安裝源(例如:nfs:host:/path、http://host/path
                        ftp://host/path)
  --pxe                 使用 PXE 協議從網絡引導
  --import              在磁盤映像中構建虛擬機
  --livecd              將光驅介質視爲 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        附加到使用 --location 引導的內核的參數
  --initrd-inject INITRD_INJECT
                        使用 --location 爲 initrd 的 root
                        添加給定文件
  --os-variant DISTRO_VARIANT
                        在其中安裝 OS 變體的虛擬機,比如
                        'fedora18'、'rhel6'、'winxp' 等等。
  --boot BOOT           配置虛擬機引導設置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (for containers)
  --idmap IDMAP         爲 LXC 容器啓用用戶名稱空間。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

設備選項:
  --disk DISK           使用不同選項指定存儲。例如:
                        --disk size=10 (new 10GiB p_w_picpath in default location)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置虛擬機網絡接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置虛擬機顯示設置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置虛擬機控制程序設備。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置虛擬機輸入設備。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置虛擬機串口設備
  --parallel PARALLEL   配置虛擬機並口設備
  --channel CHANNEL     配置虛擬機溝通頻道
  --console CONSOLE     配置虛擬機與主機之間的文本控制檯連接
  --hostdev HOSTDEV     將物理 USB/PCI/etc
                        主機設備配置爲與虛擬機共享
  --filesystem FILESYSTEM
                        將主機目錄傳遞給虛擬機。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置虛擬機聲音設備模擬
  --watchdog WATCHDOG   配置虛擬機 watchdog 設備
  --video VIDEO         配置虛擬機視頻硬件。
  --smartcard SMARTCARD
                        配置虛擬機智能卡設備。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置虛擬機重定向設備。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置虛擬機 memballoon 設備。例如:
                        --memballoon model=virtio
  --tpm TPM             配置虛擬機 TPM 設備。例如:
                        --tpm /dev/tpm
  --rng RNG             配置虛擬機 RNG 設備。例如:
                        --rng /dev/random
  --panic PANIC         配置虛擬機 panic 設備。例如:
                        --panic default

虛擬機配置選項:
  --security SECURITY   設定域安全驅動器配置。
  --numatune NUMATUNE   爲域進程調整 NUMA 策略。
  --memtune MEMTUNE     爲域進程調整內粗策略。
  --blkiotune BLKIOTUNE
                        爲域進程調整 blkio 策略。
  --memorybacking MEMORYBACKING
                        爲域進程設置內存後備策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   設置域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         設置域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 電源管理功能
  --events EVENTS       配置 VM 生命週期管理策略
  --resource RESOURCE   配置 VM 資源分區(cgroups)

虛擬化平臺選項:
  -v, --hvm             客戶端應該是一個全虛擬客戶端
  -p, --paravirt        這個客戶端一個是一個半虛擬客戶端
  --container           這臺虛擬機需要一個容器客戶端
  --virt-type HV_TYPE   要使用的管理程序名稱(kvm、qemu、xen
                        等等)
  --arch ARCH           模擬的 CPU 構架
  --machine MACHINE     要模擬的機器類型

其它選項:
  --autostart           引導主機時自動啓動域。
  --wait WAIT           等待安裝完成的分鐘數。
  --noautoconsole       不要自動嘗試連接到客戶端控制檯
  --noreboot            完成安裝後不要引導虛擬機。
  --print-xml [XMLONLY]
                        輸出所生成域 XML,而不是創建虛擬機。
  --dry-run             完成安裝步驟,但不要創建設備或者定義
                        虛擬機。
  --check CHECK         啓用或禁用驗證檢查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           禁止無錯誤輸出
  -d, --debug           輸入故障排除信息

使用 '--option=?' 或者 '--option help' 查看可用子選項
有關示例及完整選項語法,請查看 man page。

2.2.7:通過vnc客戶端連接到安裝界面,kvm虛擬機的默認端口從5900開始

2.2.8:選擇安裝centos安裝界面:

2.2.9:開始正常安裝旅程,以下爲給內核傳遞net.ifnames=0以及biosdevname=0使網卡的命名爲eth*,否則爲em*

2.2.10:安裝過程中。。。。。。:

2.2.11:安裝完成:


2.3:查看正在運行的虛擬機:

[root@linux-node1 ~]# virsh  -help #獲取命令幫助[root@linux-node1 ~]# virsh  list --all #當前正在運行的所有虛擬機
 Id    名稱                         狀態----------------------------------------------------
 2     CentOS-7-x86_64                running -     CentOS-x86_64                  關閉
 -     CentOS_x86_64                  關閉[root@linux-node1 ~]# virsh  list --help #命令幫助
  OPTIONS    --inactive       列出不活躍的域
    --all            不活躍和活躍的域列表
    --transient      列出臨時域
    --persistent     列出持久域
    --with-snapshot  列出現有快照的域
    --without-snapshot  列出沒有快照的域
    --state-running  運行狀態的域列表
    --state-paused   列出暫停狀態的域
    --state-shutoff  列出關閉狀態的域
    --state-other    列出其他狀態的域
    --autostart      列出啓用 autostart 的域
    --no-autostart   列出禁用 autostart 的域
    --with-managed-save  列出有管理的保存狀態的域
    --without-managed-save  列出沒有管理的保存狀態的域
    --uuid           只列出 uuid    --name           只列出域名
    --table          列出表格(默認)
    --managed-save   標記有管理的保存狀態的域
    --title          show domain title[root@linux-node1 ~]# virsh  list  --inactive  #列出關閉的虛擬機
 Id    名稱                         狀態----------------------------------------------------
 -     CentOS-x86_64                  關閉
 -     CentOS_x86_64                  關閉

三:虛擬機管理工具libvirt:

是一個免費開源的主流的虛擬化管理工具,有兩個組成進程,一個後臺主進程,另外提供API,openstack就是通過libvirt的API管理虛擬機,virt-install就是通過libvirt完成的,服務名稱叫做libvirtd,即使此服務down了虛擬機不受影響,但是無法管理,openstack掛了虛擬機不受影響

3.1:配置文件路徑:

[root@linux-node1 ~]# cd /etc/libvirt/qemu/

[root@linux-node1 qemu]# ls  #保存了虛擬機的配置xml配置文件,不能使用vim直接更改虛擬機配置文件,需要使用virsh edit xxx編輯
CentOS-7-x86_64.xml  CentOS_x86_64.xml  CentOS-x86_64.xml  networks

3.2:一個完整的虛擬機配置文件:

[root@linux-node1 qemu]# cat CentOS-7-x86_64.xml<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit CentOS-7-x86_64
or other application using the libvirt API.
--><domain type='kvm'>  #虛擬化類型kvm  <name>CentOS-7-x86_64</name> #虛擬機名稱  <uuid>2d92275e-4dab-4f10-adea-c874ea49c9a6</uuid> #唯一標示UUID  <memory unit='KiB'>1048576</memory> #內存  <currentMemory unit='KiB'>1048576</currentMemory>  #當前內存  <vcpu placement='static'>1</vcpu> #1個cpu並且是靜態分配  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> #hvm標示是硬件虛擬化    <boot dev='hd'/> #從硬盤啓動  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>IvyBridge</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'> #磁盤信息      <driver name='qemu' type='raw'/>
      <source file='/opt/CentOS-7-x86_64.raw'/>
      <target dev='vda' bus='virtio'/> #虛擬磁盤,半虛擬化      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'> 
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'> #usb信息      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <interface type='network'> #網絡信息      <mac address='52:54:00:60:84:d0'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-CentOS-7-x86_64/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/> #鼠標和鍵盤    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'> #vnc接口,從5900開始,可以自定義      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices></domain>


3.3:dumpxml命令,導出虛擬機的xml文件:

3.3.1:命令幫助:

[root@linux-node1 qemu]# virsh  dumpxml  --help
  NAME
    dumpxml - XML 中的域信息
  SYNOPSIS
    dumpxml <domain> [--inactive] [--security-info] [--update-cpu] [--migratable]
  DESCRIPTION
    把域信息作爲一個 XML 輸出到 stdout。
  OPTIONS
    [--domain] <string>  域名,id 或 uuid
    --inactive       顯示不活躍定義的 XML
    --security-info  包括 XML 轉儲中與安全性相關的信息
    --update-cpu     根據主機 CPU 更新虛擬機 CPU
    --migratable     爲遷移提供 XML 可用性

3.3.2:導出虛擬機xml配置文件,xml是虛擬機的靜態描述文件,如果虛擬機磁盤未被刪除則可以恢復,如果虛擬機磁盤被刪除則即使有描述文件也難以恢復:

[root@linux-node1 qemu]# virsh dumpxml CentOS-7-x86_64 > Centos-7-x86_64.bak.xm

3.4:undefine:徹底摧毀一個虛擬機

3.4.1:命令幫助信息

[root@linux-node1 ~]# virsh  undefine --help
  NAME
    undefine - 取消定義一個域

  SYNOPSIS
    undefine <domain> [--managed-save] [--storage <string>] [--remove-all-storage] [--wipe-storage] [--snapshots-metadata] [--nvram]

  DESCRIPTION    取消定義一個域或者將持久轉換爲臨時。

  OPTIONS    [--domain] <string>  域名或 uuid    --managed-save   刪除域管理的狀態文件
    --storage <string>  刪除關聯的存儲卷(用逗號分開的目標或者源路徑列表)(查看 domblklist)
    --remove-all-storage  刪除關聯的存儲卷(小心使用)
    --wipe-storage   擦除刪除卷中的數據
    --snapshots-metadata  如果不活躍則刪除所有域快照元數據
    --nvram          remove nvram file, if inactive

3.4.2:刪除一個虛擬機:

3.4.2:一個完整的備份刪除和恢復的過程:

[root@linux-node1 ~]# virsh  list --all #當前所有的虛擬機有兩個
 Id    名稱                         狀態----------------------------------------------------
 2     CentOS-7-x86_64                running -     CentOS-x86_64                  關閉[root@linux-node1 ~]# virsh  dumpxml  CentOS-x86_64  > CentOS-x86_64.xml.bak #備份[root@linux-node1 ~]# virsh  undefine CentOS-x86_64 #摧毀一個虛擬機域 CentOS-x86_64 已經被取消定義
 [root@linux-node1 ~]# virsh  list --all #當前所有的虛擬機還有一個了
 Id    名稱                         狀態----------------------------------------------------
 2     CentOS-7-x86_64                running[root@linux-node1 ~]# virsh  define   /root/CentOS-x86_64.xml.bak #從備份的xml文件中恢復虛擬機定義域 CentOS-x86_64(從 /root/CentOS-x86_64.xml.bak)
 [root@linux-node1 ~]# virsh  list --all #當前有倆虛擬機了,歐耶!
 Id    名稱                         狀態----------------------------------------------------
 2     CentOS-7-x86_64                running -     CentOS-x86_64                  關閉

四:CPU管理:

4.1:命令幫助,在安裝的時候指定CPU的特性:


[root@linux-node1 ~]# virt-install  --help | grep cpu
  --vcpus VCPUS         爲虛擬機配置的 vcpus 數。例如:
                        --vcpus 5 #指定CPU的數量
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8 #默認是5最大是10,set爲設值的某一個物理CPU核心上,相當於Nginx的CPU綁定
                        --vcpus sockets=2,cores=4,threads=2,
  --cpu CPU             CPU 型號及功能。例如:
                        --cpu coreduo,+x2apic                        --cpu host

4.2:修改已經存在虛擬機的CPU:

4.2.1:修改宿主機的CPU數量並重啓宿主機;

4.2.2:修改虛擬機的xml描述文件:

[root@linux-node1 ~]# virsh  edit CentOS-7-x86_64  #必須通過vim編輯配置文件

4.2.3:修改CPU配置如下:

4.2.4:重啓虛擬機驗證CPU數量:


4.2.5:動態修改CPU數量:

[root@linux-node1 ~]# virsh setvcpus   CentOS-7-x86_64 2 –live  #需要宿主機有足夠的CPU支撐,即修改的數量不能大於宿主機的CPU數量:


# [root@linux-node1 ~]# cat /sys/devices/system/cpu/cpu3/online  #查看新添加的CPU是否在線,即是否處於工作狀態
1
4.2.6:減小內存,如果創建虛擬機的時候內存是固定的,那麼只能減少內存而不能動態添加內存:

[root@linux-node1 ~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon #查看當前內存balloon: actual=1024[root@linux-node1 ~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd  balloon 2048 #嘗試增加內存[root@linux-node1 ~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon #增加之後還是之前的大小balloon: actual=1024[root@linux-node1 ~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd  balloon 512 #嘗試減少內存[root@linux-node1 ~]#  virsh qemu-monitor-command  CentOS-7-x86_64  --hmp  --cmd info balloon #減少之後的大小balloon: actual=512

4.2.7:增加和減小內存之後的效果:


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