热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS7部署KVM虚拟化环境之一架构介绍

本文介绍了CentOS7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。

----本文修改整理自网络,非本人原创。

虚拟化介绍

虚拟化(Virtualization)是一种资源管理技术,将计算机的各种试题资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来。打破实体结构间的不可切割的障碍,使的用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

虚拟化技术中大多数人接触的最早且最多的应该就是虚拟机(Virtual Machine),它是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。所谓完整的计算机系统简单点解释就是一台含有CPU、内存、硬盘、显卡、网卡、光驱等设备的电脑,只是对于虚拟机来说这些设备都是通过软件模拟出来的。

全虚拟化和半虚拟化

全虚拟化(Full Virtualization)模拟出来的虚拟机中的操作系统是跟底层的硬件完全隔离的,虚拟机中的所有的硬件资源都是通过虚拟化软件基于硬件来模拟的,代表产品有VMware ESXIKVM

这样的好处就是每台虚拟机有一个完全独立和安全的运行环境,虚拟机中的操作系统也不需要做任何修改,并且易于迁移。在操作全虚拟化的虚拟机的时候,使用者并不知道这是一台虚拟机。

缺点就是由于虚拟机的资源全部都需要通过虚拟化软件来模拟,会损失一部分的性能。

半虚拟化(Para Virtualization的架构跟全虚拟化基本一样,但是为了提高性能和效率,需要修改虚拟机中的操作系统来集成一些虚拟化方面的代码,通过这种方法来减小虚拟化软件的负载。代表作有Microsoft的Hyper-VXEN

这样的好处就是虚拟化整体的性能会更好,因为修改后的虚拟机操作系统承载了部分虚拟化软件的工作,缺点就是由于要修改虚拟机的操作系统,用户是知道使用的环境是虚拟化环境,而且兼容性比较差,用户体验也比较麻烦(得去找集成过虚拟化代码的操作系统)。

Hypervisor介绍

Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

Hypervisor分类

原生型(Native or Bare-metal)又称裸机型,Hypervisor作为一个很薄的操作系统(操作系统也是软件,只不过它是一个比较特殊的软件)直接运行在硬件之上来控制硬件资源并管理虚拟机。比较熟知的有VMware的ESXi和Microsoft的Hyper-V等。

宿主型(Hosted)又称托管型,Hypervisor运行在传统的操作系统上,同样可模拟出一整套虚拟硬件平台。比较熟知的为VMware的Workstation和Oracle的Virtual Box等。

从性能角度来看,不论原生型还是宿主型都会有性能损耗,但宿主型比原生型的损耗更大,所以企业生产环境中基本都使用的是原生型Hypervisor,宿主型的Hypervisor一般都用到实验或测试环境中。

KVM介绍

KVM(Kernel-based Virtual Machine)是一种基于Linux x86硬件平台的开源全虚拟化解决方案。KVM需要CPU的虚拟化指令集支持,如Intel的Intel VT(vmx指令集)或AMD的AMD-V(svm指令集)。

KVM作为Hypervisor,主要涵盖有两个重要组成部分,一个是Linux内核的KVM模块,另外一个是提供硬件仿真的QEMU(Quick Emulator)。 另外为了KVM整个虚拟化环境能够易于管理,还需要Libvirtd服务和基于Libvirt开发出来的管理工具。

KVM虚拟化体系结构

KVM作为Hypervisor,主要涵盖有两个重要组成部分,一个是Linux内核的KVM模块,另外一个是提供硬件仿真的QEMU(Quick Emulator)。 另外为了KVM整个虚拟化环境能够易于管理,还需要Libvirtd服务和基于Libvirt开发出来的管理工具。

技术分享

KVM模块

严格意义上讲,KVM仅仅只是一个Linux模块,他的主要功能在提供物理CPU到虚拟CPU的一个映射,提供虚拟机的硬件加速来提升虚拟机的性能。

KVM模块本身没办法作为一个Hypervisor模拟出一个完整的虚拟机,并且我们也没办法直接对Linux内核进行操作,所以需要借助其他的软件来进行,QEMU就扮演着一个这样的角色。

QEMU

QEMU本身就是一个宿主型的Hypervisor,就算是没有KVM他一样也可以通过模拟来创建和管理虚拟机。但是上面也提到过宿主型的Hypervisor在性能上损耗很大,所以QEMU又借助了KVM的模块来提升虚拟化的整体性能。

Libvirt

Libvirt是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。Libvirt也支持多种虚拟化平台如KVM, Xen, ESX和QEMU等

Libvirtd

Libvirtd是运行的在KVM主机上的一个服务端守护进程,为KVM以及它的虚拟机提供本地和远程的管理功能,基于Libvirt开发出来的管理工具可通过Libvirtd服务来管理整个KVM环境。Libvirt就是一堆标准的库文件,给多种虚拟化平台提供一个统一的编程接口,相当于管理工具需要基于Libvirt的标准接口来进行开发,在开发完成后的工具可支持多种虚拟化平台。而Libvirtd是一个在Host主机上运行着的守护进程,在管理工具和KVM之间起到一个桥梁的作用,管理工具可通过Libvirtd服务来管理整个虚拟化环境。

Virsh

virsh就是基于Libvirt开发的一个命令行的KVM管理工具,可以使用直接模式(Direct Mode)或交互模式(Interactive Mode)来实现虚拟机的管理,如创建、删除、启动、关闭等。

Virsh-Manager

Virt-Manager同样也是一个KVM管理工具,不过它是基于图形界面的。

CentOS 7部署KVM虚拟化环境之一架构介绍


推荐阅读
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 本文深入探讨了线性代数中向量的线性关系,包括线性相关性和极大线性无关组的概念。通过分析线性方程组和向量组的秩,帮助读者理解这些概念在实际问题中的应用。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文详细介绍如何在 iOS 7 环境下申请苹果开发者账号,涵盖从访问开发者网站到最终激活账号的完整流程。包括选择个人或企业账号类型、付款方式及注意事项等。 ... [详细]
author-avatar
北人南漂记
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有