kvm虚拟机存储速度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kvm虚拟机存储速度相关的知识,希望对你有一定的参考价值。
参考技术A kvm性能优化,主要集中在cpu、内存、磁盘、网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节。1. CPU
cpu优化需要搞清楚node、socket、core、logic processor的关系,知道内存、l3-cache、l2-cache、l1-cache和cpu的关系。
针对kvm的优化,一般情况,都是通过pin,将vm上的cpu绑定到某一个node上,让其共享l3-cache,优先选择node上的内存,bind方法可以通过virt-manage processor里面的pinning动态绑定。这个绑定是实时生效的。
由于没有下载到speccpu2005,所以写了个大量消费cpu和内存的程序,来检验绑定cpu所带来的性能提升,程序如下:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define BUF_SIZE 512*1024*1024
#define MAX 512*1024
#define COUNT 16*1024*1024
char * buf_1 = NULL;
char * buf_2 = NULL;
void *pth_1(void *data)
char * p1 = NULL;
char * p2 = NULL;
int value1 = 0;
int value2 = 0;
int value_total = 0;
int i = 0;
int j = 0;
for (i = 0; i <=COUNT; i++)
value1 = rand() % (MAX + 1);
value2 = rand() % (MAX + 1);
p1 = buf_1 + value1*1024;
p2 = buf_2 + value2*1024;
for (j = 0; j < 1024; j++)
value_total += p1[j];
value_total += p2[j];
return NULL;
void *pth_2(void *data)
char * p1 = NULL;
char * p2 = NULL;
int value1 = 0;
int value2 = 0;
int value_total = 0;
int i = 0;
int j = 0;
for (i = 0; i <=COUNT; i++)
value1 = rand() % (MAX + 1);
value2 = rand() % (MAX + 1);
p1 = buf_1 + value1*1024;
p2 = buf_2 + value2*1024;
for (j = 0; j < 1024; j++)
value_total += p1[j];
value_total += p2[j];
return NULL;
int main(void)
buf_1 = (char *)calloc(1, BUF_SIZE);
buf_2 = (char *)calloc(1, BUF_SIZE);
memset(buf_1, 0, BUF_SIZE);
memset(buf_2, 0, BUF_SIZE);
pthread_t th_a, th_b;
void *retval;
pthread_create(&th_a, NULL, pth_1, 0);
pthread_create(&th_b, NULL, pth_2, 0);
pthread_join(th_a, &retval);
pthread_join(th_b, &retval);
return 0;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
偶数cpu在node 0 上,奇数cpu在node 1上,vm有2个cpu,程序有2个线程,分别将vm绑定到8,9和10,12,通过time命令运行程序,time ./test,测试结果如下
8,9
real 1m53.999s
user 3m34.377s
sys 0m3.020s
10,12
real 1m25.706s
user 2m49.497s
sys 0m0.699s
可以看出,绑定到同一个node上,比绑到不同node上其消耗时间小不少。测试过程中,也发现如果提供8、9、10、11的cpu,系统会在大部分时间选择8、10和9、11,所以猜测,kvm在cpu bind上,可能已经做了优化,会尽可能的往同一个node上绑定。
这里需要注意的一点是,通过virt-manage pin cpu,仅仅进行cpu bind,会共享l3-cache,并没有限制一定用某一个node上的内存,所以仍然会出现跨node使用内存的情况
2. 内存
优化项包括EPT、透明大页、内存碎片整理、ksm,下面一个一个来介绍
2.1 EPT
针对内存的使用,存在逻辑地址和物理地址的转换,这个转换时通过page table来进行的,并且转换过程由cpu vmm硬件加速,速度是很块的。
但是引入vm之后,vm vaddr----->vm padddr--------->host paddr,首先vm需要进行逻辑地址和物理地址的转换,但是vm的物理地址还是host机的逻辑地址,需要再进行一次逻辑地址到物理地址的转换,所以这个过程有2次地址转换,效率非常低。
幸亏intel提供了EPT技术,将两次地址转换变成了一次。这个EPT技术是在bios中,随着VT技术开启一起开启的。
2.2 透明大页
逻辑地址向物理地址的转换,在做转换时,cpu保持一个翻译后备缓冲器TLB,用来缓存转换结果,而TLB容量很小,所以如果page很小,TLB很容易就充满,这样就很容易导致cache miss,相反page变大,TLB需要保存的缓存项就变少,减少cache miss。
透明大页的开启:echo always > /sys/kernel/mm/transparent_hugepage/enabled
内存碎片整理的开启:echo always> /sys/kernel/mm/transparent_hugepage/defrag
2.3 KSM
简单理解就是可以将host机内容相同的内存合并,节省内存的使用,特别是当vm操作系统都一样的情况,肯定会有很多内容相同的内存,开启了KSM,则会将这些内存合并为一个,当然这个过程会有性能损耗,所以开启与否,需要考虑使用场景,如果不注重vm性能,而注重host内存使用率,可以考虑开启,反之则关闭,在/etc/init.d/下,会有两个服务,服务名称为ksm和ksmtuned,都需要关闭
3. 磁盘
磁盘的优化包括:virtio-blk、缓存模式、aio、块设备io调度器
3.1 virtio
半虚拟化io设备,针对cpu和内存,kvm全是全虚拟化设备,而针对磁盘和网络,则出现了半虚拟化io设备,目的是标准化guest和host之间数据交换接口,减少交互流程和内存拷贝,提升vm io效率,可以在libvirt xml中设置,disk中加入<target dev='vda' bus='virtio'/>
3.2 缓存模式
从vm写磁盘,有3个缓冲区,guest fs page cache、Brk Driver writeback cache(qemu的cache)、Host FS page cache,在host上的设置,无法改变guest fs page cache,但是可以改变后面2个cache,缓存模式有如下5种,当采用Host FS page cache,会有一个写同步,会实时将host cache中的数据flush到磁盘上,当然这样做比较安全,不会丢失数据,但写性能会受到影响。
writeback mode在mail server这种小文件 高io的服务器上,其性能是很差的,none模式大部分情况要比writethrough性能稍好一点,所以选择none。
启用方式在libvirt xml disk中加入<driver name='qemu' type='qcow2' cache='none'/>
3.3 aio
异步读写,分别包括Native aio: kernel AIO 和 threaded aio: user space AIO emulated by posix thread workers,内核方式要比用户态的方式性能稍好一点,所以一般情况都选择native,开启方式<driver name='qemu' type='qcow2' cache='none' aio='native'/>
3.4 块设备调度器
cfq:perprocess IO queue,较好公平性,较低aggregate throughput
deadline:per-device IO queue,较好实时性,较好aggregate throughput,不够公平,当某些vm有大量io操作,占用了大量io资源时,其它后加入的vm很有可能抢占不到io资源。
这个目前笔者还没有做过测试,但是查看网易和美团云的方案,都将其设置为cfq。
开启方式:echo cfq > /sys/block/sdb/queue/scheduler
4. 网络
优化项包括virtio、vhost、macvtap、vepa、SRIOV 网卡,下面有几篇文章写的非常好
http://www.ibm.com/developerworks/cn/linux/1312_xiawc_linuxvirtnet/
http://xiaoli110.blog.51cto.com/1724/1558984
4.1 virtio
更改虚拟网卡的类型,由全虚拟化网卡e1000、rtl8139,转变成半虚拟化网卡virtio,virtio需要qemu和vm内核virtio驱动的支持,这个原理和磁盘virtio原理一样,不再赘述。
4.2 vhost_net
vhost_net将virtiobackend处理程序由user space转入kernel space,将减少两个空间内存拷贝和cpu的切换,降低延时和提高cpu使用率
4.3 macvtap
代替传统的tap+bridge,有4中模式,bridge、vepa、private、passthrough
1 Bridge
完成与 Bridge 设备类似功能,数据可以在属于同一个母设备的子设备间交换转发. 当前的Linux实现有一个缺陷,此模式下MACVTAP子设备无法和Linux Host通讯,即虚拟机无法和Host通讯,而使用传统的Bridge设备,通过给Bridge设置IP可以完成。但使用VEPA模式可以去除这一限制. macvtap的这种bridge模式等同于传统的tap+bridge的模式.
2 VEPA
是对802.1Qbg标准中的VEPA机制的部分软件实现,工作在此模式下的MACVTAP设备简单的将数据转发到母设备中,完成数据汇聚功能,通常需要外部交换机支持Hairpin模式才能正常工作。
3 Private
Private模式和VEPA模式类似,区别是子 MACVTAP之间相互隔离。
4 Passthrough
可以配合直接使用SRIOV网卡, 内核的macvtap数据处理逻辑被跳过,硬件决定数据如何处理,从而释放了Host CPU资源。MACVTAP Passthrough 概念与PCI Passthrough概念不同,PCI Passthrough针对的是任意PCI设备,不一定是网络设备,目的是让Guest OS直接使用Host上的 PCI 硬件以提高效率。MACVTAP Passthrough仅仅针对 MACVTAP网络设备,目的是饶过内核里MACVTAP的部分软件处理过程,转而交给硬件处理。综上所述,对于一个 SRIOV 网络设备,可以用两种模式使用它:MACVTAP Passthrough 与 PCI Passthrough
4.4 PCI pass-through
直通,设备独享。
4.5 SO-IOV
优点是虚拟网卡的工作由host cpu交给了物理网卡来实现,降低了host cpu的使用率,缺点是,需要网卡、主板、hypervisor的支持。
测试结果,在实验室2台host,分别起1台vm(vm1、vm2),用iperf测试vm1和vm2之间的吞吐量,用ping测试2者之间的响应时间,host机为百兆网卡,结果如下表所示,可以看出随着优化的深入,其吞吐量和响应时间都有所改善,由于暂时没有硬件的支持,macvtap vepa和SR-IOV没有得到测试。
测试工具 Iperf(ping)
rtl8139
87Mb/s(1.239ms)
virtio
89Mb/s(1.140ms)
Virtio + host_net
92Mb/s(1.014ms)
Macvtap(bridge) + virtio + host_net
94Mb/s(0.989ms)
host
95Mb/s(0.698ms)
总结来看网络虚拟化具有三个层次:
1, 0成本,通过纯软件virtio、vhost、macvtap提升网络性能;
2, 也可以用非常低的成本按照802.1Qbg中的VEPA模型创建升级版的虚拟网络,引出虚拟机网络流量,减少Host cpu负载,但需要物理交换机的配合;
3, 如果网络性能还是达不到要求,可以尝试SR-IOV技术,不过需要SR-IOV网卡的支持。
总结:文章总共阐述了cpu、内存、磁盘、网络的性能优化方案,大部分都是通过kvm参数和系统内核参数的修改来实现。
内核及虚拟化漫谈
微信公众号
分享linux开发技术及新闻热点
点击阅读全文
打开CSDN APP,看更多技术内容
【实操干货】KVM命令管理虚拟机与性能优化_weixin_34059951的博客-CSDN...
简要介绍KVM中经常使用的基本功能管理命令(CentOS7.4是宿主机中安装的虚拟机); 1)、virsh -h #查看命令帮助 2)、ls /etc/libvirt/qemu #查看KVM的配置文件存放目录(虚拟机系统实例配置文件的文件名为.xml) 3)、virsh list #查看...
继续访问
python虚拟机优化_KVM虚拟机管理及性能优化_weixin_39559804的博客-CSDN...
KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O,因此需要优化。 1:CPU优化 所有guestcpu 不要超过物理机的CPU总数,建议复制主机CPU配置。 2:内存优化 1) :KSM(相同页合并)开启KSM会将相同的内...
继续访问
kvm虚拟机性能优化方案
kvm性能优化方案
KVM总结-KVM性能优化之CPU优化
任何平台根据场景的不同,都有相应的优化。不一样的硬件环境、网络环境,同样的一个平台,它跑出的效果也肯定不一样。就好比一辆法拉利,在高速公路里跑跟乡村街道跑,速度和激情肯定不同…
继续访问
KVM虚拟机的优化历程---按需优化_weixin_33778544的博客
一、KVM为什么要调优 性能的损耗是矛盾的根源,KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O输入输出。 KVM性能优化主要在CPU、内存、I/O这几方面,当然在这几方面也是要分场景的,不同场景优化...
继续访问
qemu-kvm虚拟机性能优化_li_Jiejun的博客_qemu虚拟机...
在KVM虚拟机中运行mysql,发现与ESX虚拟机中比较,性能有些差。用sysbench测试KVM虚拟机中的mysql,TPS刚刚到1500级别。性能如图:使用perf命令跟踪KVM虚拟机对应的进程,情况如下:从图中可以看出,这台虚拟机的page_fault占比较高,其次是__...
继续访问
最新发布 KVM 虚拟化详解
服务器虚拟化是云计算最核心的技术,而KVM是当前最主流的开源的服务器虚拟化技术。从Linux2.6.20起,KVM作为内核的一个模块 集成到Linux主要发行版本中。从技术架构(代码量、功能特性、调度管理、性能等)、社区活跃度,以及应用广泛度来看,KVM显现出明显优势,已逐渐替换另一开源虚拟化技术Xen。在公有云领域,2017年之后AWS、阿里云、华为云等厂商都逐渐从Xen转向KVM,而Google、腾讯云、百度云等也使用KVM。在私有云领域,目前VMware ESXi是领导者,微软Hyper-V不少应用,
继续访问
恒天云技术分享系列3 – KVM性能调优
恒天云技术分享:http://www.hengtianyun.com/download-show-id-11.html KVM是什么 KVM 是 kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少...
继续访问
KVM优化_笛香幽谷(欧锐)的博客
KVM优化 第1章 KVM 1.1 架构 图表1 1 KVM基本架构图 1. kvm 驱动:主要负责虚拟机创建,虚拟内存分配,VCPU寄存器读写以及VCPU运行; 2. Qemu:用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。
继续访问
KVM虚拟化性能优化_weixin_34133829的博客
KVM虚拟化性能优化 可从以下几个方面优化KVM虚拟机,提高虚拟机的性能。 1、全虚拟化使用半虚拟化驱动(virtio) virtio是KVM的半虚拟化机制,可提高IO性能,使用virtio可心显著提高KVM性能。virtio包括磁盘驱动和网卡驱动,下面是在XML文件中...
继续访问
KVM 性能优化之内存优化
二、KVM 内存性能调优 我们说完CPU方面的优化,接着我们继续第二块内容,也就是内存方面的优化。内存方面有以下四个方向去着手: 1. EPT 技术 2. 大页和透明大页 3. KSM 技术 4. 内存限制 2.1. EPT技术 EPT也就是扩展页表,这是intel开创的硬件辅...
继续访问
KVM学习(二十一)性能监视与优化
为什么要监视性能? 第一、了解服务器的工作负荷以及对服务器资源的影响 第二、了解性能的改变和性能趋势以便及采取措施 第三、诊断系统问题并确认优化措施 建立性能基线 性能基线是在一段时间中在典型的工作负荷和用户连接数量的情况下收集的服务器性能数据。 在确定性能基线时,应当了解服务器所执行的任务,以及执行任务的时间和日期。 在部署阶段建立性能基线,然后和实际性能进行比较。 及早建立性能基线有助于快速发...
继续访问
kvm 虚拟机的性能调优_weixin_30512785的博客
2、kvm 自带优化。大多数的优化都是默认配置的,只是通过了解这些优化项来进一步了解linux 及kvm虚拟化 CPU优化 场景1: 上下文切换: 宿主机 ring 0 ring 3 虚拟机 ring 0 ring 3 解决:vmware虚拟机编辑处理器--虚拟化引擎--勾选 ...
继续访问
KVM性能优化--CPU篇_Shawn.Hu的博客_kvm cpu toplogy
可以使用以下命令来设置将虚拟机绑定到指定node。 virsh numatune domain --nodeset 'string' 复制代码 举个列子:将上面的虚拟机test(6核),限定在Node0和1中,使用物理机六个CPU1,2,3,4,6,7。 (注:本例中由于一个socket...
继续访问
Neutron中的网络I/O虚拟化(by quqi99)
作者:张华 发表于:2014-04-03 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 ) 为了提升网络I/O性能,虚拟化的网络I/O模型也在不断的演化: 1,全虚拟化网卡(emulation),如VMware中的E1000用来仿真intel 82545千兆网卡,
继续访问
热门推荐 kvm性能优化方案---cpu/内存/磁盘/网络
kvm性能优化 kvm性能优化,主要集中在cpu、内存、磁盘、网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节。 cpu 在介绍cpu之前,必须要讲清楚numa的概念,建议先参考如下两篇文章 CPU Topology 玩转cpu-topology 查看cpu信息脚本: #!/bin/bash # Simple p
继续访问
KVM性能优化
一、KVM为什么要调优 性能的损耗是关键。KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化。KVM性能优化主要在CPU、内存、I/O这几方面。当然对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。 二、KVM优化思路及步骤 KVM的性能已经很不错了,但还有一些微调措施可以进一步提高KVM的性能1、CPU的优化要考虑CPU的数量问题...
继续访问
KVM 虚拟化的功能特性
虚拟化指创建某事物的虚拟(而非实际)版本,包括虚拟的计算机硬件平台、存储设备,以及计算机网络资源),虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。 KVM 全称是 Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。KVM 从诞生开始就定位于基于硬件虚拟化支持的全虚拟化实现。它以内核模块的形式加载之后,就将 Linux 内核变成了一个
继续访问
KVM虚拟机管理及性能优化
KVM虚拟机管理及性能优化 上一章给大家介绍了KVM虚拟化的部署安装本章接上一篇文章继续为大家讲解,如何使用KVM的操作命令,对虚拟机进行管理(虚拟机开启关闭、挂起恢复、删除虚拟机、通过备份配置文件重新恢复删除的虚拟机)、KVM文件管理(磁盘格式转换、对磁盘文件查看、修改等)、虚拟机的克隆、虚拟机快照。以及最后给大家介绍 KVM性能优化的三个调优思路、和系统调优工具 使用KVM命令集管理虚拟机...
继续访问
KVM 性能调优与限制
kvm内存优化: 调高内存回收水位值echo 10 > /proc/sys/vm/swappinessecho 1024000 > /proc/sys/vm/min_free_kbytes 在文件/etc/sysctl.conf中加入 vm.dirty_ratio=10原理:linux会设置40%的可用内存用来做系统cache,当flus...
继续访问
KVM latency优化点分析
kvm latency tunning 注:参考tencent-cloud的wangpengli的报告 报告的目标是优化kvm hypervisor的latency性能,主要有以下几点。 TLB Shootdown TLB:Translation Lookaside Buffer,转译后备缓冲区(页表缓存),存放虚拟地址映射物理地址。 TLB shootdown一般通过IPI方式实现。 问题 TBL shootdown preemption问题。 在裸金属架构(bare-metal)上,远程TLB刷新导致发
继续访问
高性能kvm服务器,KVM进阶之(一)KVM性能监视与优化
为什么要性能监视通过性能监视,你可以1:了解服务器的工作负荷以及对服务器资源的影响2:了解性能的改变和性能趋势以便及采取措施3:测试调整结果4:诊断系统问题并确定优化措施分析性能数据确定系统瓶颈建立性能基线服务器性能监视的最佳策略建立性能日志尽量减少性能监视本身对服务器所造成的影响分析监视结果,建立性能基线创建警报调整系统scale Upscale Out分析性能趋势,提前采取措施监视工具你熟悉的...
继续访问
KVM虚拟化(一)
一、KVM虚拟化架构 1、主流虚拟机架构 图中对比了几种主流虚拟化技术架构:ESXi、Xen与KVM,其主要差别在与各组件(CPU、内存、磁盘与网络IO)的虚拟化与调度管理实现组件有所不同。在ESXi中,所有虚拟化功能都在内核实现。Xen内核仅实现CPU与内存虚拟化, IO虚拟化与调度管理由Domain0(主机上启动的第一个管理VM)实现。KVM内核实现CPU与内存虚拟化,QEMU实现IO虚拟化...
继续访问
KVM虚拟化的优化
KVM调优 思路 性能的损耗是矛盾的根源,KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O输入输出。KVM性能优化主要在CPU、内存、I/O这几方面,当然在这几方面也是要分场景的,不同场景优化方向也是不同的。 CPU优化 要考虑CPU的数量问题,所有guestCPU的总数目不要超过物理机CPU的总数目。如果超过,则将对性能带来严重影响,建议选择复制主机CPU配...
继续访问
windows虚拟机qemu进程cpu占有率很高问题解决
1.1 现象 在公有云平台,openstack计算节点上,如图Figure-1所示,一台windows虚拟机的qemu-kvm进程116%的占用cpu资源,如图Figure-2所示,该虚拟机仅有一个vcpu。 Figure-1: Figure-2: 1.2 分析步骤 通过下面步骤的分析,了解qemu-kvm进程在忙什么,为什么这么忙? 1.2.1 查看进程、线程的状态 通过top -d 3 -Hp 5180查看进程,以及该进程的相关线程的状态,分析出哪个线程在忙。如图Figure-3所示: 线程51
继续访问
启用 SR-IOV 解决 Neutron 网络 I/O 性能瓶颈
目录: 目录 目录: 前文列表 前言 Neutron 的网络实现模型 基于虚拟网络设备的虚拟机流量走向 基于虚拟网络设备的性能瓶颈 在 Neutron 中引入 SR-IOV 技术 基于 SR-IOV 技术的虚拟机流量走向编辑 Neutron 配置启用 SR-IOV SR-IOV 与 NUMA 亲和 SR-IOV 与 VLAN tag SR-IOV 与安全组 前文列表 《SR-IOV 网卡虚拟化技术》 前言 该文章是基于「计算机系统应用」月刊文章《SR-I...
继续访问
KVM总结-KVM性能优化之磁盘IO优化
介绍KVM磁盘性能方面的调优。磁盘IO我们可以从以下四个方面去着手优化: 1)磁盘类型选择2)缓存模式选择3)AIO 异步读写方式选择4)磁盘IO调度器选择。
基于本地存储的kvm虚拟机在线迁移
基于本地存储的kvm虚拟机在线迁移
kvm虚拟机迁移分为4种
(1)热迁移基于共享存储
(2)热迁移基于本地存储
(3)冷迁移基于共享存储
(4)冷迁移基于本地存储
这里介绍的是热迁移基于本地存储
动态块迁移版本要求
qemu版本要求 大于或等于0.12.1
rpm -qa|grep qemu qemu-kvm-0.12.1.2-2.491.el6_8.1.x86_64 qemu-kvm-tools-0.12.1.2-2.491.el6_8.1.x86_64
目标宿主机:10.11.30.52
源宿主机:10.11.30.53
迁移使用tcp认证方式
kvm虚拟机名称:gzxtest09
1、配置libvirtd服务 源宿主机和目标宿主机都要执行
vi /etc/libvirt/libvirtd.conf listen_tls = 0 listen_tcp = 1 tcp_port = "16509" listen_addr = "0.0.0.0" auth_tcp = "none" mdns_adv = 0
解释
listen_tls:关闭tls,默认是开启的
listen_tcp :开启tcp认证
tcp_port:tcp端口配置,默认端口是16509
auth_tcp:配置是否开启口令认证,默认不开启
mdns_adv:是否开启mdns组播,默认关闭
2、配置libvirtd监听方式,无论是tcp,ssh,tls认证方式都需要配置 , 源宿主机和目标宿主机都要执行
vi /etc/sysconfig/libvirtd LIBVIRTD_ARGS="--listen"
3、编辑/etc/libvirt/qemu.conf文件 源宿主机和目标宿主机都要执行
vi /etc/libvirt/qemu.conf vnc_listen = "0.0.0.0"
解释
vnc_listen:使虚拟机带外VNC默认监听.0.0.0.0
4、重启libvirtd服务,使配置生效, 源宿主机和目标宿主机都要执行
/etc/init.d/libvirt restart
5、检查端口和进程,libvirtd是否监听16509端口, 源宿主机和目标宿主机都要执行
ps aux | grep libvirtd root 16563 1.5 0.1 925880 7056 ? Sl 16:01 0:28 libvirtd -d -l --config /etc/libvirt/libvirtd.conf netstat -apn | grep tcp tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 13971/libvirtd
6、在源宿主机连接目标宿主机的libvirtd并查看虚拟机信息
virsh -c qemu+tcp://[email protected]:16509/system
7、在目标宿主机创建同样大小的镜像文件,路径、名称也要一样
qemu-img create -f qcow2 /data/kvmimg/gzxtest09.qcow2 20G
8、迁移 ,10.11.30.52为目标宿主机的内网IP,tcp认证方式,迁移时间有点长需要开一个screen窗口
screen -S migratekvm cd /data/kvmimg/ virsh migrate --live --copy-storage-all --unsafe --persistent gzxtest09 qemu+tcp://[email protected]:16509/system
9、在目标宿主机执行,会显示paused状态 即是suspended状态
watch virsh list --all
10、在目标宿主机执行,显示迁移进度
tailf /var/log/libvirt/qemu/gzxtest09.log
11、虚拟机迁移完成后,源宿主机为关机状态,目标宿主机变为running状态
virsh list --all #源宿主机
virsh list --all #目标宿主机
公司的戴尔PowerEdge T130 塔式服务器,迁移20G镜像文件用了30分钟
在线迁移问题汇总
(如果ssh的端口不是默认22,可以写为 qemu+ssh://target:port/system)
Question 1:
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
解决办法很简单,因为默认情况下hostname 是 localhost,我们需要把目标的hostname修改一下,临时的也可以。
#hostname target
Question 2:
error: internal error Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009
这个在mail list 中有大牛说是服务器提供商的问题,
你可以用#dmidecode -s system-uuid 查看一下这个ID,理论上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
这三个ID是一样的。(之前看论坛里发的解决方法是需要下载一个dmidecode 命令的文件去替换系统的,达到修改的目的,不过我只是修改了libvirt的配置文件就可以了,可能是版本的问题)
我们修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \\"`uuidgen`\\"" /etc/libvirt/libvirtd.conf
重启一下libvirtd 服务
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid
Question 3:
error: unable to set user and group to ‘107:107‘ on ‘/image/vmtest/disk.img‘: No such file or directory
如果顺利进入到这步的话,就很简单了,没有directory 直接创建一个就可以,没有disk.img 直接create一个
注:创建的磁盘应该和源虚拟机的磁盘是一样的大小(更大应该是可以)和格式(raw还是qcow2)
qemu-img create /image/vmtest/disk.img +sizeG
Question 4:
error: Unable to resolve address ‘target‘ service ‘49155‘: Name or service not known
《《Name or service not known》》这个相信大家都知道如何解决,/etc/hosts 添加解析的ip和target的域名即可
参考文章:http://www.cnblogs.com/fengrenzw/p/3339918.html
以上是关于kvm虚拟机存储速度的主要内容,如果未能解决你的问题,请参考以下文章