小阿轩yx- KVM 高级功能部署

小阿轩yx- KVM 高级功能部署

案例分析

案例概述

  • 企业内部为了使服务器资源达到最大化利用会进行 KVM 虚拟化
  • 每台服务器部署多台 KVM 虚拟机。KVM 虚拟机数量不断增多个别服务器会出现资源过载现象,就需要对部分 KVM 虚拟机迁移
  • 针对可停机的 KVM 虚拟机可使用静态迁移方式迁移KVM虚拟机
  • 针对在线提供服务、不可停机的KVM虚拟机可使用基于共享动态迁移或基于模块动态迁移完成工作
  • 除迁移外,还可以在KVM宿主机上开启KSM内核同页合并,达到节省内存、降低负载目的

案例前置知识点

KVM 虚拟机迁移
  • 将某一个虚拟机上的环境和软件完全复制到另一台物理机上继续运行

好处

  • 可以优化系统负载
  • 重新规划 KVM 虚拟机布局并简化 KVM 虚拟机的管理维护工作

主要应用场景

  • 当一台 KVM 宿主机负载较高时,可将源 KVM 宿主机上的部分虚拟机迁移到堵在较低的 KVM 宿主机中,保证服务质量
  • 通过 KVM 虚拟机迁移将多台负载较低的 KVM 宿主机上的 KVM 虚拟机集中迁移到某一台 KVM 宿主机上,达到节约资源的目的
  • 升级 KVM 宿主机硬件设备时,可以将 KVM 宿主机上运行的 KVM 虚拟机迁移到其它 KVM 宿主机上,以解决对硬件的依赖,实现业务不中断情况下对物理硬件设备的升级
  • 跨地域迁移,实现 KVM 虚拟机的远程迁移

迁移方式分为

  • 静态迁移(static magratiopn)
  • 动态迁移(live migration)

区别

  • 静态迁移会有一段时间虚拟机中的服务是不可用的
  • 动态迁移没有明显的服务暂停时间

静态迁移

  • 需要先关闭要迁移的 KVM 虚拟机,并拷贝它的磁盘文件和配置文件搭配目标 KVM 宿主机,然后恢复启动,实现静态迁移

动态迁移

  • 保证 KVM 虚拟机上运行的应用正常提供服务的同时,让 KVM 虚拟机在不同的 KVM 宿主机之间进行迁移

动态迁移两种方式

  • 基于共享存储
  • 基于数据块

基于共享存储动态迁移

  • 在 KVM 虚拟机迁移开始后,被迁移的 KVM 虚拟机依然保持在源 KVM 宿主机上运行。同时,KVM 虚拟机内存页被传输到目标 KVM 宿主机之上

基于数据块的动态迁移

  • 对使用本地存储的 KVM 虚拟机进行在线迁移

KSM 内核同页合并

  • KSM(Kernel SamePage Merging)
  • 允许内核在两个或多个进程之间共享完全相同的内存页

QEMU/KVM

  • 一个 KVM 虚拟机就是一个 QEMU 进程
  • 使用 KSM 也可以实现多个 KVM 虚拟机之间相同内存合并
  • 在 KVM 虚拟化环境中,KSM 能够提高内存的利用率

KSM

  • 最初是为在 KVM 虚拟化中使用开发的
  • 它对非虚拟化系统依然非常有用
  • 可以提高 KVM 宿主机中内存的使用效率,一般建议开启 KSM 功能

使用 KSM 时为了防止内存过载,最好保证系统的交换分区(swap space)足够大

案例环境

  • 使用三台服务器模拟 KVM 虚拟机迁移

案例环境表 

主机

操作系统

IP地址

主要软件

kvm01

CentOS7.9 x86_64

192.168.10.201

Qemu-kvm、libvirt

kvm02

CentOS7.9 x86_64

192.168.10.202

Qemu-kvm、libvirt、qemu-kvm-ev

kvmnfs

CentOS7.9 x86_64

192.168.10.101

nfs-utils

案例需求

  • 通过静态迁移实现 KVM 虚拟机的迁移
  • 通过基于共享存储的动态迁移方式实现 KVM 虚拟机的迁移
  • 通过基于数据块的动态迁移方式实现 KVM 虚拟机的迁移
  • 实现  KSM 内存优化

