单机虚拟化技术及生产环境实践
Posted 运维帮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单机虚拟化技术及生产环境实践相关的知识,希望对你有一定的参考价值。
内容简介:
本书在中国运维领域将具有“划时代”的重要意义:第一,作者团队是国内顶尖的KVM技术专家、虚拟化技术专家和运维专家,是国内第一批研究并将KVM应用到大规模生产环境的人;第二,书中的所有知识、经验和案例都来自金山、盛大等国内一线互联网公司,这些公司的业务规模巨大,生产环境复杂;第三,从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案;第四,本书内容得到了来自金山、盛大、阿里、猎豹移动、触控科技、英特尔、浪潮等大型IT企业的数十位VP和运维专家的高度认可,并联袂推荐。
作者简介:杨俊俊
资深虚拟化技术专家和运维工程师,就职于盛大,担任盛大游戏公有云“G云”运维负责人和Intel联合实验室技术负责人,曾任职51.com,精通虚拟化项目的评估与实施,精通开源分布式文件系统在生产环境的运维与实践。
生产环境虚拟化的主要形式有单机虚拟化和集群虚拟化。单机虚拟化是生产环境使用最广泛的虚拟化形式,本文介绍单机虚拟化技术,重点介绍单机虚拟化技术及应用场景。
《深度实践KVM》章节节选
单机虚拟化技术及生产环境实践
一 、概述
什么是单机虚拟化?单机虚拟化,从字面上理解,首先是单机,即单台宿主机,其次是虚拟化,连起来就是由单台宿主机实现的虚拟化方式。单机虚拟化一台宿主机就是一套虚拟化体系,这台宿主机上所有的虚拟机,使用的计算、内存、存储、网络资源都在这台宿主机内部,单机虚拟化每台虚拟机的物理边界就是所在的宿主机。
单机虚拟化部署灵活,性价比非常高,是生产环境应用最广泛的虚拟化方式,应用场景非常广泛,主要有以下场景:
q 老业务迁移到虚拟化环境,为了保持业务兼容,保持ip等因素不变;
q 物理位置零散分布的业务;
q 对成本敏感的业务;
q 对性能要求非常高的业务;
二、单机虚拟化的优势和劣势
单机虚拟化的优势
(1)单机虚拟化有很好的成本优势
单机虚拟化不需要额外投入存储、网络资源,不需要另外改造现有的网络结构。硬件成本、时间成本、人员投入成本都是最低的,是性价比最高的虚拟化方式。
(2)单机虚拟化具有很高的灵活性
单机虚拟化非常灵活,部署几台服务器就可以搞起来。比如经常碰到这样的情况,在某个机房里面,有一批非常陈旧的服务器正在运行,这批服务器已经很老了,而且全部都过了保修期,服务器上面的应用可能都是很多年前部署上去的,环境非常复杂,可能维护这些应用的人,已经更换了好几批,重新申请新的服务器,重新部署业务难度非常大。单机虚拟化,在这种场景下就非常合适,可以采用本书第七章介绍的P2V技术,将老旧的服务器转换成虚拟机,业务环境、ip,都可以保持和原来一模一样,而对于业务来说,只需要停机一段时间即可。
(3)单机虚拟化实现简单
对于业务初期或者刚开始尝试应用虚拟化技术的团队,单机虚拟化技术简单,可以很快的上手。它没有复杂的架构,宿主机就是一台配置符合要求的普通服务器,要使用KVM虚拟化,只需要安装一些必要的软件包即可,对于一般的业务运维,实现起来相对简单的,可以在很短的时间内,将虚拟化部署起来。
(4)单机虚拟化单虚拟机性能高
不同的业务对于服务器的压力差别是非常大的。比如数据库服务器,压力一般多来自磁盘的读写。游戏的GS(Game Server)服务器压力大多在CPU。视频业务服务器,压力都在内存和网络。单机虚拟化性能高的优势主要体现在磁盘和网络。
单机虚拟化通过硬件配置和特有的虚拟化技术,可以达到接近物理机的性能,能很好的应对这些性能压力。对于磁盘读写压力大的业务,单机虚拟化宿主上可以通过配置SSD硬盘,大幅提升虚拟机的读写性能。单机虚拟化在磁盘性能方面的优势是,和采用共享存储的方式比,单机虚拟化可以非常灵活的调整虚拟机独占不同的SSD硬盘,达到和物理机近似的性能,而共享存储是多台虚拟机分享存储资源,单台虚拟机的磁盘性能会受到限制。
对于网络压力大的业务,可以通过开启网卡的SR-IOV(Single-RootI/O Virtualization)使虚拟机网络性能得到非常高的提升,而SR-IOV目前的特性是不支持迁移,非常适合单机虚拟化。
(5)单机虚拟化故障影响面小
在服务器运行过程中,故障是不可避免的,一旦出现故障,影响范围有多大,这点是非常重要的。单机虚拟化,因为一台宿主机上运行的虚拟机的数量有限,当一台宿主机出现问题的时候,只会影响这台宿主机上的虚拟机,对其他的虚拟机不会造成影响。和集群虚拟化对比来看,集群虚拟化采用集中式的存储,虽然出现问题的几率比较小,但是一旦存储、网络出现问题,整个集群的全部虚拟机都会受到影响。
2.单机虚拟化的劣势
(1)单机虚拟化难以统一管理
灵活性带来的另一个问题就是混乱,宿主机在物理机上分布在多个地方,在网络上分布在多个网段,一般非常分散,不方便管理,有违资源的整体规划原则。
(2)单机虚拟化故障恢复慢,有可能虚拟机彻底丢失
因为虚拟机都运行在单台宿主机上,一旦这台宿主机出现问题,要恢复业务时间周期比较长。
如果是宿主机非磁盘硬件故障,有两种恢复方案,第一种方案是将虚拟机迁移到健康的宿主机上,这个过程中,虚拟机是不可用的,而迁移的过程,实际是文件的复制,当虚拟机文件非常大的时候复制过程就非常漫长。第二种恢复的方式是通过备机,将故障宿主机上的硬盘,全部换到备机上,直接开机,这种恢复方式相比虚拟机迁移要快一些,但是对于品牌多样的服务器,每种都要准备一台备机。
如果非常不幸,发生极端情况,宿主机多块硬盘同时故障,那虚拟机就会彻底丢失,只能从备份恢复虚拟机,然后在恢复业务数据,这种情况就有可能会造成业务数据丢失,但是一般发生这种情况的几率非常低,笔者在几年的虚拟化运维实践中,因为生产环境一般都做的是RAID10,同一个RAID1组两块磁盘同时故障的情况,只碰到一次,并且碰到这种情况,还可以使用应用层面的数据进行恢复,因为应用层面都是每天备份一次,所以恢复的时候,丢失了将近一天的数据。但是恢复业务也用了7个多小时。
还有一种情况,就是宿主机系统故障,需要修复系统,或者将虚拟机镜像文件拷贝到备用宿主机上,恢复时间也比较长。单机虚拟化的详细故障恢复方法在第21章有详细介绍。
三、单机虚拟化技术
1.单机虚拟化磁盘技术
在单机虚拟化中,虚拟机的硬盘可以采用目前KVM支持的全部格式,包括raw、qcow2、qed、裸盘、lvm,每种格式的功能和性能在第5章做了详细的介绍和测试,本节这些方面就不再重复介绍了。一般情况下,在单机虚拟化中,建议优先使用qcow2或者lvm裸盘的方式作为虚拟化的磁盘,主要有两个原因:
(1)qcow2镜像文件在宿主机上实际占用空间,默认是按需占用的,除非添加参数preallocation=full,才会预分配空间,命令如下:
[root@localhost ~]# qemu-img create -f qcow2 -osize=5G,preallocation=full test.qcow2
Formatting 'test.qcow2', fmt=qcow2 size=5368709120 encryption=offcluster_size=65536 preallocation='full'
lvm从CentOS6.4开始也支持精简模式,使用lvm方式主要是IO性能比较好,一些IO性能要求比较高虚拟机建议使用lvm的磁盘方式。
(2)qcow2、lvm方式的虚拟机硬盘,支持快照功能,这个特性可以方便进行虚拟机的备份和恢复。
提示:
qcow2方式的虚拟机创建快照备份的方式有两种,第一,直接使用virsh snapshot-create vm-name命令来创建,过程会锁定虚拟机,这个方法只适合业务已停止的情况下为虚拟机做备份。第二,使用virsh snapshot-create-as命令将当前虚拟机运行镜像指到新的文件中,然后在将老的虚拟机镜像文件复制备份,再使用virsh blockcommit命令将当前镜像合并回原镜像,但是CentOS6/CentOS7 系统中自带的qemu-img命令版本及Libvirt版本不支持这样的操作,需要升级qemu-img到2.0.x版本以上,Libvirt到1.2.8版本以上才能支持。
在单机虚拟化中,针对极端虚拟机磁盘压力情况,可以为宿主机配置SSD盘,虚拟机直接使用SSD裸盘,可以有效的提升虚拟机的磁盘读写性能。在部署的过程中,重要业务,笔者一般在每台宿主机上配置四块SSD,做RAID10,以应对虚拟机运行过程中突发的磁盘读写压力及磁盘故障。
2.单机虚拟化网络技术方案
单机虚拟化的在网络方面非常的灵活,在本书的第4章,介绍了KVM网络虚拟化技术,其中介绍的全部网络类型在单机虚拟化都可以使用,比如:Macvtap、Vhost-net、SR-IOV、Bridge、Open vSwitch等等。在第4章中,对这些网络虚拟化技术都做了详细的介绍,这节不再重复介绍了。
上面列举的几种网络虚拟化技术,从功能上说,最强大的是Open vSwitch,它可以结合SDN可以非常方便的实现虚拟机之间的组网和隔离;从性能上来说,SR-IOV是最好的,测试发现,在虚拟机为Linux系统的情况下,虚拟机的网卡行可以达到物理网卡90%以上的性能。从配置上说,桥接是最方便的,对于刚开始接触虚拟化的读者来说,可以尝试桥接方式。其他几种网络虚拟化技术用的相关较少一些。
提示:
SDN软件定义网络(Software Defined Network),是一种新型网络创新架构,是网络虚拟化的一种实现方式,其核心技术通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制。是近几年网络方面正在进行的革命,是未来网络发展的方向之一。
3.单宿主机虚拟机迁移方案
单宿主机迁移方案,根据虚拟机的状态,可以分为两类:
q 冷迁移;
q 热迁移。
冷迁移需要虚拟机关机,然后通过程序、脚本或者命令,将虚拟机的镜像文件从一台宿主机复制到另一台宿主机,然后配置虚拟机的xml配置文件,将虚拟机在新的宿主机上开机,整个过程就完成了。需要注意的时候的是,新老宿主机上的网卡对应关系,需要一致,否则虚拟机开机之后网络会不通。
热迁移是在虚拟机运行的过程中,在线将一台虚拟机从一台宿主机上迁移到另一台宿主机上,迁移过程对虚拟机基本没有影响。例如使用如下命令,将虚拟机vm_centos65x64迁移到宿主机192.168.1.21上:
[root@gcloud-qd-c1-169 ~]#/usr/bin/virsh --connect qemu:///system migrate --live --copy-storage-all --persistent--undefinesource vm_centos65x64 qemu+
虚拟机的热迁移技术,最初只在有共享存储的集群虚拟化场景中提供支持的,在CentOS6.5之后,开始支持对无共享存储环境下的虚拟机热迁移。两个场景虽然不同,但是原理基本上是一致的,只是无共享存储的场景下,先要迁移磁盘存储,然后迁移虚拟机内存,消耗的时间会长很多。
四、单机虚拟化应用场景
单机虚拟化的应用场景十分普遍,包括目前一些主流的公有云,也都采用单机虚拟机来为客户提供云资源。本节介绍三个最适合的应用场景加以说明。
(1)场景一,P2V,即物理机转化为虚拟机
在这种情况下,通常是因为原本的物理服务器年代久远,配件过保修期或者停产等原因,但上面仍然运行了一些系统,这些系统配置又非常复杂,几乎无法重新部署。这种情况下,最适合做P2V,将原本的物理服务器用虚拟机来替代,因为单机虚拟化非常的灵活,将P2V之后的虚拟机,运行在单机虚拟化上就非常合适。
(2)场景二,高性能应用
对于负载高的应用,使用单机虚拟化是非常合适的,因为单机虚拟化的宿主机配置定制型非常强,可以更具应用的需要,为宿主机添加配置,比如磁盘可以使用SSD来加强性能,网卡可以使用支持SR-IOV的网卡,CPU可以选用高主频多核的等等。总之单机虚拟化宿主机的可定制性强,决定了他能承载更大负载的虚拟机。
(3)场景三,定制化业务
这类应用一般业务的架构有关系,比如web类的应用,一般在业务层面都会考虑负载均衡,数据库主从,Memcached 主从等来保证业务的可用性,或者对于游戏来说,很多游戏都有分区分组的概念,每个区组由一组角色的服务器来提供服务。以上举的两类业务就非常适合使用单机虚拟化,因为服务器宕机是无法完全避免的,既然无法避免,就希望一旦出现宕机的情况,对的业务造成的影响尽可能小,从这个出发点看,可以将web类应用的主从应用放到两台单机宿主机上,这样即使一台宿主机宕机,业务至少可以保证不中断。对于游戏业务,可以将一个区组的服务器放在一台单机虚拟化宿主机上,宕机造成的最大危害就是影响一个区组的游戏,当然如果游戏架构内部存在冗余机制的话,宿主机宕机也是可以做到不影响游戏的。
五、单机虚拟化生产环境注意点
单机虚拟化在生产环境的使用已经非常普遍了,但是在使用单机虚拟化之前,还是需要做一些准备和故障恢复预案,本节介绍单机虚拟化生产环境的注意点,防患于未然,尽量避免一切可预见的故障,提高稳定性,可用性是最终的目的。
1.单机虚拟化的灾备
备份是一个老生常谈的话题,对于所有的线上业务,都必须做好备份和恢复的准备,在单机虚拟化的场景中,这点也非常重要。
首先需要区分单机虚拟化的备份和业务层面的备份,这是两个概念,虚拟化层面的备份可以保证虚拟机的可用性,但是虚拟机内部业务层面的数据一致性还是需要业务层面的备份来保障的。
提示:
特别值得一提的是数据库应用,需要注意,数据库一致性只能由数据库备份来保证。经过长期的实践发现,仅靠虚拟机的备份,恢复之后数据库内的数据有非常高的概率是不一致的。
对于虚拟机的备份,需要根据业务类型,业务时间段来做区分。一般来说,对于单机虚拟化,从业务分类来看,比如数据库类应用,那么备份的频率不需要很高,在业务最初部署完成测试通过之后,可以做一个备份,发生故障的时候,将业务层面的数据恢复回来,业务便能恢复。需要分时段进行备份的业务,比如web类应用,通常情况下web类应用产生的数据变化量很少,但是会定期会发布新的版本,这种情况下,可以在每一个新版本发布之前和发布之后,做两个备份,发布前的备份可以作为发布失败后的回滚,发布后的备份,可以做为故障发生时候用于恢复。在游戏业务中,GS这个角色的服务器也非常适合用这种备份方案。
除了备份策略,也需要介绍下备份如何做,对于单机虚拟化,通常情况下,每台虚拟机的硬盘在宿主机上对应的一个镜像文件,最简单的备份方案是虚拟机关机,将虚拟机硬盘文件复制一份,然后将文件备份其他机器上。这个方法操作最简单,如果业务可以接受停机的话,用这种方式备份是不错的选择,但是对于还有一些需要7*24小时不能停的业务,用上面这种方式就不可行了。当然kvm管理工具Libvirt已经提供了两种在线备份虚拟机的方案,分别是在线块拷贝和在线外部快照,在第21章都有详细介绍。
2.单机虚拟机的应急方案
应急方案主要包括故障定位及故障恢复。故障定位,一般来说,单机虚拟化的故障包含虚拟机故障和宿主机故障两大类,比如虚拟机故障,首先需要建立完整的虚拟机与宿主机的关系信息,通过虚拟机的ip,能很快找到对应的宿主机,然后再由宿主机连接到虚拟机的VNC(远程控制软件),查看虚拟机的运行状态,如果只是虚拟机系统层面的故障,处理方法就按照一般服务器故障处理,如果是虚拟机死机或者没有响应等问题,一般的处理方法是重启虚拟机。对于一台宿主机上多台虚拟机同时出问题的情况,那么就需要考虑问题是不是出在宿主机,或者宿主机网络。
故障恢复,对于一般的虚拟机故障,通常处理方法与一般的服务器故障一样,在虚拟机系统内部找原因,或者重启虚拟机。对于宿主机故障,如果是宿主机的CPU,内存,主板,电源等故障,一般采用更换部件来解决。
关于运维帮
运维帮是一个互联网技术分享平台
可长按上图关注
欢迎加QQ讨论群186356564
欢迎投稿,一起学习,一起玩耍
新技能get√,好工具get√,赶快转发,让更多小伙伴知道。
以上是关于单机虚拟化技术及生产环境实践的主要内容,如果未能解决你的问题,请参考以下文章