libvirt
支持的虛擬化KVM XEN Qemu LXC OpenVZ
安裝
yum install libvirt libvirt-client libvirt-manager (python-virtinst or virt-install)
yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm
systemctl restart libvirtd.service
/etc/libvirt/qemu/networks/default.xml #被鏈接到啟動(dòng)目錄的腳本
/etc/libvirt/qemu/networks/autostart/ #libvirtd服務(wù)啟動(dòng)時(shí)運(yùn)行的腳本
virt-install
一般選項(xiàng)
-n NAME --name=NAME #指定虛擬機(jī)名稱(chēng)
-r MEMORY --ram=MEMORY #指定虛機(jī)內(nèi)存大小MB
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=][,cores=][,threads=]
最大cpu個(gè)數(shù)卷玉,套接字?jǐn)?shù)哨颂,核心數(shù),線程數(shù)
--cpu=CPU #cpu模式及特性
安裝方法
-c --cdrom=CDROM #指定安裝介質(zhì)為光盤(pán)
-l --location=URL #支持FTP相种,http威恼,nfs
--pxe #網(wǎng)絡(luò)裝機(jī)
--livecd #不依賴(lài)磁盤(pán)的操作系統(tǒng)
--os-type= #操作系統(tǒng)類(lèi)型
--os-variant= #操作系統(tǒng)版本
--boot=BOOTS #指定引導(dǎo)次序
存儲(chǔ)配置
--disk=DISKOPTIS #指定存儲(chǔ)設(shè)備及其屬性
device 設(shè)備類(lèi)型 cdrom、disk寝并、floppy 默認(rèn)disk
bus 磁盤(pán)總線類(lèi)型 ide scsi usb virtio
perms 訪問(wèn)權(quán)限 rw ro sh 默認(rèn)rw
size 新建磁盤(pán)大小GB
cache 緩存模型
format 磁盤(pán)映像格式 raw qcow2 vmdk
sparse 使用稀疏格式
--nodisks #不使用本地磁盤(pán)在livecd模式中使用
網(wǎng)絡(luò)配置
-w NETWORK --network=NETWORK,opt1=xx #網(wǎng)絡(luò)接口及其屬性
bridge=BRIDGE #指定連接到那個(gè)橋接設(shè)備
network=NAME #連接至指定網(wǎng)絡(luò)
model #網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng) virtio箫措、e1000
mac #52:54:00 手動(dòng)指定mac 否則自動(dòng)生成
--nonetworks #不使用網(wǎng)絡(luò)功能
圖形配置
--graphics TYPE,opt=xx #指定虛機(jī)啟動(dòng)后訪問(wèn)接口及其屬性
TYPE #vnc、sdl
port #監(jiān)聽(tīng)的端口
listen #監(jiān)聽(tīng)在那個(gè)ip 默認(rèn)127.0.0.1
可以修改/etc/libvirt/qemu.conf調(diào)整默認(rèn)值
設(shè)備選項(xiàng)
虛擬化選項(xiàng)
-v --hvm #指定完全虛擬化
-p #指定使用半虛擬化
--virt-type #指定是使用hypervisor 查看可以使用的# virsh capabilities
其他
--autostart #是否隨物理機(jī)啟動(dòng)啟動(dòng)
--print-xml #創(chuàng)建不需要安裝過(guò)程的虛機(jī)衬潦,顯示生成的xml文件
--force #禁止命令進(jìn)入交互模式
--dry-run #
-d --debug #顯示debug信息
--import #使用現(xiàn)有磁盤(pán)印象構(gòu)建
/etc/libvirt/qemu #虛擬機(jī)xml配置文件
bridge配置
#!/bin/bash
#添加網(wǎng)橋到物理網(wǎng)絡(luò)
ip a | grep br0 && echo yes >> /dev/null || brctl addbr br0
ip addr del 192.168.150.15/24 dev em1
ip link set dev em1 master br0
ip addr add 192.168.150.15/24 dev br0
ip link set br0 up || ip link set br0 up
route add default gw 192.168.150.253 dev br0
創(chuàng)建虛擬機(jī)示例
virt-install --name cirros034-2 --vcpu 2 --ram 512 \
--disk=/var/image/cirros-0.3.4-x86_64-disk.img,bus=virtio,size=5,format=qcow2,sparse \
--vnc --vnclisten 0.0.0.0 \
--autostart --import \
--network bridge=br0
virt-install --name cirros --vcpu 2 --ram 2048 \
--network bridge=br0,model=virtio \
--disk=/var/image/cirros-0.3.4-x86_64-disk.img,format=qcow2,size=5,perms=rw,bus=virtio \
--disk=/var/image/cirros.img,size=10,format=qcow2,perms=rw,bus=virtio,sparse \
--vnc --vnclisten 0.0.0.0
--import --autostart --force
#cpu
virt-install --name centos1810 --vcpus=2,maxvcpus=6 --ram 4096 \
--network bridge=br0,model=virtio,mac=52:54:00:00:00:00 \
--disk=/var/image/centos_1810.img,format=qcow2,bus=virtio,size=10,sparse \
--cdrom /data/CentOS-7-x86_64-DVD-1810.iso \
--vnc --vnclisten 0.0.0.0 \
--autostart --force
基礎(chǔ)管理命令
virsh list --all #查看所有虛擬機(jī)
virsh shutdown cirros #關(guān)閉指定虛擬機(jī)
virsh destroy cirros #強(qiáng)制關(guān)閉
virsh start cirros #開(kāi)啟虛擬機(jī)
virsh undefine cirros #取消定義域 刪除虛擬機(jī)
--storage #刪除關(guān)聯(lián)的卷
--remove-all-storage #刪除所有存儲(chǔ)卷
--delete-snapshot #刪除所有卷的快照
--snapshots-metadata #刪除快照元數(shù)據(jù)
virsh autostart cirros #設(shè)置虛擬機(jī)跟隨物理機(jī)啟動(dòng)
virsh dominfo cirros #查看虛擬機(jī)基本信息
virsh vncdisplay cirros #查看虛擬機(jī)vnc端口
virsh edit cirros #編輯虛擬機(jī)xml配置
域的基本管理
# virsh help domain # 查看domain的命令liebiao
1斤蔓、附加磁盤(pán)設(shè)備
qemu-img create -f qcow2 -o size=20G,preallocation=metadata /var/image/centos_1810_20G.qcow2 #創(chuàng)建磁盤(pán)
qemu-img info /var/image/centos_1810.img
virsh attach-disk --help #附加磁盤(pán)命令
--persistent 永久生效
--config 下一次啟動(dòng)生效
--type 指定磁盤(pán)類(lèi)型
--driver 指定磁盤(pán)驅(qū)動(dòng)
--print-xml 顯示xml配置,命令不生效
virsh attach-disk --domain centos1810 --source /var/image/centos_1810_20G.qcow2 --target vdb --targetbus virtio #添加磁盤(pán)并指定總線類(lèi)型
virsh detach-disk --help #拆除磁盤(pán)命令
--persistent 永久生效
--config 下一次啟動(dòng)生效
virsh detach-disk centos1810 --target vdb
2镀岛、附加新的網(wǎng)絡(luò)
virsh attach-interface --help #附加網(wǎng)絡(luò)命令
--config
--model #接口模塊
--persistent
virsh attach-interface --domain centos-2004-database01 --type bridge --source br0 --model virtio --persistent
virsh detach-interface --help #分離網(wǎng)絡(luò)
--config
--persistent
--mac #指定卸載網(wǎng)卡的mac
virsh detach-interface --domain centos-2004-database01 --type bridge --mac 52\:54\:00\:14\:ac\:37 --persistent
3弦牡、運(yùn)行狀態(tài)相關(guān)
virsh cpu-stats cirros #域占用物理cpu的狀態(tài)
virsh dumpxml cirros #域xml信息
--migratable #提供一個(gè)適合遷移的xml
virsh reboot cirros #重啟一個(gè)域
virsh save cirros /var/image/cirros.save #保存一個(gè)正在運(yùn)行的域的ram狀態(tài)到指定文件
virsh restore /var/image/cirros.save #從文件保存的狀態(tài)中還原域
virsh suspend --domain cirros #掛起域,暫停在內(nèi)存中
virsh resume cirros #恢復(fù)域
virsh vcpucount cirros #域cpu數(shù)
virsh vcpuinfo cirros #域cpu基本信息
virsh vcpupin --help #控制域cpu親和性 綁定vcpu到cpu
virsh setvcpus --help #改變vcpu的數(shù)量,被最大CPU數(shù)限制
virsh setvcpu --help #連接或分離vcpu
virsh blkiotune cirros #獲取或設(shè)置virtio參數(shù)
virsh domiflist cirros #列出所有虛擬接口網(wǎng)卡
virsh dominfo cirros #域信息
virsh nodeinfo #節(jié)點(diǎn)信息
virsh sysinfo #hypervisor信息
virsh uri #訪問(wèn)接口
virsh version #版本信息
virsh iface-list --all #列出宿主機(jī)物理網(wǎng)絡(luò)接口
virsh iface-bridge --help #創(chuàng)建網(wǎng)橋設(shè)備并連接至物理網(wǎng)絡(luò)設(shè)備
virsh iface-unbridge --help #拆下接口漂羊,刪除橋
virsh nwfilter-list #filter網(wǎng)絡(luò)過(guò)濾
virsh net-list #用戶空間網(wǎng)絡(luò)
snapshot
virsh snapshot-create-as --domain cirros --name null --disk-only
--name
--disk-only #只對(duì)磁盤(pán)快照
virsh snapshot-list --domain cirros
virsh snapshot-revert --domain cirros --snapshotname null
--children #刪除快照和子集
--children-only #只刪除子集
--metadata #只刪除元數(shù)據(jù)
storage volume #指外部的網(wǎng)絡(luò)存儲(chǔ) 一般為ISCSI
virsh vol-list --help
virtio
kvm使用了硬件輔助虛擬化所以cpu的效率很高驾锰,不過(guò)在I/O方面是通過(guò)qemu純軟件的方式模擬io,每次虛擬機(jī)發(fā)起io請(qǐng)求時(shí)走越,kvm內(nèi)核模塊會(huì)攔截此次請(qǐng)求椭豫,處理請(qǐng)求后將其放入io共享頁(yè),后通知用戶空間的qemu進(jìn)程旨指。
qemu獲得io操作結(jié)果之后赏酥,模擬出本次的io操作再次將結(jié)果放回io共享頁(yè),同時(shí)通知kvm模塊谆构。
kvm模塊讀取qemu模擬的io操作返回給虛擬機(jī)
virtio是一個(gè)運(yùn)行在hypervisor上的一個(gè)api接口裸扶,讓虛機(jī)知道自己運(yùn)行在虛擬環(huán)境中,進(jìn)行io操作時(shí)通過(guò)virtio與hypervisor通信搬素,從而擁有更好的性能
磁盤(pán)快照
指定數(shù)據(jù)集合的一個(gè)完全可用拷貝姓言,改拷貝包括相應(yīng)數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)的映像瞬项≌崽#快照可以是所表示的數(shù)據(jù)的一個(gè)副本何荚,也可以是數(shù)據(jù)的復(fù)制品。
快照是指保存在存儲(chǔ)設(shè)備中的數(shù)據(jù)的引用標(biāo)記和指針猪杭。
在建立磁盤(pán)快照時(shí)餐塘,并不需要拷貝數(shù)據(jù)本身,只是通知文件系統(tǒng)將目前有數(shù)據(jù)的磁盤(pán)區(qū)塊全部保留起來(lái)皂吮,不被覆寫(xiě)戒傻。這個(gè)通知只需要很短的時(shí)間。
接下來(lái)的文件的修改或任何新增蜂筹、刪除動(dòng)作需纳,均不會(huì)覆寫(xiě)數(shù)據(jù)原來(lái)所在的磁盤(pán)區(qū)塊,而是將修改的部分寫(xiě)入其他可用磁盤(pán)區(qū)塊中艺挪。