Linux – Virsh

acd4643d-baeb-4135-924f-3c31ad1ba6ac

virsh命令
suspend
resume
dumpxml
 
KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录、通过远端磁盘阵列(iSCSINFS)分配过来磁盘或目录,当然也支持各类分布式文件系统。
存储池(Storage pools)是放置虚拟机的存储位置,可以是本地的,也可以是网络存储,具体的虚拟机实例放置在卷(Volume)上。
KVM创建的存储池可以理解为一种映射关系,即将某一块挂接至宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机的管理。
 
定义一个存储池
pool-define-as images-pool dir - - - - /cloud/images/pool
查看已定义的存储池
pool-list --all
建立基于文件夹的存储池
pool-build images-pool
启用存储池
pool-start images-pool
设置存储池自动运行
pool-autostart images-pool
查看存储池信息
pool-info images-pool
xml格式显示存储池信息
pool-dumpxml images-pool
 
通过XML创建一个存储池
先创建一个test-pool.xml
<pool type='dir'>
<name>test-pool</name>
<source>
</source>
<target>
<path>/cloud/imgs</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
 
pool-define test-pool.xml
pool-build test-pool
pool-start test-pool
pool-dumpxml test-pool
 
创建卷
vol-create-as images-pool billstudy-centos.img 8G --format qcow2
查看存储池里面的卷信息
vol-list images-pool
查看某个卷的信息
vol-info billstudy-centos.img images-pool
更详细卷的信息
vol-dumpxml billstudy-centos.img images-pool
 
 
关于KVM的快照,如果没有快照的话,虚拟机也就失去了很大的作用。
创建快照
snapshot-create-as --domain vm03 --name 2015-02-19 --description "mv03 snap"
查看快照
snapshot-list vm03
查看快照配置
snapshot-current vm03
回复快照位置
snapshot-revert vm03 2015-02-19
删除快照
snapshot-delete vm03 2015-02-19
获取帮助
 
#virt-install快速安装或启动虚拟机
virt-install \
--connect qemu:///system \
--virt-type kvm \
--name centos \
--ram 2048 \
--disk path=/var/lib/libvirt/images/centos.img,format=qcow2,size=8 \
--network bridge=br0 \
--graphics vnc,port=5901,listen=0.0.0.0 \
--cdrom /cloud/CentOS-6.6-x86_64-minimal.iso \
--autostart
 
#克隆虚拟机镜像
virt-clone -o centos-new -n centos6.6 -f /cloud/centos.template
 
#动态插入磁盘
attach-disk centos-new /cloud/abc.raw vdc
#卸载磁盘
detach-disk centos-new vdb


							

KVM 【SNAT/DNAT2种配置实现以及扁平化网络模式(flat)实现/virsh2种动态迁移实现】

-------------------------------------------------------------------------
###KVM SNAT配置过程
-------------------------------------------------------------------------
#增加一个br0网桥(不跟任何网卡绑定)
brctl addbr br0
#激活网桥
ifconfig br0 up
#给br0配置IP地址
ifconfig br0 10.0.0.1/24
 
#1.使用virsh创建两台虚拟机vm01和vm02,这两台虚拟机网卡都接到br0上
#2.ip地址分别为10.0.0.11、10.0.0.12(注意:两台虚拟机的mac不能相同)
#3.将这两台虚拟机的网关设置为10.0.0.1即br0的ip地址
 
#测试用vm1 ping 10.0.0.1可以ping通,用vm2 ping 10.0.0.1也可以ping通
#但是vm1 ping 不通vm2
#需要在宿主机中开启ipv4转发功能。编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward=1,然后执行sysctl -p使修改立即生效。
#开启后vm1和vm2即可ping通
 
