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能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。    性能特别好,但是需要使用专门修改之后的内核。  

小结:

xen  纯软件模拟,特别慢
qemu   需要一个专门的内核,性能特别好
kvm   基于内核的  2.6.20以上的版本内核
kvm的优点:
kvm是一种年轻的虚拟化技术,在出生的时候就吸收了其他虚拟化技术的优点,而且架构简单,没有历史兼容性的包袱,性能表现优异,使用越来越广

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

03. 安装VNC软件(远程桌面管理工具)

远程链接地址:10.0.0.161:5900

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

​ VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。 VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。

2. 安装部署Kvm

环境安装

1.添加100G硬盘
2.重启生效
3.初始化
[root@webvirtmgr ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
4.挂载
mount /dev/sdb /opt

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

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

[root@kvm01 ~]# yum install  -y  libvirt  virt-install  qemu-kvm  -y


libvirt         #虚拟化的管理平台  kvm  qemu xen


virt-install    #安装克隆虚拟机

qemu-kvm    qemu-img    #磁盘管理,底层平台

#查看是否支持kvm
lsmod|grep -i kvm
#启动

[root@kvm01 ~]# systemctl  start  libvirtd

#安装虚拟机

 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



 --virt-type kvm        #虚拟化的类型  (qemu效率慢)


 --os-type=linux        #系统类型


 --os-variant rhel7     #客户机的安装系统,centos-7系列


 --name centos7         #虚拟机的名称


 --memory 1024          #虚拟机的内存


 --vcpus 1              #CPU的核心

 --disk /opt/centos7.raw,format=raw,size=10     #磁盘 ,磁盘的格式  raw 性能好,不支持快照                                                   qcow2,支持快照,默认G为大小

 --cdrom /opt/CentOS-7-x86_64-DVD-1810.iso      #镜像位置


 --network network=default      #网络


 --graphics vnc,listen=0.0.0.0      #显示器  vnc

 --noautoconsole                #禁止自动consle连接控制台

vnc安装出问题处理方法(版本7.5有坑,不建议使用):

1.操作如下步骤
virsh list --all
virsh destroy centos7
virsh undefine centos7
rm -fr /opt/centos7.raw
2.调整内存
 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
3.重新安装


#不是默认盘手动创建盘
qemu-img create /opt/centos7.raw  20G

安装需要配置的几个点

kvm主机管理

[root@kvm01 opt]# virsh  list --all             #显示所有的主机
 Id    Name                           State
----------------------------------------------------
 4     centos7                        running

[root@kvm01 opt]# virsh  list                   #只显示开机状态的主机
 Id    Name                           State
----------------------------------------------------
 4     centos7                        running

#查看主机的配置信息
[root@kvm01 opt]# virsh   dominfo   centos7
Id:             4
Name:           centos7
UUID:           633eccfd-afb3-408e-a1c5-cc501d442663
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       24.4s
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0


#关机

[root@kvm01 opt]# virsh  shutdown  centos7
Domain centos7 is being shutdown

#拔掉电源进行关机
[root@kvm01 opt]# virsh  destroy   centos7
Domain centos7 destroyed

#启动

[root@kvm01 opt]# virsh  start  centos7
Domain centos7 started

[root@kvm01 opt]# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 5     centos7                        running

#重启
[root@kvm01 opt]# virsh  reboot  centos7 #系统正常是可以用,否则强制关机

#主机的磁盘

[root@kvm01 opt]# ll
total 5924408
-rw------- 1 root root 10737418240 Dec  3 01:33 centos7.raw

#配置文件

[root@kvm01 opt]# ll  /etc/libvirt/qemu/
total 4
-rw------- 1 root root 4077 Dec  3 00:58 centos7.xml

#直接修改配置文件
[root@kvm01 opt]# virsh  edit  centos7

#查看运行中的主机的对应的端口号

[root@kvm01 opt]# virsh  vncdisplay  centos7
:0

#挂起虚拟主机

[root@kvm01 opt]# virsh  suspend   centos7
Domain centos7 suspended

 #恢复虚拟主机

[root@kvm01 opt]# virsh  resume   centos7
Domain centos7 resumed

#关机
[root@kvm01 opt]# virsh   shutdown   qls
Domain qls is being shutdown

#修改名称(低版本不支持centos7.3开始)
[root@kvm01 opt]# virsh domrename   qls  centos7
Domain successfully renamed

#修改配置文件
[root@kvm01 opt]# virsh   edit  centos7

<source file='/opt/centos7.raw'/>       #修改磁盘名称

#修改磁盘名称
[root@kvm01 opt]# mv  qls.raw  centos7.raw

#启动
[root@kvm01 opt]# virsh  start  centos7
Domain centos7 started

[root@kvm01 opt]# virsh  list  --all
 Id    Name                           State
----------------------------------------------------
 9     centos7                        running


#调整内存 (调小)
[root@kvm01 opt]# virsh  setmem   centos7   524288

[root@kvm01 opt]# virsh   dominfo   centos7  |grep  -i mem
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>633eccfd-afb3-408e-a1c5-cc501d442663</uuid>
  <memory unit='KiB'>2097152</memory>                   #最大限制
  <currentMemory unit='KiB'>2097152</currentMemory>     #允许使用
  <vcpu placement='static'>1</vcpu>                     #修改CPU核心数

[root@kvm01 opt]# virsh  start  centos7         #启动
Domain centos7 started

[root@kvm01 opt]# virsh  dominfo   centos7  |grep -i  mem       #检查
Max memory:     2097152 KiB
Used memory:    2097152 KiB

导出,删除,恢复配置文件

\#导出主机配置信息

[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

\#删除主机信息,只有关机状态下才能关机

[root@kvm01 /opt]# virsh undefine centos7
Domain centos7 has been undefined

\#导入主机配置信息
[root@kvm01 /opt]# virsh define centos7-bak.xml
Domain centos7 defined from centos7-bak.xml

注意:

\#开机状态下,删除主机信息,删除了配置文件,不会删除磁盘文件

[root@kvm01 /opt]# virsh undefine centos7
Domain centos7 has been undefined

关机,就生效
先备份
\#导出主机配置信息

[root@kvm01 /opt]# virsh dumpxml centos7 > centos7-bak.xml

\#导入主机配置信息
[root@kvm01 /opt]# virsh define centos7-bak.xml
Domain centos7 defined from centos7-bak.xml

补充:

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删除快照

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

\#关机状态

[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 0drwx------ 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 qls
Domain successfully renamed

[root@kvm01 /opt]# virsh list --all
Id Name State----------------------------------------------------- qls shut off

\#配置文件名称已经发生改变

[root@kvm01 /opt]# ll /etc/libvirt/qemu
total 8drwx------ 3 root root 42 Dec 1 14:10 networks
-rw------- 1 root root 4505 Dec 1 16:26 qls.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

\#挂起与恢复(时间会有变动)
virsh进去
命令可以补全
exit退出

[root@kvm01 ~]# virsh suspend centos7    #挂起,挂起之后主机无法进行任何操作Domain centos7 suspended

[root@kvm01 ~]# virsh resume centos7         #恢复Domain centos7 resumed

**03. 安装一个CentOS6的系统的虚拟主机**

\#上传一个CenOS6系统的镜像到/opt目录下
[root@qiudao /opt]# ll
-rw-r--r-- 1 root root 3916431360 2019-07-22 22:03 CentOS-6.8-x86_64-bin-DVD1.iso
-rw------- 1 root root 10737418240 2019-07-22 20:19 centos7.raw
-rw-r--r-- 1 qemu qemu 4588568576 2019-07-22 17:58 CentOS-7-x86_64-DVD-1810.iso

[root@qiudao /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel6 --name centos6 --memory 1024 --vcpus 1 --disk /opt/centos6.raw,format=raw,size=10 --cdrom /opt/CentOS-6.8-x86_64-bin-DVD1.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...Domain installation still in progress. You can reconnect tothe console to complete the installation process.

\#使用TightVNC进行连接,如果centos7是开启的,那么这个的默认端口号是5901

​    进入之后,开始安装CenOS6的系统,正常安装就可以,ip地址设置为自动就可以了。分区时一定要配置swap分区,不配置swap分区,会出现报错的情况,主机起动不来。

**04. Kvm虚拟机console登录**

**CentOS-7.X 版本console登录**

开机自启,取消

#开机启动autostart,前提:systemctl enable libvirtd;取消开机启动autostart --disable

[root@qiudao /opt]# virsh autostart centos7

进入控制台

virsh console  centos7
退出
ctrl+]

实现命令行输入(跳板机管理的服务:vnc ip地址一致才可以)

centos7开启censole登录

#连接到kvm虚拟主机
[root@qiudao /opt]# ssh [email protected]
[root@centos-7 ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@centos-7 ~]# reboot

\#115200n8:能显示虚拟机的启动过程。重启完成后,使用virsh console 连接虚拟机。

[root@qiudao /opt]# virsh console centos7
Connected to domain centos7
Escape character is ^]CentOS Linux 7 (Core)Kernel 3.10.0-957.el7.x86_64 on an x86_64

centos7 login: rootPassword:Last login: Tue Jul 23 09:51:50 from gateway[root@centos-7 ~]#

\#查看终端

[root@centos-7 ~]# whoroot ttyS0 2019-12-01 17:05

\#注意:退出virsh console连接的方法,使用组合键Ctrl+]即可

centos6开启censole登录

\#开启centos-6的虚拟主机
[root@qiudao /opt]# virsh start centos6
Domain centos6 started

[root@qiudao /opt]# virsh list --all
Id Name State----------------------------------------------------1 centos7 running2 centos6 running

\#连接到kvm虚拟主机,默认网络是没有启动的,需要手动启动起来

[root@qiudao /opt]# ssh [email protected]

\#1.添加ttyS0的许可,允许root登陆
[root@centos6 ~]# echo "ttyS0" >> /etc/securetty

\#2.编辑/etc/grub.conf中加入console=ttyS0
[root@centos6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /boot/grub/grub.conf

\#3.编辑/etc/inittab在最后一行加入内容 S0:12345:respawn:/sbin/agetty ttyS0 115200
[root@centos6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab

\#4.重启虚拟主机
[root@centos6 ~]# reboot

\#5.重启完成后,使用virsh console 连接虚拟机。
[root@qiudao /opt]# virsh console centos6
Connected to domain centos6Escape character is ^]

CentOS release 6.8 (Final)Kernel 2.6.32-642.el6.x86_64 on an x86_64

centos6 login: rootPassword:Last login: Tue Jul 23 02:01:46 from 192.168.122.1
12-18 03:38