vlambda博客
学习文章列表

【技术】KVM 详解(二)步入云运维开门路

上一篇比较匆忙,补充两个点
补充1:KVM 虚拟化中几个需要提前了解的组件
1、vhost-net
      vhost-net 是linux内核的一个模块,用于替代QEMU中的virtio-net用户态的virtio网络的后端实现,在使用vhost-net时,支持网卡多队列,可提升网卡的性能。
2、openvswitch
      openvswitch是一个高质量的多层虚拟交换机,目的是让大规模网络自动化通过编程扩展,提供了对openflow协议的支持。用户可以使用任何支持openflow协议控制器对OVS(流行的SDN)进行远程管理控制,类似于VMware中的vnetwork中的Vswitch,支持多种虚拟化技术。
3、DPDK
       DPDK全称是 data plane devel-opment kit,用户空间高效率数据包处理,利用自身提供的数据平面库接收发数据包,绕过了linux系统内核。

     简单的可以说DPDK是一个用户态可以直接操作物理网卡的库函数,和vhost结合使用类似于snabb  switch性能差不多份用户态交换机。

   优点:性能高、用户态开发,故障恢复快
   注:论坛大师介绍,kvm架构中,使用该技术可以提升网络处理能力(特别是小包处理),推荐DPDK与qemu 中的vhost结合使用。
4、SPDK
       SPDK全称是storage performance development kit,大家发散下思维从词面上理解下意思🤗(下片文章介绍),与存储有关系。
补充2:气球🎈技术

       KVM的内存气球技术可以在虚拟机中按照需要调整的内存大小,提升内存的利用率。使用的时候,默认情况是需要安装virt balloon的驱动,内核开启CONFIG_VIRTIO_BALLOON,并且要安装virtballoon驱动。
      气球技术有两种类型:
        膨胀:虚拟机的内存被拿掉给宿主机
        压缩:宿主机的内存还给虚拟机
     气球技术最大优点是内存可以超用,缺点是可能造成内存不够用的而影响性能。(私有云场景使用较多,公有云场景很少使用)

流程:(流程部分网上借鉴)

     1.发送请求到宿主机承载的客户机操作系统,请求归还一定数量的内存给Hypervisor。

如客户机操作系统中的virtio_balloon驱动接收到Hypervisor的请求。

      2.virtio_balloon驱动使客户机的内存气球膨胀,气球中的内存就不能被客户机访问。如果此时客户机中内存剩余量不多(如某应用程序绑定/申请了大量的内存),并且不能让内存气球膨胀到足够大以满足Hypervisor的请求,那么virtio_balloon驱动也会尽可能多地提供内存使气球膨胀,尽量去满足Hypervisor所请求的内存数量(即使不一定能完全满足)。

客户机操作系统归还气球中的内存给Hypervisor。

      3.Hypervisor可以将从气球中得来的内存分配到任何需要的地方。

      4.即使从气球中得到的内存没有处于使用中,Hypervisor也可以将内存返还给客户机。这个过程为:Hypervisor发送请求到客户机的virtio_balloon驱动;这个请求使客户机操作系统压缩内存气球;在气球中的内存被释放出来,重新由客户机访问和使用。

【正文,实战加截图】

-------------------第一部分添加网络设备-----------------

    图形界面:Applications (左上角)------------》 System Tools -----------》Virtual Machine Manager

Virtual Networks


【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路


【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

-----------------------------第二部分创建快照---------------------------
[root@localhost ~]# virsh list
 Id Name State
----------------------------------------------------
 1 rhel5u8-1 running

为虚拟机rhel5u8-1创建一个快照
[root@localhost ~]# virsh snapshot-create-as rhel5u8-1 rhel5u8-1.snap
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw

raw 稳定(云运维常用点)
KVM和XEN默认的格式好像还是这个格式。就是使用文件来模拟实际的硬盘(当然也可以使用一块真实的硬盘或一个分区)。由于原生的裸格式,不支持snapshot也是很正常的。但如果你使用LVM的裸设备,那就另当别论。说到LVM还是十分的犀利的目前来LVM的snapshot、性能、可扩展性方面都还是有相当的效果的。目前来看的话,备份的话也问题不大。就是在虚拟机迁移方面还是有很大的限制。但目前虚拟化的现状来看,真正需要热迁移的情况目前需求还不是是否的强烈。虽然使用LVM做虚拟机镜像的相关公开资料比较少,但目前来看牺牲一点灵活性,换取性能和便于管理还是不错的选择。

qcow2支持快照
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,这个也算是redhat的官方渠道了
对于qcow2的格式,几点还是比较突出的,qcow2的snapshot,可以在镜像上做N多个快照:
 •更小的存储空间
 •Copy-on-write support
 •支持多个snapshot,对历史snapshot进行管理
 •支持zlib的磁盘压缩
 •支持AES的加密
  
查看镜像文件格式
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/rhel5u8-1.img 
image: /var/lib/libvirt/images/rhel5u8-1.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G

把raw格式转换成qcow2格式
[root@localhost ~]# qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/rhel5u8-1.img /var/lib/libvirt/images/rhel5u8-1_qcow2.img
[root@localhost ~]# ls -l /var/lib/libvirt/images/
total 28381680
-rw-------. 1 qemu qemu 10737418240 Aug 16 01:09 rhel5u8-1.img
-rw-r--r--. 1 root root 3076521984 Aug 16 01:09 rhel5u8-1_qcow2.img