#在nat表上添加SNAT转发功能即来自10.0.0.0/24的数据包且从eth0出去,将其源地址转换成192.168.50.150
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.50.150
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM DNAT配置过程,将宿主机的8022端口映射到客户机vm1的22端口
-------------------------------------------------------------------------
#重新启动iptables,恢复iptables配置
service iptables restart
#设置宿主机iptables允许tcp8022端口通过
iptables -I INPUT -p tcp --dport 8022 -j ACCEPT
#设置nat表的PREROUTING链,将访问192.168.50.150 tcp 8022端口的数据转发到10.0.0.11的22号端口
iptables -t nat -A PREROUTING -d 192.168.50.150 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 10.0.0.11:22
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM DNAT配置过程,将宿主机的一个单独ip(如192.168.50.150)映射到客户机
#ip为10.0.0.11的vm1虚拟机上,即IP一对一映射
-------------------------------------------------------------------------
#重新启动iptables,恢复iptables配置
service iptables restart
#设置nat表的PREROUTING链,将访问192.168.50.150的转发到10.0.0.11
iptables -t nat -A PREROUTING -d 192.168.50.150 -j DNAT --to-destination 10.0.0.11
#设置nat表的POSTROUTING链,将来自10.0.0.11的数据包的源地址转换成192.168.50.150
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.11 -j SNAT --to-source 192.168.50.150
#要实现SNAT功能,必须让filter表的FORWARD链允许转发
iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT
或者将filterFORWARD最后一条拒绝的链删除
iptables -D FORWARD 1
-------------------------------------------------------------------------
 
 
-------------------------------------------------------------------------
###KVM 扁平的网络模式(flat)配置过程,即将虚拟机分配一个内网ip一个外网ip
-------------------------------------------------------------------------
#在宿主机上配置两个网卡eth0和eth1,eth0作为外网eth1作为内网
#如果是使用的是vmware workstation虚拟出的宿主机,eth0选用NAT网络eth1选用host-only网络
#将eth0不设置IP,eth1设置ip为192.168.80.150
#创建两个网桥br0和br1,将br1与eth0连接到一起
#使用virsh的iface-bridge命令非常方便,创建br1的同时再与eth0连接
iface-bridge eth0 br1
#注意:上面的命令有可能失败,因为如果安装了图形桌面的CentOS,NetworkManager接管网络,
#需要将NetworkManager停掉,并重新启动network服务来接管网络服务
chkconfig NetworkManager off
service NetworkManager stop
service network restart
#使用virsh创建虚拟机,在其配置文件中有两个网卡,注意mac地址要唯一
<interface type="bridge">
<mac address='06:64:12:00:00:54'/>
<!--当前主机网桥的名称-->
<source bridge="br0" />
<model type='virtio'/>
</interface>
<interface type="bridge">
<mac address='06:64:12:00:00:55'/>
<!--当前主机网桥的名称-->
<source bridge="br1" />
<model type='virtio'/>
</interface>
#在客户机中设置eth0的ip为192.168.50.200/24,网关为192.168.50.2
#在客户机中设置eth1的ip为10.0.0.11/24,不设置网关
-------------------------------------------------------------------------
 
virsh
两种模式:交换模式、非交互模式
suspend
resume
dumpxml
 
KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录、通过远端磁盘阵列(iSCSINFS)分配过来磁盘或目录,当然也支持各类分布式文件系统。
存储池(Storage pools)是放置虚拟机的存储位置,可以是本地的,也可以是网络存储,具体的虚拟机实例放置在卷(Volume)上。
KVM创建的存储池可以理解为一种映射关系,即将某一块挂接至宿主机器上的存储空间形成可被KVM使用的逻辑存储池,以方便虚拟主机的管理。
 
定义一个存储池
pool-define-as images-pool dir - - - - /cloud/images/pool
查看已定义的存储池
pool-list --all
建立基于文件夹的存储池
pool-build images-pool
启用存储池
pool-start images-pool
设置存储池自动运行
pool-autostart images-pool
查看存储池信息
pool-info images-pool
xml格式显示存储池信息
pool-dumpxml images-pool
 
