KVM虚拟化解决方案(1)

重点两个:
virsh操作虚拟机
kvm网络管理
(自动化解决方案)

主流的虚拟化解决方案:一是VMware(个人终端上解决虚拟化方案);二是,VMware的(企业版)—批量,裸机里安装一个VMware的系统(收费,很贵)。
服务器很大,不能浪费了,要使用虚拟化技术,来充分利用。
kvm是内核的一个模块
IDC 实体机房–世纪互联

概念

虚拟化”在单一系统上运行多个操作子系统,每个子系统相互独立,通过客机操纵系统提供虚拟化的硬件虚拟机管理程序,允许多种操作系统在相同的物理系统中运行,这个虚拟管理系统称为“客机”,虚拟化操作系统有多种方式:
全虚拟化和半虚拟化

KVM部署及管理

前期准备:
一台最少两个cpu两个处理内核的机器。

  1. 关防火墙selinux
    systemctl disable --now firewalld
    sed -ri s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
    setenforce 0
  2. yum update
  3. 时间对时,ntpdate -b ntpdate.aliyun.com
  4. 设置环境变量vim /etc/profile.d/history_time.sh给history添加执行的时间点
    echo $(date +%F-%T)echo $USERecho $(whoami)
export HISTTIMEFORMAT = "$(date +%F-%T) $USER -"

source /ete/profile#环境变量生效

#> 升级内核以更好的支持kvm模块, 机器需要提前开启虚拟化支持和VT-X技术栈; http://mirrors.reposnap.com/elrepo
#> 升级前一定要更新系统内的软件包, 以免有新特性不支持; 忽略更新的参数为: --exclude=kernel*
#>
#> 升级内核需要提前下载好kernel-ml-*软件包, 共两个(1.kernel-ml-5.0.1-1.el7.elrepo.x86_64.rpm;2.kernel-ml-devel-5.0.1-1.el7.elrepo.x86_64.rpm)

  1. 升级系统内软件包、安装新内核
    yum -y update --exclude=kernel*yum -y localinstall kernel-ml-*
  2. 更改启动顺序
    grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfggrubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"modprobe kvmlsmod | grepreboot nowuname -r
  3. 配置安装环境
## 安装epel源
yum -y install epel-release
## 安装运行环境和常用的命令
yum -y groupinstall "Development Tools"
yum -y install python36 gtk3-devel ninja-build wget vim net-tools bridge-utils
## 查看上一条命令是否执行正确
echo $?
## 返回0为正确,非0为错误
  1. 下载安装qemu源码包,qemu实际上产生的作用:产生虚拟化的硬件(利用cpu的vtx),-----虚拟化解决方案-----qemu+kvm模块共同起作用
    这个包下载速度较慢
    wget https://download.qemu.org/qemu-6.0.0.tar.xztar xf qemu-6.0.0.tar.xz -C /opt/ #解压并指定位置
    cd /opt/qemu-6.0.0/ #进入目录
    ./configure --target-list=x86_64-softmmu --python=/usr/bin/python3 #初始化
    make && make install # 编译安装
    yum -y install libvirt #下载安装libvirt
    systemctl enable --now libvirtd #开机自启,并启动
    virsh list --all #列出所有虚拟机
    qemu-system-x86_64 -version #查看qemu的版本
    yum -y install libvirt #安装libvirt环境
    systemctl enable --now libvirtd #开机自启
    systemctl status libvirtd #查看状态
    yum -y install virt-install #安装virtaul
    mkdir /data/qemu/virtual_machines -p # 我是创建了一个独立的文件夹来放这个虚拟机
    qemu-img create -f qcow2 /data/qemu/virtual_machines/virtual_machines-01.qcow2 40Gvirt-install --name=virt-machines-01 --vcpus=2 --memory=2048 --disk=/data/qemu/virtual_machines/virtual_machines-01.qcow2 --cdrom=/tmp/CentOS-7-x86_64-Minimal-2009.iso --os-variant=rhel7 --noautoconsole --autostart --virt-type=qemu --graphics vnc,listen=0.0.0.0,port=5900 # 安装虚拟机,并配置镜像文件,这个镜像文件要提前上传到/tmp目录下
    virsh list --all #查看所有虚拟机