[root@localhost ~]# qemu-img info /var/lib/libvirt/images/rhel5u8-1_qcow2.img 
image: /var/lib/libvirt/images/rhel5u8-1_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 2.9G
cluster_size: 65536

将虚拟机的硬盘指向转换后的qcow2 img

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

在虚拟机中创建一个目录,但目录中是空的
[root@localhost ~]# mkdir /test
[root@localhost ~]# ls /test

给虚拟机rhel5u8-1创建第一个镜像rhel5u8-1.snap1
[root@localhost ~]# virsh snapshot-create-as rhel5u8-1 rhel5u8-1.snap1
Domain snapshot rhel5u8-1.snap1 created

[root@localhost ~]# qemu-img info /var/lib/libvirt/images/rhel5u8-1_qcow2.img 
image: /var/lib/libvirt/images/rhel5u8-1_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.1G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 rhel5u8-1.snap1 229M 2015-08-16 01:25:39 00:03:58.995

在虚拟机中,给 /test 中复制2个文件
[root@localhost ~]# cp install.log anaconda-ks.cfg /test
[root@localhost ~]# ls /test
anaconda-ks.cfg install.log

给虚拟机rhel5u8-1创建第二个镜像rhel5u8-1.snap2
[root@localhost ~]# virsh snapshot-create-as rhel5u8-1 rhel5u8-1.snap2
Domain snapshot rhel5u8-1.snap2 created
[root@localhost ~]# virsh snapshot-list rhel5u8-1
 Name Creation Time State
------------------------------------------------------------
 rhel5u8-1.snap1 2015-08-16 01:25:39 +0800 running
 rhel5u8-1.snap2 2015-08-16 01:28:07 +0800 running

关闭虚拟机,恢复到第一个快照
[root@localhost ~]# virsh shutdown rhel5u8-1
[root@localhost ~]# virsh snapshot-revert rhel5u8-1 rhel5u8-1.snap1

在虚拟机中,发现 /test 目录为空
[root@localhost ~]# ls /test

关闭虚拟机,恢复到第二个快照
[root@localhost ~]# virsh shutdown rhel5u8-1
[root@localhost ~]# virsh snapshot-revert rhel5u8-1 rhel5u8-1.snap2

在虚拟机中,发现 /test 有拷贝的2个文件
[root@localhost ~]# ls /test
anaconda-ks.cfg install.log

删除虚拟机快照
[root@localhost ~]# virsh snapshot-list rhel5u8-1
 Name Creation Time State
------------------------------------------------------------
 rhel5u8-1.snap1 2015-08-16 01:25:39 +0800 running
 rhel5u8-1.snap2 2015-08-16 01:28:07 +0800 running

[root@localhost ~]# virsh snapshot-delete --snapshotname rhel5u8-1.snap2 rhel5u8-1
Domain snapshot rhel5u8-1.snap2 deleted

[root@localhost ~]# virsh snapshot-list rhel5u8-1
 Name Creation Time State
------------------------------------------------------------
 rhel5u8-1.snap1 2015-08-16 01:25:39 +0800 running

--------------------第三部分KVM热迁移-----------------------------
       迁移分为热迁移和冷迁移,冷迁移是在机器关机的状态下进行迁移。热迁移是在机器处于开机状态进行迁移。

      系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行。在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术。在源主机上实时备份操作系统和应用程序的状态,然后把存储介质连接到目标主机上,最后在目标主机上恢复系统。随着虚拟机技术的发展,迁移更加灵活多样化。

【技术】KVM 详解(二)步入云运维开门路

       KVM的热迁移分为共享存储和非共享存储两种,其最终目的都是为了将内存和磁盘中的数据转移到目的端,解决宿主机故障等问题。
示例:
    192.168.1.1/24       192.168.1.2/24
    ++++++++++++       ++++++++++++
    + + + +  
    + KVM-A + ========> + KVM-B +
    + + + + 
    ++++++++++++        ++++++++++++
    
系统环境:rhel6.4 x86_64 iptables and selinux off
    
将 KVM-A 上的虚拟机镜像文件所在的目录共享出来
[root@localhost ~]# getenforce 
Permissive
[root@localhost ~]# iptables -F
[root@localhost ~]# vim /etc/exports 
/var/lib/libvirt/images 192.168.1.2(rw,sync,no_root_squash)
[root@localhost ~]# service nfs start
主机共享目录
# vim /etc/exports
/var/lib/libvirt/images 192.168.0.145(rw,sync,no_root_squash)

将KVM-A上共享出来的目录挂载在到KVM-B的/var/lib/libvirt/images
[root@localhost ~]# mount -t nfs 192.168.1.1:/var/lib/libvirt/images /var/lib/libvirt/images
       
在KVM-B配置/etc/libvirt/qemu.conf
[root@localhost ~]# vim /etc/libvirt/qemu.conf #取消下面选项的注释
user = "root"第198行(根据情况)
group = "root"第202行

[root@localhost ~]# serivice libvirtd restart

在KVM-A上用虚拟机管理器连接KVM-B
File---------> Add Connection

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

【技术】KVM 详解(二)步入云运维开门路

请大家关注IT辣椒哥团队(建议:多实战操练,),下一篇会发一次多家公有云VPC比对实践总结。

如有不足,请大家多多提意见,可私信我,谢谢。