1. 虚拟化基础概念

01. 什么是虚拟化?

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

02. 为什么要用虚拟化?

提高计算机资源的利用率和程序运行环境的安全隔离,还可以有效限制程序的资源占用

优势:

1.降低运营成本

服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。

  

2.提高应用兼容性

  服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。

  

3.加速应用部署

  采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。

  

4.提高服务可用性

  用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。

  

5.提升资源利用率

  通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。

  

6.动态调度资源

  在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。

  

7.降低能源消耗

  通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。

03. 虚拟化在企业中的应用场景?

场景1:多版本操作系统共存,小公司经常会出现的一种比较尴尬的问题,只有一台服务器,非要同时运行windows和Linux,只有虚拟化才能完美解决.

场景2:机房迁移,没有虚拟化之前,迁移非常痛苦,物理机搬迁中途损伤,新机房很难复原旧环境,物理机老化可能再也开不了机,这些都是问题,有了虚拟化之后,搬迁变得简单,只需拷贝虚拟机的文件即可

场景3:相同业务部署,在没有虚拟化之前,部署业务,每次都是从安装系统开始,一步一步安装软件,效率非常低!有了虚拟化,只需克隆模板机即可

场景4:软件发布体验,有的软件安装特别繁琐,导致很多普通用户都无法安装成功,为了让这部分用户能体验到软件的功能,可以制作一个虚拟机模板,让用户直接使用体验,例如zabbix就有现成的虚拟机模板

04. 虚拟化软件介绍

Xen (纯软件模拟)  

Xen是一个开放源代码虚拟机监视器,由XenProject开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。    

在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改("移植")以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。   

 软件纯模拟全虚拟化软件,特别慢!

QEMU  (需要一个专门的内核)

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的模拟处理器的自由软件。它与Bochs(Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。),PearPC(实现PC机上安装Mac OS)近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM取代)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

QEMU有两种主要运作模式:  

User mode模拟模式,亦即是用户模式。  

QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine(运行 Windows 应用的兼容层。)及Dosemu(DOS模拟器)是其主要目标。  System mode模拟模式,亦即是系统模式。  

QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。    

性能特别好,但是需要使用专门修改之后的内核。  

05. Kvm介绍

1.KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。

2.是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。

3.它包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

4.KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。

5.KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。

6.在主流的Linux内核,如: 2.6.20以上的内核均已包含了KVM核心.

Kvm的优点:KVM是一种年轻的虚拟化技术,在出生的时候就吸收了其他虚拟化技术的优点,而且架构简单,没有历史兼容性的包袱,性能表现优异,使用越来越广!

2. 安装部署Kvm

01. 如果采用的是虚拟机安装,需要开启虚拟机的虚拟化技术

02. Kvm虚拟化管理软件的安装

[root@gjy ~]# yum install libvirt virt-install qemu-kvm -y
#安装软件说明内容:
libvirt #虚拟机管理,可管理kvm,xen,qemu,lxc....等软件。
virt-insatall #虚拟机安装克隆
qemu-kvm #管理虚拟机磁盘,底层
#启动服务
[root@gjy ~]# systemctl start libvirtd.service
[root@gjy ~]# systemctl enable libvirtd.service

03. 安装VNC软件

下载vnc软件方法,tightvnc官网:http://www.tightvnc.com

VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。

VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。

04. 安装一台Kvm虚拟机我们将安装目录放在/opt/目录下,首先我们要上传一个CentOS-7.6的镜像在/opt/目录下.

[root@gjy /opt]# ll

total 4481024-rw-r--r-- 1 root root 4588568576 2019-07-22 17:58 CentOS-7-x86_64-DVD-1810.iso