案例实现思路

  • 通过拷贝磁盘文件和配置文件的方式实现静态迁移
  • 通过配置 NFS 共享服务,实现基于共享存储的动态迁移
  • 通过基于 数据块的方式实现动态迁移
  • 针对同类型 KVM 虚拟机和应用使用 KSM 来优化内存

案例实施

  • 恢复上一章201的kvm01快照

进入目录检查是否有 iso 镜像

[root@kvm01 ~]# cd /opt
[root@kvm01 opt]# ls
CentOS-7-x86_64-DVD-2009.iso    rh

查看文件

[root@kvm01 opt]# ll -h
总用量 4.4G
-rw-r--r--. 1    root    root 4.4G    5月    23    2022    CentOS-7-x86_64-DVD-2009.iso
drwxr-xr-x. 2    root    root    6    10月   31    2018    rh

创建目录

[root@kvm01 opt]# mkdir -p /data_kvm/store

生成虚拟机

[root@kvm01 opt]# virt-install -n test01 -r 1024 --vcpus=1 --disk path=/data_kvm/store/test01.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /opt/CentOS-7-x86_64-DVD-2009.iso --vnc --vncport=5901 --vnclisten=0.0.0.0

这一步如果报错,就用 VNC 安装虚拟机

直接默认完成

这一步重启之后VNC就连接不上了

查看状态

[root@kvm01 opt]# virsh list --all
Id            名称            状态
----------------------------------
-            test01           关闭

启动服务

[root@kvm01 opt]# virsh start test01
域    test01 已开始

再次连接

静态迁移

查看虚拟机状态

[root@kvm01 opt]# virsh list --all
Id    名称         状态
----------------------------------
2     test01       running

关闭虚拟机

[root@kvm01 opt]# virsh shutdown test01
域 test01 被关闭

查看虚拟机状态

[root@kvm01 opt]# virsh list --all
Id    名称         状态
----------------------------------
-     test01       关闭

定位虚拟机 test01 磁盘文件

[root@kvm01 opt]# virsh domblklist test01
目标    源
-----------------------------------------
hda    /data_kvm/store/test01.qcow2
hdb    -

导出虚拟机 test01 的 xml 配置文件

[root@kvm01 opt]# cd
[root@kvm01 ~]# virsh dumpxml test01 > test01.xml

查看

[root@kvm01 ~]# ls
ali                initial-setup.cfg    公共    视频    文档    音乐
anaconda-ks.cfg    test01.xml           模版    图片    下载    桌面

打开 KVM02 终端

在 kvm02 创建目录

[root@kvm2 ~]# mkdir -p /data_kvm/store

拷贝配置文件和磁盘文件到目标宿主机 kvm02 上

[root@kvm01 ~]# scp test01.xml 192.168.10.202:/etc/libvirt/qemu/
//这一步输入 yes
Are you sure you want to continue connecting (yes/no)? yes
//输入密码
root@192.168.10.202's password:
test01.xml                        100%  3412    949.9KB/s 00:00
[root@kvm01 ~]# scp /data_kvm/store/test01.qcow2 192.168.10.202:/data_kvm/store/
root@192.168.10.202's password:
test01.qcow2                      100%    10GB 111.6MB/s    01:31

kvm02 上配置和启动目标虚拟主机

进入目录并查看配置文件

[root@kvm02 ~]# cd /data_kvm/store/
[root@kvm02 store]# ls
test01.qcow2

重新定义虚拟机 test01

[root@kvm02 ~]# virsh define /etc/libvirt/qemu/test01.xml
定义域    test01 (从 /etc/libvirt/gemu/test@1.xml)

在 kvm02 查看状态

[root@kvm02 ~]# virsh list --all
Id      名称          状态    
--------------------------------
-      test01         关闭

启动服务

[root@kvm02 ~]# virsh start test01
域    test01 已开始

再查看状态

[root@kvm02 ~]# virsh list --all
Id      名称          状态    
--------------------------------
1      test01         running

启动 kvm01

[root@kvm01 ~]# virsh start test01
域    test01 已开始

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
3      test01         running

新开一台101机器

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

安装软件包

[root@localhost ~]# yum -y install nfs-utils

创建目录

[root@localhost ~]# mkdir /data 

提高权限

[root@localhost ~]# chown -R 777 /data/

编辑配置文件

[root@localhost ~]# vim /etc/exports
/data 192.168.10.0/24(rw,sync,no_root_squash)

启动服务