通过XML创建一个存储池
先创建一个test-pool.xml
<pool type='dir'>
<name>test-pool</name>
<source>
</source>
<target>
<path>/cloud/imgs</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
 
pool-define test-pool.xml
pool-build test-pool
pool-start test-pool
pool-dumpxml test-pool
 
创建卷
vol-create-as images-pool billstudy-centos.img 8G --format qcow2
查看存储池里面的卷信息
vol-list images-pool
查看某个卷的信息
vol-info billstudy-centos.img images-pool
更详细卷的信息
vol-dumpxml billstudy-centos.img images-pool
 
 
关于KVM的快照,如果没有快照的话,虚拟机也就失去了很大的作用。
创建快照
snapshot-create-as --domain vm03 --name 2015-02-19 --description "mv03 snap"
查看快照
snapshot-list vm03
查看快照配置
snapshot-current vm03
回复快照位置
snapshot-revert vm03 2015-02-19
删除快照
snapshot-delete vm03 2015-02-19
获取帮助
help snapshot
 
 
QEMU monitorQEMU与用户交互的一种控制台,一般用于为QEMU模拟器提供较为复杂的功能,
 
QEMU monitor的切换
"Ctrl + Alt + 2" --> QEMU monitor状态
"Ctrl + Alt + 1" --> 客户机标准显示窗口
 
 
查看帮助信息
help/? [cmd]
help savevm ? savevm
 
 
显示系统命令状态:info
 
查看QEMU的版本信息
info versions
查看当前QEMU是否有KVM的支持
info kvm
info name
info status
查看客户机各个vCPU的信息
info cpus
查看块设备信息,如硬盘、软盘、光驱等
info block
查看客户机的网络配置信息
info network
显示当前系统中已保存的客户机快照信息
info snapshots
查看当前客户机的迁移状态
info migrate
显示当前客户机的VNC状态
info vnc
查看QEMU monitor中命令执行的历史
info history
 
 
创建快照
savevm snap20150406
恢复快照
loadvm snap20150406
删除快照
delvm snap20150406
 
 
 
-------------------------------------------------------------------------
###虚拟机动态迁移
-------------------------------------------------------------------------
安装NFS并使用NFS网络存储
 
动态迁移:将客户机从源宿主机 -> 目的宿主机
注意:都要挂载NFS
1.在源宿主机上挂载NFS
2.在源宿主机上启动虚拟机
3.在目的宿主机上挂载NFS
4.在目的宿主机上启动虚拟机
5.关闭目的宿主机的防火墙或开启相应端口
/usr/libexec/qemu-kvm -m 4096 -smp 1 -incoming tcp:0:8888 /mnt/storage/centos.qcow2 -vnc :1 &
-incoming 这个参数使qemu-kvm进程进入到迁移监听模式
tcp:0:8888 这个参数表示在8888端口上建立一个TCP Socket连接用于接收来自源宿主机动态迁移的内容,"0"表示允许来自任何主机的连接
5.在源宿主机上切换到QEMU monitor,然后执行迁移命令
migrate tcp:192.168.50.160:8888
6.查看迁移结果
 
使用virsh进行热迁移
migrate centos-nfs --live qemu+ssh://192.168.50.160/system --unsafe
#出现错误1
error: internal error Attempt to migrate guest to the same host 564d46b4-6d6b-2a13-3f81-bb970716d517
sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
#出现错误2
error: Unable to resolve address 'kvm02.billstudy.com' service '49152': No address associated with hostname
vi /etc/hosts
192.168.50.150 kvm01.billstudy.com
192.168.50.160 kvm02.billstudy.com

Vmware qemu-kvm 虚拟化测试

[root@kvm1 cloud]# lsmod | grep kvm
kvm_intel 55496 3
kvm 337772 1 kvm_intel
[root@kvm1 cloud]# egrep "(vmx|svm)" --color /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
[root@kvm1 cloud]#

 