[root@gjy /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'centos7.raw' | 10 GB 00:00:00
Domain installation still in progress. You can reconnect tothe console to complete the installation process.

在启动的同时使用vnc连接,默认端口是5900,不用定义。

参数 参数说明
--virt-type 要使用的管理程序名称 (kvm, qemu, xen, ...)
--os-type 系统类型
--os-variant 客户机上安装的操作系统,如:'fedora18'、'rhel6'、'winxp' 等。
-n/--name 客户机实例名称
--memory 配置客户机虚拟内存大小
--vcpus 配置客户机虚拟 CPU数量。
--disk 指定存储的各种选项。 raw #不支持做快照,性能好。qcow2 #支持快照。
-cdrom 镜像位置
-w/--network 配置客户机网络接口。
--graphics 配置客户机显示设置。
--noautoconsole 不要自动尝试连接到客户端控制台
--autostart 主机启动时自动启动域。
--noreboot 安装完成后不重新启动客户机。

安装CentOS7系统,与正常安装一样。

安装完成后重启,重启之后TightVNC会自动退出。

重启之后,在命令行启动Kvm虚拟机

#开机
[root@kvm01 opt]# virsh start centos7

3. Kvm虚拟机管理

01. Kvm虚拟机的virsh日常管理和配置

参数 参数说明
基础操作
list 查看虚拟机列表,列出域
start 启动虚拟机,开始一个(以前定义的)非活跃的域
shutdown 关闭虚拟机,关闭一个域
destroy(危险) 强制关闭虚拟机,销毁(停止)域
dominfo 显示主机基本信息
vncdisplay 查询正在运行状态下的虚拟机vnc端口号
setmem 调整主机内存大小,只能调小
edit 编辑配置文件
console 命令行console进行登录
配置管理操作
dumpxml 导出主机配置信息
undefine 删除主机
define 导入主机配置
domrename 对虚拟机进行重命名(低版本的系统不支持)
挂起与恢复
suspend 挂起虚拟机
resume 恢复虚拟机
自启动管理
autostart 虚拟机开机启动
autostart --disable 取消虚拟机开机启动
快照管理
snapshot-create 创建快照
snapshot-list 查看快照列表
snapshot-info 显示快照信息
snapshot-revert 还原快照
snapshot-delete 删除快照

基础操作

#显示所有状态下的主机
[root@kvm01 opt]# virsh list --all
Id Name State
----------------------------------------------------
2 centos7 running #显示正在运行的主机
[root@kvm01 opt]# virsh list
Id Name State
----------------------------------------------------
2 centos7 running #关机
[root@kvm01 opt]# virsh shutdown centos7 #拔电源关机
[root@kvm01 opt]# virsh dectroy centos7
#开机
[root@kvm01 opt]# virsh start centos7 #查看主机配置信息
[root@kvm01 opt]# virsh dominfo centos7
Id: 2
Name: centos7
UUID: 22d41c40-4b59-4cee-9203-47880c1069bb
OS Type: hvm
State: running
CPU(s): 1
CPU time: 62.2s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#磁盘
[root@kvm01 opt]# ll
total 5952848
-rw------- 1 qemu qemu 10737418240 Dec 3 01:22 centos7.raw
-rw-r--r-- 1 qemu qemu 4588568576 Dec 3 00:19 CentOS-7-x86_64-DVD-1810.iso
#配置文件
[root@kvm01 opt]# ll /etc/libvirt/qemu
total 4
-rw------- 1 root root 4071 Dec 3 00:41 centos7.xml
drwx------ 3 root root 42 Dec 3 00:28 networks #修改配置文件
[root@kvm01 opt]# virsh edit centos7 #查看运行状态下的主机连接端口
[root@kvm01 /opt]# virsh vncdisplay centos7
:0 ====》 5900 #动态调整主机内存大小,只能调小。不能调大
[root@kvm01 /opt]# virsh setmem centos7 524288 #检查
[root@kvm01 /opt]# virsh dominfo centos7 |grep memory
Max memory: 1048576 KiB
Used memory: 524288 KiB

#将主机的内存调大
[root@kvm01 /opt]# virsh shutdown centos7 #关闭主机
Domain centos7 is being shutdown #编辑配置文件
[root@kvm01 /opt]# virsh edit centos7
<domain type='kvm'>
<name>centos7</name>
<uuid>d36e89c3-4d09-4328-bdd2-085b90cbe19c</uuid>
<memory unit='KiB'>2097152</memory> #最大支持内存
<currentMemory unit='KiB'>2097152</currentMemory> #当前内存
<vcpu placement='static'>2</vcpu> #cpu核心数 #重启libvirt服务
[root@kvm01 /opt]# systemctl restart libvirtd.service #检查结果
[root@kvm01 /opt]# virsh dominfo centos7 |grep -E "memory|CPU"
CPU(s): 2
Max memory: 2097152 KiB
Used memory: 2097152 KiB

02. Kvm虚拟主机的相关文件

#主机的镜像文件
[root@qiudao /opt]# ll
-rw------- 1 root root 10737418240 2019-07-22 20:19 centos7.raw #主机的配置文件
[root@qiudao /opt]# ll /etc/libvirt/qemu/centos7.xml
-rw------- 1 root root 4078 2019-07-22 21:01 /etc/libvirt/qemu/centos7.xml 修改虚拟主机配置文件的方法,使用下面命令修改可以对文件进行语法校验
[root@qiudao /opt]# virsh edit centos7 #配置管理操作
[root@kvm01 /opt]# virsh list --all #运行状态
Id Name State
----------------------------------------------------
1 centos7 running #导出主机配置信息
[root@kvm01 /opt]# virsh dumpxml centos7 > centos7-bak.xml [root@kvm01 /opt]# ll
total 13544120
-rw-r--r-- 1 root root 5243 Dec 1 16:10 centos7-bak.xml :q
#关机状态
[root@kvm01 /opt]# virsh shutdown centos7
Domain centos7 is being shutdown #导出主机配置信息,关机状态下的要比开机状态下的省资源
[root@kvm01 /opt]# virsh dumpxml centos7 > centos7-back.xml
[root@kvm01 /opt]# ll
total 13544124
-rw-r--r-- 1 root root 3951 Dec 1 16:12 centos7-back.xml
-rw-r--r-- 1 root root 5243 Dec 1 16:10 centos7-bak.xml #删除主机信息,只有关机状态下才能关机
[root@kvm01 /opt]# virsh undefine centos7
Domain centos7 has been undefined #发现主机的配置文件已经不存在了
[root@kvm01 /opt]# ll /etc/libvirt/qemu
total 0
drwx------ 3 root root 42 Dec 1 14:10 networks #检查列表也是没有
[root@kvm01 /opt]# virsh list --all
Id Name State
---------------------------------------------------- #导入主机配置信息
[root@kvm01 /opt]# virsh define centos7-bak.xml
Domain centos7 defined from centos7-bak.xml #配置文件已经回来了
[root@kvm01 /opt]# ll /etc/libvirt/qemu
total 8
-rw------- 1 root root 4513 Dec 1 16:24 centos7.xml #检查列表
[root@kvm01 /opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off #主机重命名,只能修改关机状态下的主机
[root@kvm01 /opt]# virsh domrename centos7 gjy
Domain successfully renamed [root@kvm01 /opt]# virsh list --all
Id Name State
----------------------------------------------------
- gjy shut off #配置文件名称已经发生改变
[root@kvm01 /opt]# ll /etc/libvirt/qemu
total 8
drwx------ 3 root root 42 Dec 1 14:10 networks
-rw------- 1 root root 4505 Dec 1 16:26 gjy.xml #磁盘名称没有改变,可以通过修改配置文件实现
[root@kvm01 /opt]# ll
total 13544124
-rw-r--r-- 1 root root 3951 Dec 1 16:12 centos7-back.xml
-rw-r--r-- 1 root root 5243 Dec 1 16:10 centos7-bak.xml
-rw------- 1 qemu qemu 10737418240 Dec 1 16:23 centos7.raw #挂起与恢复
[root@kvm01 ~]# virsh suspend centos7 #挂起,挂起之后主机无法进行任何操作
Domain centos7 suspended [root@kvm01 ~]# virsh resume centos7 #恢复
Domain centos7 resumed

挂起与恢复

#挂起与恢复
[root@kvm01 ~]# virsh suspend centos7 #挂起,挂起之后主机无法进行任何操作
Domain centos7 suspended [root@kvm01 ~]# virsh resume centos7 #恢复
Domain centos7 resumed #或者可以里面操作:
[root@kvm01 opt]# virsh #恢复
virsh # resume centos6
Domain centos6 resumed virsh # list --all
Id Name State
----------------------------------------------------
1 centos6 running
5 centos7 running
- w shut off

Kvm --01 虚拟化基础概念的更多相关文章

  1. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  2. KVM 网络虚拟化基础

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  3. O009、KVM 网络虚拟化基础

    参考https://www.cnblogs.com/CloudMan6/p/5289590.html   网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大.   但因为网络是虚拟化中非常重要的资源, ...

  4. [ kvm ] 学习笔记 2:虚拟化基础

    1. 虚拟化概念 什么是虚拟化 虚拟化是使用所谓虚拟机管理程序从一台物理机上创建若干个虚拟机的过程.虚拟机的行为和运转方式与物理机一样,但它们会使用物理机的计算资源,如 CPU .内存和存储.虚拟机管 ...

  5. 一步步Cobol 400 上手自学入门教程01 - 基础概念

    先学习基础概念 1.COBOL字符:包含: User-defined words 用户定义字符 ŸSystem-names ŸReserved words 关键字 2.用户定义字符User-defin ...

  6. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  7. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  8. 018 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 12 数据类型转换的基本概念

    018 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 12 数据类型转换的基本概念 本文知识点:Java中的数据类型转换 类型转换 类型转换分类 2类,分别是: ...

  9. Elasticserach学习笔记-01基础概念

    本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. 原文出处:https://www.elastic.co/guide/en/e ...

随机推荐

  1. github上拉去代码执行 npm install报错code:128

    npm ERR! code npm ERR! Command failed: D:\Program Files\Git\cmd\git.EXE clone --mirror -q git://gith ...

  2. 策略模式优化过多的IF ELSE

    前言: 当if else的条件少的话,代码可阅读性及逻辑不影响阅读和扩展.一旦if else过多的话会导致逻辑比较混乱,不易扩展并且很容易出错. 实现方案: 1.定义一个@HandlerType注解, ...

  3. ht-4 hashmap特性

    一.hashmap底层原理: hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(ke ...

  4. 一种算法的实现,几个相同大小的div组合在一起,判断是不是矩形

  5. springboot版本依赖

    springboot2.x及以后依赖于jdk1.8及以上. 如图:

  6. Vue子组件传递数据给父组件

    子组件通过this.$emit(event,data)传递数据到父组件 以下是例子: father.vue 父组件 <template> <div> <child @ne ...

  7. jQuery FileUpload doesn't trigger 'done'

     https://stackoverflow.com/questions/14674999/jquery-fileupload-doesnt-trigger-done   If your server ...

  8. 【CDN+】 CDN项目的两大核心--缓存与回源

    前言 项目中碰到CDN专用名词: 回源, 然后不知道什么意思,反过来查询了一下CDN相关的一些基本术语,特做记录 CDN基础概念 CDN (Content Delivery Network,即内容分发 ...

  9. unittest测试框架生成可视化测试报告-BeautifulReport

    生成报告的样式: 在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载Test ...

  10. 20160122 DataView RowFilter语法

    原文出自:http://www.csharp-examples.net/dataview-rowfilter/ DataView RowFilter语法(c#) 这个例子描述了DataView.Row ...