安装完成,可以使用vnc进行连接,安装centos7的操作系统。

一些扩展:
awk '{ ips[$1]++ }END{ for(ip in ips){ print ip, ips[ip] } }' access.log | sort -k2 -nr | head

挂载磁盘: 首先要有一张磁盘,安装到主机上,(逻辑卷),做成一个pv,然后做成卷组,然后做成lv,将lv格式化挂载在目录上(便于扩缩容)。

kvm虚拟化解决方案(2)

kvm虚拟机的一些操作

virsh指令操作虚拟机

## 列出所有虚拟机
virsh list --all

## 关闭虚拟机的运行
virsh shutdown virt-machines-01

## 开启虚拟机
virsh start virt-machines-01

## 强制关闭(断电)慎用此指令,只限于这台机器没服务器,要回收了,才能用
virsh destroy virt-machines-01

## 销毁虚拟机,undefine 取消定义,define定义
virsh undefine virt-machines-01
rm -rf /data/qemu/virtual_machines/virtual_machines-01.qcow2

## 虚拟出来的kvm虚拟机的配置文件保存在qemu中
ls /etc/libvirt/qemu
virt-machines-01.xml

修改硬件配置(cpu/memory)

修改内存和cpu两项硬件设备需要kvm虚拟机重启

[root@kvm-machines ~]# virsh edit virt-machines-01
编辑了域 virt-machines-01 XML 配置。

<domain type='qemu'>
  <name>virt-machines-01</name>
  <uuid>48d4c13a-1767-487d-a02f-9911a7bf3df9</uuid>
  <memory unit='KiB'>1048567</memory>
  ## memory 内存大小定义
  <currentMemory unit='KiB'>1048567</currentMemory>
  <vcpu placement='static'>1</vcpu>
  ## vcpu 虚拟cpu,跟宿主机有关
  ...
  ...
</domain>

virsh shutdown virt-machines-01		## 关掉虚拟机
virsh dominfo virt-machines-01		## 查看虚拟机的信息
virsh start virt-machines-01		## 启动kvm虚拟机
#(启动速度和机器的配置有关)
virsh dominfo virt-machines-01		## 再查看一下虚拟机信息有没有变化(查看配置是否生效)。

添加数据磁盘(热插拔)

qemu-img create -f qcow2 /data/disk/virt-machines-01-data-disk-01.qcow2 10G
## 创建数据盘
virsh attach-disk virt-machines-01 /data/disk/virt-machines-01-data-disk-01.qcow2 vdb
## vdb 盘符,自定义-->附加盘符,添加磁盘
	Disk attached successfully
## 注意,当你的虚拟机关机再重启vdb就没了,这是临时挂载的。如何永久挂载呢?
## 修改相关配置文件,
virsh edit virt-machines-01

	 <disk type='file' device='disk'>
      	<driver name='qemu' type='qcow2'/>
      	<source file='/data/qemu/virtual_machines/virt-machines-01-data-01.qcow2'/>
      	<target dev='vdb' bus='virtio'/>
   	 </disk>
	 <disk type='file' device='disk'>
       	<driver name='qemu' type='qcow2'/>
       	<source file='/data/disk/virt-machines-01-data-disk-01.qcow2'/>
      	 <target dev='vdb' bus='virtio'/>
   	 </disk>

分区、格式化、挂载磁盘; 注意有些时候需要对接好需求有些服务需要的是裸磁盘;

cpu、内存、磁盘三者之间的关系
free -mbuff/cache buffer:用于存放要输出到disk(块存储)的数据,在这里buff是指被OS buffer住的内存(written to disk);
cache:存放从disk上读出的数据;buffer和cache是为了提高IO性能并由OS管理。

cpu
速度是最快的,但是它所拿的空间来自内存,内存(闪存),它存储数据是不持久的,如果要持久的话要存到硬盘,所以内存是cpu与磁盘的桥梁。