如果没有结果,则应该开启机器支持Inter VT-x/EPT or AMD-V/RVI

7888de1f-387f-4dfd-886d-2475b1d02b92

 

 


#查看Linux内核是否加载了kvm模块
lsmod | grep kvm
#安装qemu-kvm,安装完成后会生成/usr/libexec/qemu-kvm,是用户空间操作kvm内核的接口
yum install qemu-kvm
#通过网络上传ISO镜像文件
#生成一个8G的文件(文件内容全部是0),作为虚拟机的磁盘
dd if=/dev/zero of=/cloud/CentOS.img bs=1M count=8192
#使用qemu-kvm创建虚拟机(参数说明 -m 指定内存大小 -smp 指定cup数量 -boot启动顺序)
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -cdrom /iso/CentOS-6.6-x86_64-minimal.iso -vnc :1
参数说明:
-m 指定客户机内存大小,默认单位MB
-smp 指定客户机cpu个数。SMP:(symmetric[sɪ'metrɪk'] Multi-processing)对称多处理
-boot 指定客户机系统启动顺序,order=cd是指先光盘再硬盘。c:CD-ROM d:Hard Disk
-hda 指定客户机的IDE硬盘(即前面的创建的镜像文件)
-cdrom 指定客户机的光驱
-vnc 类似window下的远程桌面
:1 端口为 5900 + 1 = 5901
#安装vnc或使用vnc工具连接虚拟机,给虚拟机安装系统
#关闭虚拟机并再次启动虚拟机,指定vnc端口为5901(不需要指定cdrom,因为已经将操作系统安装到磁盘中了)
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/CentOS.img -vnc :1
#查看虚拟机信息
free -m
dmesg | grep Memory
查看cpu信息命令:
lscpu
cat /proc/cpuinfo
逻辑CPU个数
cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
每个物理CPU上core的个数(未计入超线程)
cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l
#修改配置内存和CPU参数
/usr/libexec/qemu-kvm -m 4096 -smp 2,cores=4 -boot order=cd -hda /cloud/CentOS.img -vnc :1
n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
set the number of CPUs to 'n' [default=1]
maxcpus= maximum number of total cpus, including offline CPUs for hotplug etc.(客户机最大可能被使用的CPU输了,包括启动时处于offline状态的cpu数量,可用于热插拔加入CPU,但是不能超过maxcpus这个上限)
cores=number of CPU cores on one socket.(就是我们平时说的核,每个物理CPU可以双核,四核等等)
threads=number of threads on one CPU core.(thread就是每个core的硬件线程数,即超线程)
sockets=number of discrete sockets in the system.(就是主板上插cpu的槽的数目,也就是可以插入的物理CPU的个数)
#qemu-img是一个比较重要的工具,是QEMU的磁盘管理工具。
#查看帮助信息
qemu-img -h
#查看镜像文件信息
qemu-img info /cloud/CentOS.img
#创建一个磁盘镜像文件
qemu-img create -f qcow2 /cloud/bill.img 10G
#将raw格式转换成qcow2格式
qemu-img convert -O qcow2 /cloud/bill.raw /cloud/bill.qcow2
#修改镜像大小
qemu-img resize /cloud/test.img +2G
#检查镜像
qemu-img check /cloud/bill.qcow2
#镜像格式
#qemu-img支持多种镜像格式,可通过qemu-img -h命令查看,常用的有qcow2,raw
#raw:原始的磁盘镜像格式,是qemu-img命令默认的文件格式,这种格式的文件的优势在于它非常简单且非常容易移植到其他模拟器上使用。特点一开始就让镜像实际占用了分配空间,但是写入速度稍快一下。
#qcow2:这种格式是QEMU目前推荐的镜像格式,它是功能最多的格式,它支持稀疏文件以节省存储空间,支持加密、压缩、快照等功能
QEMU monitor是QEMU与用户交互的一种控制台,一般用于为QEMU模拟器提供较为复杂的功能,
QEMU monitor的切换
"Ctrl + Alt + 2" --> QEMU monitor状态
"Ctrl + Alt + 1" --> 客户机标准显示窗口
查看帮助信息
help/? [cmd]
help savevm 或 ? savevm
显示系统命令状态:info
查看QEMU的版本信息
info versions
查看当前QEMU是否有KVM的支持
info kvm
info name
info status
查看客户机各个vCPU的信息
info cpus
查看块设备信息,如硬盘、软盘、光驱等
info block
查看客户机的网络配置信息
info network
显示当前系统中已保存的客户机快照信息
info snapshots
查看当前客户机的迁移状态
info migrate
显示当前客户机的VNC状态
info vnc
查看QEMU monitor中命令执行的历史
info history
创建快照
savevm snap20150406
恢复快照
loadvm snap20150406
删除快照
delvm snap20150406

