保护模式虚拟机使用qemu的snapshot参数引发的惨案
2017-11-14 17:36
281 查看
在ovirt环境中,有1个手动池,用户每次使用完后,需要将虚拟机回退到原始版本。
在ovirt原有的实现里,是通过快照来实现的,他所谓的快照,其实就是创建原磁盘的一个增量文件,虚拟机运行时,原来的磁盘作为模板,数据写入到增量文件中,虚拟机关闭时只要把增量文件删除了就行,不会影响到原磁盘。
这种社区的方式在生产环境中也出现了一些小问题,于是我们引入了qemu自带的snapshot参数,这样qemu读写磁盘时会写在临时文件或者内存中,我们乐的什么也不用管,而且很稳定。
但是,后来发现了这种方式在块设备+qcow自动扩容时存在大问题。
为什么需要扩容
为了节省容量,自动池的虚拟机都是基于模板生成增量文件,这个虚拟机磁盘本身是1个增量,如果用lvm块设备来创建的话,刚创建的时候会使用很少的容量,ovirt在主机端的vdsm进程会监控这个磁盘的物理容量和使用量,必要的时候自动扩容。
扩容时产生的问题:
1,qemu使用snapshot参数是,不会再写原磁盘,会创建1个临时磁盘,这个磁盘的容量从0开始增长,写多少增长多少。
2,Libvirt读取虚拟机磁盘信息时,读到的是临时磁盘的容量,而且每次读到的磁盘容量和使用量相等,于是向spm主机发起扩容需求。
3,spm主机收到扩容请求,对原磁盘进行扩容,扩容的大小总是4G+当前使用量,当前容量总是1M,2M,3M这样临时磁盘的容量,所以每次扩容时总是4096,4097,4098,4099,使得原lvm磁盘的容量按M逐渐扩展。
影响:
1,扩容与spm主机通信,需要通过写入存储,加重存储读写压力。
2,主机上虚拟机多时,过多的扩容命令,会占满主机与spm主机的通信队列(默认64个),会使得两者通信异常,严重时造成主机状态异常。
3,lvm磁盘碎片严重,会使得存储性能降低。
修改办法:
1,扩容时,将当前大小格式化为整G,按G扩容。
2,扩容时,spm返回了原磁盘的当前物理容量,使用返回的容量,而不是Libvirt获取的磁盘容量,依据此来判断是否需要扩容。
ovirt后续版本对于不同情况的扩容有类似修正,不再只从libvirt中获取数据。
在ovirt原有的实现里,是通过快照来实现的,他所谓的快照,其实就是创建原磁盘的一个增量文件,虚拟机运行时,原来的磁盘作为模板,数据写入到增量文件中,虚拟机关闭时只要把增量文件删除了就行,不会影响到原磁盘。
这种社区的方式在生产环境中也出现了一些小问题,于是我们引入了qemu自带的snapshot参数,这样qemu读写磁盘时会写在临时文件或者内存中,我们乐的什么也不用管,而且很稳定。
但是,后来发现了这种方式在块设备+qcow自动扩容时存在大问题。
为什么需要扩容
为了节省容量,自动池的虚拟机都是基于模板生成增量文件,这个虚拟机磁盘本身是1个增量,如果用lvm块设备来创建的话,刚创建的时候会使用很少的容量,ovirt在主机端的vdsm进程会监控这个磁盘的物理容量和使用量,必要的时候自动扩容。
扩容时产生的问题:
1,qemu使用snapshot参数是,不会再写原磁盘,会创建1个临时磁盘,这个磁盘的容量从0开始增长,写多少增长多少。
2,Libvirt读取虚拟机磁盘信息时,读到的是临时磁盘的容量,而且每次读到的磁盘容量和使用量相等,于是向spm主机发起扩容需求。
3,spm主机收到扩容请求,对原磁盘进行扩容,扩容的大小总是4G+当前使用量,当前容量总是1M,2M,3M这样临时磁盘的容量,所以每次扩容时总是4096,4097,4098,4099,使得原lvm磁盘的容量按M逐渐扩展。
影响:
1,扩容与spm主机通信,需要通过写入存储,加重存储读写压力。
2,主机上虚拟机多时,过多的扩容命令,会占满主机与spm主机的通信队列(默认64个),会使得两者通信异常,严重时造成主机状态异常。
3,lvm磁盘碎片严重,会使得存储性能降低。
修改办法:
1,扩容时,将当前大小格式化为整G,按G扩容。
2,扩容时,spm返回了原磁盘的当前物理容量,使用返回的容量,而不是Libvirt获取的磁盘容量,依据此来判断是否需要扩容。
ovirt后续版本对于不同情况的扩容有类似修正,不再只从libvirt中获取数据。
相关文章推荐
- 虚拟机QEMU使用参数详解
- C函数调用-不使用函数返回值,而用参数实现输入/输出的4种模式
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- 操作系统实验六:保护模式之使用调用门提升特权级
- dll导出中函数中使用CString类型的参数引发的ESP出错
- XP下使用QEMU虚拟机实战
- 虚拟机使用vm8模式上网
- KVM使用之 qemu参数说明
- 一个fopen函数中未使用二进制模式(b)引发的血案
- 使用qemu-img管理虚拟机磁盘镜像(创建虚拟机,虚拟机快照)
- 使用Qemu-img管理虚拟机磁盘镜像(创建虚拟机,虚拟机快照)
- 实验二十九 使用SCDPM 2012 SP1保护虚拟机
- 一个fopen函数中未使用二进制模式(b)引发的血案
- 在debian上使用qemu建立mipsel虚拟机
- Snapshot在virsh和qemu-img中的使用
- Effective Java Item2:当构造方法的参数(尤其是可选参数)比较多时使用Builder模式
- QEMU使用之参数解析
- VMProtect使用技巧汇集__最好的虚拟机保护软件之一
- 操作系统实验五:保护模式之初步认知门任务(求助:如何使用其他指令替代或模拟retf指令)