保护模式虚拟机使用qemu的snapshot参数引发的惨案
来源:互联网 发布:革委会 知乎 编辑:程序博客网 时间:2024/04/30 06:02
在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中获取数据。
- 保护模式虚拟机使用qemu的snapshot参数引发的惨案
- const引发的惨案
- 一个电阻引发的惨案
- 谓词推入引发的惨案
- realloc函数引发的惨案
- 更换jdk引发的惨案
- 虚拟机qemu的使用
- 一个反射引发的异常惨案
- VS2010下注释引发的惨案
- SQL Server Collation引发的惨案
- 一条sleep语句引发的惨案
- 由sp单位引发的惨案
- javascript:一次alert引发的惨案
- 搞笑:一段内存引发的惨案
- 一个组件注册失败引发的惨案
- 一个null引发的SharedPreference惨案
- 一个null引发的SharedPreference惨案
- 一次dns缓存引发的惨案
- ffsdafdsa
- 数据库优化
- 6.12计算输入的正数和
- Name.GetBuffer()会导致CString::left()不起作用
- SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
- 保护模式虚拟机使用qemu的snapshot参数引发的惨案
- 通俗解释悲观锁与乐观锁
- Spring4 之 JdbcTemplate
- 【Java 进制转换】POJ
- Parallel Programming-实现并行操作的流水线(生产者、消费者)
- EXTJS 定时器
- 微信登录
- Nginx的安装与配置
- YUMI(多重启动u盘制作工具)官方正式版V2.0.5.0下载 | YUMI UEFI | yumi多重启动u盘制作工具