Linux bridge-utils tunctl 使用

网络
brctlLinux下用来管理以太网桥,在内核中建立、维护、检查网桥配置的命令
STP Spanning Tree Protocol(生成树协议)逻辑上断开环路,防止二层网络的广播风暴的产生
dhcp模式启用 'eth0'
 
在计算机网络中,TUNTAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
 
#1.创建kvm桥接网络模式,要安装bridge-utils tunctl
yum install bridge-utils tunctl
 
添加一个br0网桥(桥接类型)
brctl addbr br0
ifconfig br0 up
 
#分步执行网络会断开
------------------------
br0eth0绑定在一起
brctl addif br0 eth0
br0设置为启用STP协议
brctl stp br0 on
eth0IP设置为0
ifconfig eth0 0
使用dhcpbr0分配IP
dhclient br0
-------------------------
 
#最佳方式(注意修改成自己的IP)
brctl addif br0 eth0 && brctl stp br0 on && ifconfig eth0 0.0.0.0 && ifconfig br0 192.168.52.201 netmask 255.255.255.0 && route add default gw 192.168.52.1
 
#创建TAP类型虚拟网卡设备
tunctl -b -t vnet0
ifconfig vnet0 up
brctl addif br0 vnet0
brctl show
 
#创建虚拟机并关联网卡
/usr/libexec/qemu-kvm -m 4096 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic -net tap,ifname=vnet0,script=no,downscript=no
#创建虚拟机并关联网卡并添加mac地址
/usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vnet0,script=no,downscript=no
 
#将磁盘设置成半虚拟化virtio
<disk type="file" device="disk">
<driver name="qemu" type="qcow2" />
<source file="/cloud/centos.img" />
<target dev='vda' bus='virtio'/>
</disk>
 
 
 
libvirt
libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python,JAVA等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。
Libvirt库是一种实现 Linux 虚拟化功能的 Linux API,它支持各种虚拟机监控程序,包括 Xen KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品
 
#安装libvirt
yum install libvirt
#启动libvirt
service libvirtd start
#启动后会多一个virbr0网桥,该网桥是NAT类型
 
virsh(非常好的虚拟化命令行管理工具,两种模式:交换模式和非交换模式)
定义虚拟机
virsh define /cloud/centos-base.xml
 
virsh 进行管理虚拟机
virsh# list --all # 显示所有虚拟机 --all显示全部
 
启动虚拟机
#virsh start centos
 
关闭虚拟机
#virsh shutdown centos
 
强制关机
#virsh destroy centos
 
移除虚拟机
#virsh undefine centos
 
显示vnc端口
#virsh vncdisplay centos
 
动态查询kvm使用资源
#top -d 1 | grep kvm
 
查询kvm进程
ps -aux | grep kvm
 
开机自动启动虚拟机
#virsh autostart centos
 
导出虚拟机centos的硬件配置信息为/cloud/centos.bak.xml
#virsh dumpxml centos > /cloud/centos.bak.xml
 
编辑虚拟机配置
#virsh edit centos