[root@localhost ~]# systemctl start nfs 
[root@localhost ~]# systemctl start rpcbind

这里同步201和202会话

创建挂载点

[root@kvm01 ~]# mkdir /data_kvm/kgc
[root@kvm02 ~]# mkdir /data_kvm/kgc

挂载

[root@kvm01 ~]# mount 192.168.10.101:/data /data_kvm/kgc 

查看

[root@kvm01 ~]# mount

设置自动挂载

[root@kvm01 ~]# vim /etc/fstab
//添加配置
192.168.10.101:/data /data_kvm/kgc nfs defaults 0 0

进入目录

[root@kvm01 ~]# cd /opt

将实验用到的系统镜像上传到KVM主机的root家目录中。

这里直接使用CentOS官方提供的qcow2格式的系统镜像(CentOS-7-x86_64-GenericCloud-2009.qcow2)

取消会话同步

拷贝qcow2磁盘文件

[root@kvm01 opt]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /data_kvm/kgc/test02.qcow2

为系统镜像设置密码

[root@kvm01 ~]# virt-customize -a /data_kvm/kgc/test02.qcow2 --root-password password:aptech
[  0.0] Examining the guest ...
[ 18.6] Setting a random seed
[ 18.7] Setting passwords
[ 20.7] Finishing off

生成虚拟机

[root@kvm01 ~]# virt-install --name=test02 -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/data_kvm/kgc/test02.qcow2',size=10 -w bridge:br0 --virt-type=kvm --boot hd

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
3      test01         running
5      test02         running

进入虚拟机查看调出管理界面

[root@kvm01 ~]# virt-manager

直接就是登录界面 

动态迁移

查看 kvm02 虚拟机状态

[root@kvm02 ~]# virsh list --all
Id      名称          状态    
--------------------------------
1      test01         running

kvm01 关闭虚拟机

[root@kvm01 ~]# virsh shutdown test02 
域    test02 被关闭

编辑配置文件

[root@kvm01 ~]# virsh edit test02
//添加配置
<driver name='qemu' type='qcow2' cache='none'/>

启动 test02

[root@kvm01 ~]# virsh start test02
域    test02 已开始

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
3      test01         running
6      test02         running

迁移文件

[root@kvm01 ~]# virsh migrate --live --verbose test02 qemu+ssh://192.168.10.202/system tcp://192.168.10.202
root@192.168.10.202's password:
迁移:[100%]

迁移之后 kvm01 上虚拟机 test02 被关闭,目标宿主机 kvm02 上虚拟机 test02 处于启动状态

202进入目录

[root@kvm02 ~]# cd /etc/libvirt/qemu/

生成配置文件并指定路径

[root@kvm02 ~]# virsh dumpxml test02 > /etc/libvirt/qemu/test02.xml

定义虚拟机 test02 配置文件

[root@kvm02 qemu]# virsh define /etc/libvirt/qemu/test02.xml
定义域    test02 (从 /etc/libvirt/qemu/test02.xml)

201和202会话同步

设置好阿里巴巴的 yum  源

