基础必学,挑灯夜战KVM虚拟化技术
前言:什么是虚拟化?
在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。
一般所指的虚拟化资源包括计算能力和数据存储。
由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术到系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。
一、虚拟化的概述
1.1、虚拟化产生的背景
美国环境保护EPA报告中曾经统计过一组数据,EPA研究服务器和数据中心的能源效率时发现,实际上服务器只有5%的时间在工作,其他时间一直处于休眠状态。
ps:软件资源是没有硬件资源的性能高(稳定和效率)的(相同功能)
1.2、虚拟化技术
通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在独立的空间内运行二互不影响,从而提高计算机的工作效率。
例:1、在一个操作系统中(win10)模拟多个操作系统(centos、win10、sure),同时每个操作系统可以跑不同的服务(Nginx+Tomcat),从而实现一台宿主机搭建一个集群(从整体)
2、通过软件、应用程序的方式,来实现物理硬件功能 。ensp( 以软件形式实现物理设备的功能 (二层交换机、三层路由器、三层交换机等))
1.3、虚拟化技术的发展
1.3.1雏形:
1961年 ,IBM709机器实现了分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每个时间片执行不同的工作,通过对这些时间片进行轮询,从而将一个CPU伪装成多个CPU
1972年,IBM正式将system370机的分时系统命名为虚拟机。
1990年,IBM推出的system390机支持逻辑分区(将一个CPU分为多份,相互独立,也就是逻辑分割)
Xen:2003年问世,是一个外部的hypervisor/VMM程序(虚拟机管理程序),能够独立宿主机和给多个客户机分配资源
KVM:2007年问世,现已内置在kernel内核中的
Xen:支持的虚拟化技术:全虚拟化,半虚拟化
KVM:支持的虚拟化技术:全虚拟化
1.3.2、虚拟化类型
全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。
半虚拟化:需要修改操作系统
直通:直接使用物理硬件资源(需要支持,还不完善)
1.3.3、特性
优势:
①集中化管理(远程管理、维护)
②提高硬件利用率(虚拟化特性)(物理资源利用率低-例如峰值,虚拟化解决了“空闲”容量)
③动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性)
④高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)
劣势:
①前期高额费用(初期的硬件支持)
②降低硬件利用率(特定场景-例如极度吃资源的应用不一定适合虚拟化)
③更大的错误影响面(本地物理机down机会导致虚拟机不可用,同时可能虚拟机中文件全部破坏)
④实施配置复杂、管理复杂(管理人员运维、排障困难)
⑤一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用)
⑥安全性(虚拟化技术自身的安全隐患)
二、KVM简介
2.1、广义KVM
KVM (Kernel-based vritual Machine)--基于内核的虚拟机
KVM是基于虚拟化扩展的x86硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-VT-x或AMD-V)
KVM内嵌于内核模块中,模拟处理器和内存以支持虚拟机运行
虚拟机被实现为常规的 Linux进程,由标准Linux调度程序进行调度;
虚拟机的每个虚拟CPU_被实现为一个常规的 Linux进程。这使得KMV能够使用Linux内核的已有功能 但KVM本身不执行任何模拟。需要客户空间程序(虚拟机)通过/dev/'kvm(此虚拟设备需要开起硬件辅助虚拟化才能看到)接口设置一个客户机虚拟服务器的地址空间, 并且由Qemu模拟I/o (ioctl)进行调度资源和维护管理
Libvirt: KVM的管理工具,除了可以管理KVwM这类vVwMM4,还可以管理Xen,VirtualBox,甚至openStack底层
Libvirt包含3个组件:后台daemon程序libvirtd、API库、命令行工具virsh
2.2、KVM原理
1、Guest:客户机系统,包括CPU(vcpu)、内存、驱动(Console、网卡、I/O、设备驱动等),被kvm置于一种受限制的CPU模式下运行
2、KVM内核模块模拟处理器和内存以支持虚拟机运行
3、Qemu主要处理I/o以及为客户提供一个用户空间/dev/kvm 工具libvirt 来进行虚拟机管理
ioctl(定义)专用于设备输入输出操作的系统调用 l
ibvirt: KVM管理工具
简单理解:
- KVM驱动提供处理器、内存的虚拟化,以及客户机I/o的拦截(拦截敏感指令),guest的I/o被拦截后,交由Qemu处理
- Qemu利用接口libkvm调用((ioctl)虚拟机设备接口/dev/kvm来分配资源、管理、维护虚拟机
2.3、KVM虚拟化架构/三种模式
1、客户模式(guestos) : VM中的os为Guestos 客户机在操作系统中运行的模式,客户机分为内核模式和用户模式。
2、用户模式: 为用户提供虚拟机管理的用户空间工具以及代表用户执行I/o,gemu工作在此模式下(Qgemu的主要功能)
3、linux内核模式 模拟CPU、内存,实现客户模式切换,处理从客户模式的退出,KVM即运行在此模式下
2.4、KVM工作流程
用户模式的Qemu 利用接口libkvm 通过 ioctl系统调用进入内核模式。
KW驱动为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAU ·NCH 指令进入客户模式,装载Guest OS 并运行。
Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常.
内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式。如果需要Ⅰ/O则进入到用户模式则由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式
2.5、虚拟化前与虚拟化后的对比
虚拟化前:
- 每台主机拥有一个操作系统
- 软硬件紧密结合
- 在同一个主机上运行多个应用程序常会产生冲突
- 系统资源利用率低(例如:5%)
- 硬件成本高昂并且不够灵活.
虚拟化后:
- 打破了操作系统和硬件的互相依赖
- 通过封装到虚拟机技术,管理操作系统和应用程序为单一的个体
- 强大的安全和故障隔离
- 虚拟机时独立于硬件的,他们可以再任何硬件上运行
对比:
操作系统方面(虚拟化前):
LAMP架构中(以一台主机实现)
Linux+Apache+MySQL+PHP
其中Apache与MySQL资源是共享的
如果架构要求服务间的安全性隔离比较高的话,Apache的页面和MySQL数据库的目录一定是不能相互碰面,如果Apache漏洞暴露出来,攻击者就可以Apache的进程访问到MySQL中的数据,这种就是严重的安全隐患
而想解决这种潜在危险,可以通过实现内核级别的隔离(使用虚拟化技术)
软硬件结合:
因为硬件和操作系统不兼容或者不支持,导致有些软、硬件功能无法正常使用(也是最难的问题)使用虚拟化,软硬件之间是会通过虚拟化层驱动进行隔离(调配)的, 只要虚拟化层可以识别软/硬件应用,就可以将软硬件结合使用
在同一个主机上运行多个应用程序通常会产生冲突
Apache和Nginx定位相同(80端口)
只能使用反向代理的方式进行分离,而同时如果在同一台机器使用这种方式,Apache和Nginx中重要的数据文件如果同时被泄露出去....而虚拟化可以隔离服务
三、部署KVM
3.1、实验准备
服务器名 | IP地址 |
KVM | 192.168.48.128 |
添加一块足够大的硬盘资源
3.2、开始配置
3.2.1、修改主机名
systemctl stop firewalld
hostnamectl set-hostname kvm
setenforce 0
vim /etc/resolv.conf
nameserver 114.114.114.114
3.2.2、挂载光盘
mkdir /mount
vim /etc/fstab
/dev/cdrom /mount iso9660 defaults 0 0
mount -a
df -hT
3.2.3、设置DNS反向解析
vim /etc/ssh/sshd_config
定位到#UseDNS yes 取消注释改为no
UseDNS no
3.2.4、配置本地yum
cd /etc/yum.repos.d/
mkdir bak
mv CentOS-* bak
vim local.repo
[local]
name=kvm
baseurl=file:///mount ##
gpgcheck=0
enable=1
yum clean all
yum makecache
3.3、安装KVM
3.3.1、安装组件
yum groupinstall -y "GNOME Desktop" ##安装GNOME桌面环境,若装了图形界面可以不需要安装
yum -y install qemu-kvm ##安装KVM模块
yum -y install qemu-kvm-tools ##安装KVM调试工具,可不安装
yum -y install virt-install ##构建虚拟机的命令行工具
yum -y install qemu-img ##qemu组件,创建磁盘、启动虚拟机等
yum -y install bridge-utils ##网络支持工具
yum -y install libvirt ##虚拟机管理工具
yum -y install virt-manager ##图形界面管理虚拟机
cat /proc/cpuinfo | grep vmx ##检测cpu是否支持虚拟化
lsmod | grep kvm ##查看kvm模块是否已安装;lsmod:显示已载入的系统模块
3.3.2、设置开启启动界面的显示模式
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
3.4、设置kvm网络(桥接模式)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none //修改为none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.48.128
#NETMASK=255.255.255.0
#GATEWAY=192.168.48.2
BRIDGE=br0 //设置为桥接模式创建、编辑桥接网卡
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6PEERDNS=yes
IPV6PEERROUTES=yes
IPV6_ADDR_GEN_MODE=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.48.128
NETMASK=255.255.255.0
GATEWAY=192.168.48.128
3.5、KVM部署与管理
3.5.1、创建KVM存储和镜像数据的目录、上传centos7 镜像
mkdir -p /data_kvm/iso ##创建KVM存储镜像的目录
mkdir -p /data_kvm/store ##创建存储池的目录
systemctl restart network ##重启服务
这时因为网卡文件被更改,无法连接xshell,需要虚拟机操作
3.5.2、使用虚拟机系统管理器管理虚拟机
virt-manager
创建存储池klj_store
双击 QEMU/KVM
创建存储卷store_01
创建存储池store_01默认的格式是qcow2,虚拟化的格式,支持KVM虚拟化的格式,也是支持qemu组件的格式
创建镜像池lc_iso
创建虚拟机
QEMU/KVM右击新建
后面就跟虚拟机安装是一样的步骤。
基础必学,挑灯夜战KVM虚拟化技术相关推荐
- KVM虚拟化技术(三)之克隆虚拟机
大家好,我是邵奈一,一个不务正业的程序猿.正儿八经的斜杠青年. 1.世人称我为:被代码耽误的诗人.没天赋的书法家.五音不全的歌手.专业跑龙套演员.不合格的运动员- 2.这几年,我整理了很多IT技术相关 ...
- kvm虚拟化技术下虚拟机磁盘的数据保护
摘要:kvm虚拟化技术下虚拟机的磁盘空间中数据的保护与恢复,考虑kvm的服务器级别的可用性. 1.kvm技术简单介绍 kvm虚拟化技术由几部分构成,kvm内核模块(cpu和内存的虚拟化及管理), ...
- KVM 虚拟化技术以及 KVM 和云计算的关系
KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(如 intel VT 或 AMD-V),是 Linux 下的全虚拟化解决方案.K ...
- Linux KVM 虚拟化技术
目录 KVM 介绍 一.KVM虚拟化 二.虚拟化技术 三.虚拟化技术发展 四.虚拟化类型 五.虚拟化特性 优势 劣势 案例 VMM主要功能 六.KVM架构及原理 KVM简介 KVM原理 KVM虚拟化架 ...
- 华为HCIE 数通认证 基础必学GVRP协议是什么
华为HCIE 数通认证 基础必学GVRP协议是什么GVRP VLAN (GARP VLAN Registration Protocol,GARP VLAN注册协议)注册协议是一种通用属性注册协议的应用 ...
- KVM虚拟化技术的-NUMA技术和应用
KVM虚拟化技术的-NUMA技术和应用 NUMA技术是解决多CPU共同工作的技术方案,多CPU共同工作主要有3中架构:SMP:Symmetric Multi-Processor),非统一存储访问结构( ...
- KVM 虚拟化技术之Hypervisor的实现
KVM 虚拟化技术之Hypervisor的实现 VMM(VirtualMachineMonitor)对物理资源的虚拟可以划分为三个部分: CPU虚拟化.内存虚拟化和I/O设备虚拟化,其中以CPU的虚拟 ...
- 云计算运营—03 KVM虚拟化技术方案介绍
KVM虚拟化技术方案介绍 1.背景介绍 KVM(Kernel-based Virtual Machine) 开源全虚拟化方案 支持体系结构 x86(32位,64位).IA64.PowerPC.S390 ...
- KVM 虚拟化技术 | 虚拟化平台部署
KVM 虚拟化技术 一.虚拟化技术 1.1 概述 1.2 类型 ① 全虚拟化 ② 半虚拟化 ③ 直通 1.3 特点 二.KVM 2.1 概述 2.2 原理 2.3 虚拟化架构 2.4 工作流程 三.部 ...
最新文章
- LVM-HOWTO/学习笔记(二)
- 【Matlab与线性代数】Matlab中对数组元素引用方法总结
- OpenCV delaunay三角剖分和voronoi镶嵌的实例(附完整代码)
- shell结合expect写的批量scp脚本工具
- Cisco/华为 远程管理设备telnet的N种设置方法
- ajax修改属性后如何遍历,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)...
- oracle 退出循环 使变量清空,[转]Oracle 清除incident和trace -- ADRCI用法
- 数字盲打怎么练_键盘上的数字键怎么练才能盲打?
- 桌面计算机图标名字变了,电脑桌面图标突然变成未知图标怎么回事
- 观察者模式及其应用场景
- React 引用 ant 组件 使用 react-custom-scrollbars美化(隐藏)滚动条
- 测试开发实习日记(DAY4)
- opengGL实战——太阳系三维场景动画搭建
- directx安装后找不到_如何下载,安装,更新到最新的DirectX
- Python批量检测域名是否被注册
- Linux~linux无法解析域名
- SD卡CF卡U盘硬盘等磁盘属性显示为0字节怎么恢复数据
- 预测混合模式发展前景计算机,基于混合模式的网络流量分类优化-计算机技术专业论文.docx...
- 利用迭代公式求平方根。
- mes系统的主要功能是什么?看完这篇你就懂了