buff/cache架设在内存和cpu中间,cpu—>内存存储数据的时候,使用的是buff
内存—>cpu,使用的是cache,加了一层缓存,当内存得到cpu,是提前得到信息,cpu中有一个时钟,cpu会处理每一个队列中的每一个任务,并利用时间来标记每一个任务需要的时间,告诉内存,内存提前准备数据,当达到时间前,把数据放到缓存中,这个缓存的速度,无限接近cpu读取的速度,这个缓存又称为cpu的一级缓存(造价较高)。
so,buff和cache起到的作用就是内存,cpu,磁盘之间的交换信息的速度无限接近。

  1. cpu往内存存数据,如果buff足够大,就可以放很多cpu的任务,内存慢慢读,就不会有cpu很长的等待时间。
  2. cache 涉及到一个问题
  3. 调整buff容量,将worker与cpu进行绑定,提高cpu的使用率

虚拟机迁移,快照和克隆

创建快照

数据盘无法做快照,在做快照之前需要将数据盘卸载
意义: 将当前时刻,虚拟机的全部状态全部记录下来(相当于全量备份)

  1. 如果你的虚拟机上面有数据盘,要先把数据盘分离出来,因为kvm不支持给数据盘拍快照,当然,数据盘的数据保存很容易,copy一下就可以。
    分离磁盘:
## 先看看有没有数据盘
virsh edit virt-machines-01

## 到系统中,把挂载的目录先卸载掉。然后再把盘拔出来。
virsh detach-disk virt-machines-01 vdb
#	Disk detached successfully

## 创建快照,注意$()的用法和``的用法一样。创建快照 + 虚拟机名字 + 快照名字
virsh snapshot-create-as virt-machines-01 virt-machhines-01-$(date +%Y%m%d%H%M%S)
#	Domain snapshot virt-machhines-01-20210720141858 created

## 查看快照有没有
[root@localhost data]# virsh snapshot-list virt-machines-01
 Name                 Creation Time             State
------------------------------------------------------------
 virt-machhines-01-20210720141858 2021-07-20 14:18:58 +0800 running

## 删根试试(此操作慎用),当然,现在系统里是有根保护的(7.8以后的版本)。
进入虚拟机中
rm -rf / --no-preserve-root

## 恢复快照
virsh snapshot-revert virt-machines-01 virt-machhines-01-20210720141858

## vdb继续挂载上。(重启一下虚拟机就好了)
shoutdown  start

克隆虚拟机

1. 先关机,关闭虚拟机
 virsh shutdown virt-machines-01
2. 再克隆
virt-clone -o virt-machines-01 -n virt-machines-02 -f /data/qemu/virtual_machines/virtual_machines-02.qcow2

3. 克隆虽然方便,但是克隆完有些问题:
uuid,主机名,系统的一下id,ip啥的都一样,得自己改,很麻烦
适合应急。

数据迁移

需要虚拟机配置文件和系统盘,如果由数据盘的话,还需要把数据盘copy过去。
当然,新机器要先安装kvm虚拟机。环境得弄好。不写了,看上边。

1. 生成kvm虚拟机备份配置文件
mkdir /opt/nfs
virsh dumpxml virt-machines-01 > /opt/nfs/virt-machines-01-dumpxml.xml

## 查看一下
[root@localhost ~]# ls /opt/nfs/virt-machines-01-dumpxml.xml
#	/opt/nfs/virt-machines-01-dumpxml.xml

2. 拷贝kvm虚拟机的系统盘
cp /data/qemu/virtual_machines/virtual_machines-01.qcow2 /opt/nfs/

3. 在要迁移过去的机器上创建相同目录,然后scp传输
mkdir /data/qemu/virtual_machines/ -p
mkdir /etc/libvirt/qemu -p
scp /opt/nfs/virtual_machines-01.qcow2 root@10.9.30.197:/data/qemu/virtual_machines/
scp /opt/nfs/virt-machines-01-dumpxml.xml root@10.9.30.197:/etc/libvirt/qemu