[root@kvm01 ~]# rm -rf /etc/yum.repos.d/*
[root@kvm01 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo
[root@kvm01 ~]# https://mirrors.aliyun.com/repo/Centos-7.repo
[root@kvm01 ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@kvm01 ~]# yum clean all

安装软件包

[root@kvm01 ~]# yum -y install centos-release-qemu-ev 

查看仓库

[root@kvm01 ~]# yum repolist
源标识                        源名称                 状态
Cent0s-Base                   CentOS-Base            0
centos-gemu-ev/7/x86_64       CentOS-7 - QEMU EV     0
epel                          epel                   0
epelrepolist: 0

下一步解决上一步状态都是0的问题

进入目录

[root@kvm01 ~]# cd /etc/yum.repos.d/

修改仓库文件

[root@kvm01 yum.repos.d]# vim CentOS-QEMU-EV.repo

//修改前
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=virt-kvm-common
#baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/virt/$basearch/kym-common

//修改后
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=virt-kvm-common
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/virt/$basearch/kym-common

清空 yum 缓存

[root@kvm01 yum.repos.d]# yun clean all

再次查看仓库

[root@kvm01 ~]# yum repolist
源标识                        源名称                 状态
Cent0s-Base                   CentOS-Base            16,396
centos-gemu-ev/7/x86_64       CentOS-7 - QEMU EV     63
epel                          epel                   13,798
epelrepolist: 30,257

安装软件包

[root@kvm01 yum.repos.d]# yum -y install qemu-kvm-ev

重启机器使安装包生效

[root@kvm01 yum.repos.d]# reboot

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
1      test01         running
-      test02         关闭
[root@kvm02 ~]# virsh list --all
Id      名称          状态    
--------------------------------
-      test01         关闭
-      test02         关闭

取消会话同步

关闭机器

[root@kvm01 ~]# virsh shutdown test01
域 test01 被关闭

进行克隆 

[root@kvm01 ~]# virt-clone -o test01 -n test03 -f /data_kvm/store/test03.qcow2
WARNING 设置图形设备端口为自动端口,以避免相互冲突。
正在分配'test03.qcow2                  |    10 GB 00:04
成功克隆'test03'。

查看状态

[root@kvm02 ~]# virsh list --all
Id      名称          状态    
--------------------------------
-      test01         关闭
-      test02         关闭
-      test03         关闭

启动

[root@kvm01 ~]# virsh start test03
域 test03 已开始

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
2      test03         running
-      test01         关闭
-      test02         关闭

202 上创建空磁盘文件

[root@kvm02 ~]# qemu-img create -f qcow2 /data_kvm/store/test03.qcow2 20G
Formatting '/data kvm/store/test03.gcow2',fmt=gcow2 size=21474836480 cluster size=65536 lazy refcounts=off refcount bits=16

 201 上迁移 test01

[root@kvm01 ~]# virsh migrate test03 qemu+ssh://192.168.10.202/system --live --persistent --undefinesource --copy-storage-all --verbose
root@192.168.10.202's password:
迁移:[100%]

查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
-      test01         关闭
-      test02         关闭

202 上查看状态

[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
1      test03         running
-      test01         关闭
-      test02         关闭

配置 KSM 优化内存

在201上克隆多份 test 虚拟机

[root@kvm01 ~]# virt-clone -o test04 -n test04 -f /data_kvm/store/test02.qcow4
[root@kvm01 ~]# virt-clone -o test05 -n test05 -f /data_kvm/store/test03.qcow5
[root@kvm01 ~]# virt-clone -o test06 -n test06 -f /data_kvm/store/test04.qcow6
[root@kvm01 ~]# virt-clone -o test07 -n test07 -f /data_kvm/store/test02.qcow7
[root@kvm01 ~]# virt-clone -o test08 -n test08 -f /data_kvm/store/test03.qcow8
[root@kvm01 ~]# virt-clone -o test09 -n test09 -f /data_kvm/store/test04.qcow9

克隆虚拟机,源虚拟机需要关闭状态

开启所有的虚拟机

[root@kvm01 ~]# virsh start test01
[root@kvm01 ~]# virsh start test02
[root@kvm01 ~]# virsh start test03
[root@kvm01 ~]# virsh start test04
[root@kvm01 ~]# virsh start test05
[root@kvm01 ~]# virsh start test06
[root@kvm01 ~]# virsh start test07
[root@kvm01 ~]# virsh start test08
[root@kvm01 ~]# virsh start test09

查看状态

​[root@kvm01 ~]# virsh list --all
Id      名称          状态    
--------------------------------
3      test01         running
4      test02         running
5      test04         running
6      test05         running
7      test06         running
8      test07         running
9      test08         running
10     test09         running

查看内存使用情况

[root@kvm01 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3861288     2464360      135440       15208     1261488     1157748
Swap:       4194300           0     4194300

进入配置文件

[root@kvm01 ~]# vim /boot/config-3.10.0-1160.el7.x86_64
//查找配置
CONFIG_KSM=y

设定参数 1

[root@kvm01 ~]# echo 1 > /sys/kernel/mm/ksm/run
  • 1:启动 KSM 优化功能

启动并设置永久启动 KSM 优化功能

[root@kvm01 ~]# systemctl start ksm
[root@kvm01 ~]# systemctl start ksmtuned
[root@kvm01 ~]# systemctl enable ksm
[root@kvm01 ~]# systemctl enable ksmtuned

重启系统

[root@kvm01 ~]# reboot

再次查看内存使用情况

[root@kvm02 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3861288     2449008      103556       15212     1308724     1173004
Swap:       4194300           0     4194300

小阿轩yx- KVM 高级功能部署

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值