《深度实践KVM:核心技术、管理运维、性能优化与项目实施》在中国运维领域将具有“划时代”的重要意义:第一,作者团队是国内的KVM技术专家、虚拟化技术专家和运维专家,是国内第一批研究并将KVM应用到大规模生产环境的人;第二,书中的所有知识、经验和案例都来自金山、盛大等国内一线互联网公司,这些公司的业务规模巨大,生产环境复杂;第三,从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案;第四,本书内容得到了来自金山、盛大、阿里、猎豹移动、触控科技、英特尔、浪潮等大型IT企业的数十位VP和运维专家的高度认可,并联袂推荐。
《深度实践KVM:核心技术、管理运维、性能优化与项目实施》共20章,分为五篇:
第一篇(1~8章):虚拟化技术选型及KVM虚拟机技术,详细介绍了虚拟化技术的选型,KVM的CPU和内存虚拟化技术、磁盘虚拟化技术、网络虚拟化技术以及这些技术的生产环境应用场景,物理机转虚拟机,KVM的桌面虚拟化实践。
第二篇(9~10章)开源分布式文件系统在KVM中的应用,详细讲解了常见的开源分布式文件系统在KVM环境中的使用,重点讲解比较热的Ceph文件系统,包括配置、使用及常见故障处理。
第三篇(11~13章):开源的虚拟化管理平台在生产环境的实践经验,重点讲解了OpenStack、OpenNebula在生产环境的实践与故障处理,还有oVirt、CloudStack、Convirt、WebVirtMgr等几个管理平台的架构和理念。
第四篇(14~21章):KVM虚拟化项目的实施及经验系统讲解了业务性能评估、压力模型建立、虚拟机性能测试、宿主机基准测试、业务测试环境测试验证、单机虚拟化技术、集群虚拟化技术、虚拟化正式环境上线等一套完整的虚拟化项目实施过程。
第五篇(第22章)KVM虚拟化的典型案例讲解了KVM虚拟化过程中比较典型的一些案例,针对案例中的问题给出了解决思路和方法,方便读者在碰到类似的问题时找到解决方案。
国内KVM专家和运维专家多年大规模生产环境实践经验总结,国内数十位运维专家鼎力支持和推荐
从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案
目前,国内新一代的公有云底层采用的都是KVM,据笔者了解,国内原来一些采用Xen的公有云也逐步在向KVM迁移。许多企业的私有云项目招标中,已经明确要求使用KVM。在全球范围内,OpenStack就是云建设的标准,而当前OpenStack底层默认就是KVM。经过几年的快速发展,KVM技术已经非常成熟稳定,在任何Linux发行版中,KVM都是标配。虚拟化已经成为一项必备的技术技能,而学习Linux就必须学习KVM。
为什么写这本书
2009年,当虚拟化在互联网业内鲜有使用时,我们虚拟化小组在国内已经在生产环境率先开始KVM虚拟化技术的探索。通过实施虚拟化,我们几年内为公司节省了上亿元的运营成本,帮助公司多个处于生命周期末的游戏项目实现扭亏为盈。
当时,KVM还是一个小众产品,国内文档较少,我们只能通过钻研国外的英文资料甚至阅读源代码来学习。RedHat是KVM的重要支持者,因此与其公司RHEL系统同源的CentOS成为了研究KVM的重要资料。从当时刚发布的CentOS 5.5版本开始,我们一路追随CentOS系统的升级,每有一个版本发布,我们都要测试评估新的KVM虚拟化特性,然后逐步在生产环境部署,这样的工作方法一直持续到最新的CentOS 6.6及CentOS 7.1。这也是我们小组人员快速成长的一个阶段,我们对KVM技术的热爱一直保持了下来,我们在周围普及KVM技术的热情一直没有改变。
时至今日,KVM经过几年的快速发展,已经成为了最炙手可热的虚拟化引擎,国内新一代的公有云全部选择了KVM。而与KVM如火如荼的发展形成鲜明对比的是中文资料依然匮乏,尤其是介绍实践经验的资料。在我们周围和各种技术论坛上,经常碰到一些运维工程师,在实施一个KVM虚拟化项目时,不知道从哪里开始;也碰到对KVM技术感兴趣的运维人员在重复问一些相近的问题。于是,我们几个人萌生了一个想法,为什么不把我们的KVM项目运维实践经验一一记录下来,分享给大家。与此同时,我们也犹豫过,因为有许多问题我们也并未完全理解。但是,经过认真思考后的我们认为,即便在这种情况下,我们几年积累下来的实践经验对于想要了解和学习KVM虚拟化技术的工程师来说也是非常有意义的,毕竟实践更能检验真理。回想当初自己遇到问题的时候,我们也得到了一些论坛朋友、圈内专家的热心解答。互联网精神崇尚开放,这更加坚定了我们创作此书的决心。我们愿意将自己对KVM技术的理解和认识,以及在KVM虚拟化中解决问题的思路和方法分享出来,让大家少走一些我们走过的弯路,同时能够与所有运维工程师共同学习提升!
本书特色
本书是KVM一线项目运维实践经验总结,在KVM CPU、内存、网络、磁盘方面拥有丰富的技术积累,在KVM虚拟化开源分布式与商业存储、KVM桌面虚拟化方面有的大量实践,我们还会指出踩过的“技术坑”,这些都是弥足珍贵的经验。
本书对Linux系统和虚拟化有一定了解,但是对KVM不了解或者是了解不多,而准备在测试或者生产环境部署KVM虚拟化的读者,本书会介绍虚拟化项目如何评估、如何逐步实施,并介绍相关的技术与运维实践,希望对读者的生产环境虚拟化实施有所帮助。
对于正在做KVM虚拟化日常运维的读者,本书有相应的技术、实践经验、问题案例分享,便于这些读者碰到相似的问题时查询或者找到解决思路。
本书面向的读者
KVM已经是Linux系统的标配,是Linux的必备技能,希望本书对广大Linux从业者能够有所帮助。
本书适用于以下读者:
Linux系统工程师。
从事Linux虚拟化开发的程序员。
虚拟化工程师。
IDC机房管理员。
有志于从事虚拟化的在校大学生。
如何阅读本书
本书分为五篇。
第一篇(第1~8章),介绍虚拟化选型及KVM虚拟机技术。实施虚拟化可带给我们哪些收益,虚拟化引擎选择,KVM虚拟化相关的CPU、内存、磁盘、网络技术及生产环境应用场景,物理机转虚拟机,KVM桌面虚拟化实践。
第二篇(第9~10章),介绍开源分布式文件系统在KVM虚拟化的应用。介绍一些常见的开源分布式文件系统如何在KVM环境使用,重点详细介绍最近一两年比较热的Ceph文件系统,包括配置、使用和常见故障处理。
第三篇(第11~13章),介绍开源的虚拟化管理平台在生产环境的实践经验。重点介绍OpenStack、OpenNebula在生产环境的实践及故障处理,还有oVirt、CloudStack、Convirt、WebVirtMgr几个管理平台的架构和理念。
第四篇(第14~21章),介绍KVM虚拟化项目实施经验,涵盖业务性能评估、压力模型建立、虚拟机性能测试、宿主机基准测试、业务测试环境测试验证、单机虚拟化技术、集群虚拟化技术、虚拟化正式环境上线等一套完整的虚拟化项目实施过程。
第五篇(第22章),介绍KVM虚拟化过程中比较典型的一些案例。主要介绍一些在生产环境中的案例及解决思路、方法,方便读者碰到类似的问题时找到解决方案。
根据本书内容,我们给出如下阅读建议:
如果是刚准备开始实施虚拟化的读者,请从头开始阅读本书。
如果对分布式文件系统在虚拟化中的应用感兴趣的读者,可以阅读第二篇的内容。
如果对虚拟化管理平台使用感兴趣的读者,可以阅读第三篇的内容。
如果是对虚拟化技术有一定了解,但是对不知道如何实施虚拟化的读者,建议阅读第四篇的内容。
如果在虚拟化实施碰到问题,需要寻找解决方法的读者,可以阅读第五篇的内容。
资源和勘误
由于时间紧张,笔者水平有限,书中难免有错误和不足之处,笔者运营着一个微信订阅号,名字为“KVM虚拟化实践”,订阅号为“kvm_virt”二维码为:
欢迎读者扫描关注,“KVM虚拟化实践”会定时发布笔者对KVM虚拟化新的认识和经验总结。也欢迎读者通过这个微信订阅号和笔者交互,书中的勘误和更新也会通过这个订阅号发布。
致谢
感谢盛大游戏高级总监陈桂新,盛大游戏副总监、G云COO冯祯旺对我们的支持,我们四个人都曾经或者现在在盛大游戏虚拟化小组工作,桂总、冯总一路上支持我们,坚定地支持我们沿着KVM的方向前进,即使中间碰到多次挫折。回首看,我们坚持了下来,也很高兴我们这些年的成果终于开花结果,孵化出了G云,一款专门针对游戏行业物理机和云主机的混合云。
感谢金山西山居运维总监赫宝生对本书写作的鼓励和支持。感谢金山西山居运维架构师刘宇对本书的帮助和建议。
感谢曾经在盛大游戏虚拟化小组工作过的刘晓光、秦洁、杨树林,感谢现在还在盛大游戏虚拟化小组工作的夏学峰、闫强,这本书也是我们所有人的经验总结。
感谢盛大游戏网络技术负责人、G云网络架构师苏永华,金山西山居资深网络工程师李正奇在网络方面的支持和帮助。
感谢金山西山居资深系统工程师、Zabbix权威专家薛群在宿主机监控方面的帮助。
特别感谢金山西山居高级系统工程师赵斌,提供了部分虚拟化生产环境实践案例及测试结果。
感谢盛大游戏资深工程师杨帆、季青、武文对我们在服务器知识方面的支持和帮助。
感谢国内顶尖的数据库专家叶金荣在本书成书过程中的支持和协助。
感谢机械出版社的杨福川和高婧雅,福川兄出版了一系列互联网技术图书,在认识福川兄之前,我们已经购买了多本福川兄出版的书,和福川兄的合作是我们的梦想。相信随着时间的推移,会有更多的人认识到福川兄对中国互联网技术巨大的贡献。高婧雅编辑的专业、细致、认真、耐心令我们非常敬佩,和高婧雅合作的大半年内,我们受益匪浅,很感谢、很庆幸有机会和杨兄、高编辑合作。
致我们的家人
感谢我的舅舅、舅妈、表哥、表姐,你们对我的人生观影响很大;感谢我的父亲、母亲,是你们一直在默默支持我;感谢我妻子和女儿一直以来的理解和支持,你们是我的动力。
——肖力,2015年6月
感谢父母辛苦的培养,没有你们就没有今天的我。感谢老婆在我一无所有的时候默默陪在我的身边,还有可爱的儿子,你们是我一直前进的动力。
——汪爱伟,2015年6月
感谢生我养我的父亲母亲,这些年,你们辛苦了,儿子长大了,你们却老了。感谢所有一路和我走过来的人,你们的支持和信任,给了我前进的勇气和力量。感谢相信我,愿意和我一路走下去的人,无论明天怎样,我都希望一路有你。
——杨俊俊,2015年6月
参与这本书的写作对我来说非常荣幸,首先要感谢肖力等前辈传授经验并耐心支持,其次还要感谢家人对我业余时间不能陪伴的理解!
——赵德禄,2015年6月
肖力,资深运维专家,拥有15年运维经验,就职于金山西山居,担任系统运维经理,曾就职于盛大游戏,在运维圈有极大的影响力。国内最顶尖的KVM专家之一,从2009年开始研究KVM技术,是国内较早在生产环境大规模实践KVM的人之一,积累了非常丰富的经验。
热衷于技术传播,一直在无私地为运维领域的发展做贡献,维护有微信订阅号“KVM虚拟化实践”,分享了大量KVM和运维领域的干货内容,同时还运营着多个运维相关的微信群。此外,他还是华章“运维前线”系列图书的总策划,无偿地在组织大量愿意无私分享经验的运维工程师们来参与写作。
汪爱伟,资深运维专家,安居客资深系统工程师,曾就职于阿里云、UCloud、盛大游戏等知名互联网公司。对KVM技术有深入的研究,在虚拟化集群方面有丰富的生产环境经验,擅长KVM虚拟化项目的实施和运维。
杨俊俊,资深虚拟化技术专家和运维工程师,就职于盛大,担任盛大游戏公有云“G云”运维负责人和Intel联合实验室技术负责人,曾任职51。com,精通虚拟化项目的评估与实施,精通开源分布式文件系统在生产环境的运维与实践。
赵德禄,资深运维工程师和虚拟化工程师,就职于携程,担任高级云平台运维工程师,曾就职于盛大游戏,担任资深虚拟化工程师。精通KVM、OpenStack、OpenvSwitch、桌面虚拟化等技术,在生产环境下的实践经验非常丰富。
本书赞誉
前 言
第一篇 KVM技术详解与实践
第1章 企业虚拟化选型与KVM介绍
1.1 KVM的前世今生
1.2 KVM与常用企业级虚拟化产品的PK
1.3 判断企业是否适合使用KVM的标准
1.4 本章小结
第2章 开始自己的第一台虚拟机
2.1 服务器BIOS设置
2.2 宿主机CentOS 6.5、CentOS 7系统安装与配置技巧
2.3 第一台虚拟机安装
2.4 本章小结
第3章 CPU、内存虚拟化技术与应用场景
3.1 NUMA技术与应用
3.1.1 KVM虚拟机NUMA调优
3.1.2 CPU绑定操作方法
3.2 CPU热添加与应用
3.3 CPU host-passthrough 技术与应用
3.4 CPU Nested 技术与配置方法
3.5 KSM技术与应用
3.6 内存气球技术详解与应用
3.7 内存限制技术与应用
3.8 巨型页内存技术与应用
3.9 本章小结
第4章 网络虚拟化技术与应用场景
4.1 半虚拟化网卡技术详解
4.1.1 半虚拟化网卡的配置
4.1.2 全虚拟化网卡、半虚拟化网卡性能比较
4.1.3 全虚拟化网卡、半虚拟化网卡的应用场景
4.2 MacVTap和vhost-net技术原理与应用
4.2.1 MacVTap技术与应用
4.2.2 vhost_net技术
4.3 网卡的中断与多队列
4.4 网卡PCI Passthrough技术
4.5 SR-IVO虚拟化技术
4.6 虚拟化软件交换机Open vSwitch的安装与配置
4.6.1 Open vSwitch安装
4.6.2 Open vSwitch典型配置
4.7 多网卡绑定与建桥
4.8 本章小结
第5章 KVM磁盘虚拟化技术与应用场景
5.1 磁盘虚拟化方式性能比较与应用场景
5.1.1 QEMU磁盘虚拟化方式概述
5.1.2 IDE与Virtio性能比较测试
5.2 Virtio磁盘缓存方式详解、性能比较与应用场景
5.2.1 磁盘缓存详解
5.2.2 缓存方式的性能比较测试
5.2.3 缓存方式的应用场景
5.3 磁盘镜像格式
5.3.1 QEMU支持的磁盘镜像格式
5.3.2 裸设备使用
5.3.3 KVM虚拟机镜像管理利器guestfish
5.3.4 raw、qcow2、裸盘、lvm性能比较
5.3.5 磁盘镜像格式的应用场景
5.4 文件系统块对齐
5.4.1 什么是块对齐
5.4.2 块对齐与块不对齐性能比较
5.4.3 生产环境如何配置块对齐
5.5 SSD在KVM虚拟化中的使用实践
5.5.1 SSD原理与写放大
5.5.2 SSD在KVM中的使用
5.5.3 Flachcache配置与性能测试
5.5.4 DM-cache配置
5.5.5 LVM cache配置与性能测试
5.5.6 生产环境中SSD使用要点
5.6 本章小结
第6章 KVM虚拟机的资源限制
6.1 哪些场景要做虚拟机的资源限制
6.2 使用CGroups
6.3 KVM虚拟机CPU资源限制配置
6.4 KVM虚拟机网络资源限制
6.5 KVM虚拟机磁盘资源限制
6.6 本章小结
第7章 物理机转虚拟机实践
7.1 哪些应用场景适合做物理机转虚拟机
7.2 P2V的技术实施方案
7.3 Windows系统物理机转虚拟机的操作方法
7.3.1 WinPE的制作方法
7.3.2 Windows系统P2V操作方法
7.4 Linux物理服务器转换虚拟机操作
7.5 使用virt-p2v工具进行P2V转换
7.6 P2V经验总结
7.7 关于V2V
7.8 本章小结
第8章 KVM桌面虚拟化实践
8.1 桌面虚拟化简介及Spice协议
8.2 桌面虚拟化实践经验
8.3 本章小结
第二篇 分布式文件系统
第9章 几种常见开源文件系统在KVM中的应用
9.1 演示环境基础配置
9.2 DRBD在KVM中的应用
9.2.1 DRBD介绍
9.2.2 DRBD搭建方法及在KVM中的应用
9.2.3 DRBD在KVM虚拟化中的优化方案
9.3 GlusterFS在KVM虚拟化中的应用
9.3.1 GlusterFS介绍
9.3.2 GlusterFS集群搭建与使用
9.3.3 GlusterFS在KVM虚拟化中的应用
9.3.4 GlusterFS在KVM虚拟化中的优化方案
9.4 Sheepdog在KVM中的应用
9.4.1 Sheepdog介绍
9.4.2 Sheepdog搭建方法及在KVM中的应用
9.5 MooseFS在KVM中的应用
9.5.1 MooseFS介绍
9.5.2 MFS搭建方法及在KVM虚拟化中的应用
9.6 本章小结
第10章 Ceph在KVM虚拟化中的应用与故障处理
10.1 Ceph简介
10.2 Ceph部署方法及在KVM中的应用
10.2.1 使用ceph-deploy工具部署Ceph
10.2.2 挂载CephFS
10.2.3 通过Librbd方式使用Ceph RBD
10.2.4 使用内核方式挂载并使用Ceph RBD
10.3 CRUSH算法介绍及调优方法
10.3.1 CRUSH算法介绍
10.3.2 CRUSH算法调优方法
10.4 多角度评估Ceph在KVM虚拟化环境中的应用
10.5 Ceph生产环境搭建案例
10.5.1 使用CephFS集中备份虚拟机
10.5.2 使用Librbd将虚拟机运行在Ceph RBD
10.5.3 在CephFS上创建qcow2文件作为云硬盘
10.6 Ceph常见故障处理
10.6.1 Ceph集群监控状态检查
10.6.2 Ceph常见错误提示的含义与处理方法
10.7 本章小结
第三篇 KVM虚拟化管理平台
第11章 利用OpenStack管理KVM
11.1 OpenStack搭建
11.1.1 OpenStack简介
11.1.2 控制节点的安装
11.1.3 计算节点的安装
11.2 OpenStack实用技巧
11.2.1 RabbitMQ Cluster搭建
11.2.2 利用Haproxy和Keepalived实现控制节点高可用
11.2.3 冷迁移虚拟机的方法
11.3 本章小结
第12章 利用OpenNebula管理KVM
12.1 OpenNebula架构
12.1.1 OpenNebula架构介绍
12.1.2 OpenNebula组件介绍
12.2 在KVM中使用OpenNebula
12.2.1 在CentOS 6.5上快速搭建OpenNebula
12.2.2 使用OpenNebula创建第一台KVM虚拟机
12.2.3 使虚拟机硬盘创建在宿主机本地硬盘上
12.3 OpenNebula常见故障处理
12.4 本章小结
第13章 其他管理平台介绍
13.1 ConVirt管理平台介绍
13.1.1 ConVirt的理念
13.1.2 ConVirt的架构
13.2 CloudStack管理平台介绍
13.3 oVirt管理平台介绍
13.4 WebVirtMgr管理平台介绍
13.5 如何选择管理平台
13.6 本章小结
第四篇 KVM虚拟化项目实施
第14章 业务性能评估与压力模型建立
14.1 Linux 系统性能数据采集原则与方法
14.2 Linux 系统压力模型建立
14.3 Windows系统性能数据采集原则与方法
14.4 Windows 系统压力模型建立
14.5 本章小结
第15章 宿主机选型与基础性能测试
15.1 宿主机CPU选型原则
15.2 宿主机内存选型注意事项
15.3 宿主机硬盘选型
15.4 RAID卡选型
15.5 服务器网卡选型
15.6 宿主机性能基准测试实践
15.7 本章小结
第16章 虚拟机镜像制作、配置与测试
16.1 Windows虚拟机制作方法
16.1.1 Windows镜像制作
16.1.2 Windows虚拟机sysprep初始化封装
16.2 Linux镜像制作方法
16.2.1 RHEL/CentOS镜像制作方法
16.2.2 Ubuntu、Debian虚拟机配置注意点
16.3 虚拟机自动配置IP的实现办法
16.3.1 通过DHCP给虚拟机配置IP
16.3.2 通过Libvirt实现虚拟机自动配置IP
16.3.3 笔者生产环境虚拟机IP自动配置的方法
16.4 虚拟机镜像测试
16.5 本章小结
第17章 单机虚拟化技术与生产环境实践
17.1 单机虚拟化技术与应用场景
17.1.1 单机虚拟化的优势和劣势
17.1.2 单机虚拟化技术
17.1.3 单机虚拟化应用场景
17.2 单机虚拟化生产环境注意点
17.2.1 单机虚拟化灾备与应急方案
17.2.2 单机虚拟化生产环境部署实践
17.3 本章小结
第18章 KVM虚拟化集群技术与应用场景
18.1 虚拟化集群设计思路与架构
18.2 虚拟化集群的实施流程与技术方案
18.3 虚拟化集群搭建
18.3.1 计算节点配置与管理
18.3.2 网络设计与配置
18.3.3 虚拟机迁移管理
18.3.4 虚拟化集群的备份与恢复
18.4 Dell EqualLogic存储的管理实践经验
18.5 本章小结
第19章 业务迁移到虚拟化环境流程
19.1 性能评估与测试环境测试
19.2 上线前的检查工作
19.3 小规模部署及逐步切换到虚拟化环境
19.4 本章小结
第20章 宿主机自动化运维管理
20.1 Puppet简介与安装部署
20.2 利用Puppet管理宿主机的运维架构设计
20.3 利用Puppet配置宿主机初始化操作
20.4 利用Puppet管理宿主机配置与更新
20.5 利用Puppet推送宿主机的非一致性配置
20.6 本章小结
第21章 虚拟化监控、报警与应急响应方案
21.1 虚拟化监控内容
21.1.1 宿主机CPU监控要点
21.1.2 宿主机内存监控注意点
21.1.3 宿主机网络监控注意点
21.1.4 宿主机磁盘监控注意点
21.1.5 宿主机层面监控虚拟机的方法
21.2 监控软件Cacti、Zabbix
21.2.1 用Cacti监控宿主机
21.2.2 用Zabbix监控宿主机
21.3 应急方案
21.3.1 应急方案制定注意要点
21.3.2 单机虚拟化应急方案
21.3.3 集群虚拟化应急方案
21.4 本章小结
第五篇 KVM虚拟化典型案例
第22章 生产环境问题案例与分析
22.1 游戏在虚拟机上非常慢的案例
22.2 虚拟机流量过高引起网络风暴的案例一
22.3 虚拟机流量过高引起网络风暴的案例二
22.4 其他生产环境问题案例
22.4.1 共享存储集群虚拟机迁移故障案例
22.4.2 宿主机异常关机后虚拟机无法启动案例
22.4.3 宿主机使用CentOS 5.6系统问题案例
22.4.4 Windows虚拟机网络闪断、不通问题案例
22.4.5 Windows 7虚拟机只能使用2个CPU案例
22.4.6 生产环境非常奇怪的一个案例
22.4.7 U盘在虚拟机上挂载问题案例
22.4.8 HP ILO4固件Bug引起宿主机重启案例
22.4.9 一次机房断电引起的问题案例
22.4.10 CPU绑定问题案例
22.4.11 生产环境存储故障导致50个虚拟机丢失案例
22.4.12 生产环境Ubuntu虚拟机故障问题案例
22.5 本章小结
附录 笔者推荐的KVM学习资料