KVM

云计算服务类型

IAAS
PAAS
SAAS

KVM_第1张图片
image

为什么用云计算

KVM_第2张图片
image

什么是虚拟化

KVM_第3张图片
image

环境准备

环境介绍

vmware: 支持嵌套虚拟化 (虚拟机中装虚拟机)
kvm:   不支持嵌套虚拟化 

vmware: 4G 宿主机 物理服务器(没有真实条件只用作测试)
kvm:   虚拟机

环境要求:

克隆纯净环境:
CentOS 7.4 7.6   (7.5版本有BUG,建议不要使用)
关闭firewalld
关闭selinux
关闭NetworkManager
安装常用软件  vim tree wget lrzsz bash-complete

KVM_第4张图片
image

lsmod|grep -i kvm

KVM_第5张图片
image

这里做了一个本地解析下载需要的环境

echo '192.168.37.202 mirrors.aliyun.com' >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安装需要的软件和下载镜像:
yum install libvirt virt-install qemu-kvm -y 
wget http://192.168.37.202/linux59/CentOS-7-x86_64-Minimal-1511.iso

将镜像移动到/opt下
mv CentOS-7-x86_64-Minimal-1511.iso /opt/

把VNC软件 下载到电脑上

http://192.168.37.202/linux59/VNC-Viewer-6.19.325-Windows-64bit.exe

KVM_第6张图片
image

安装一台kvm虚拟机

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

宿主机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
[root@kvm01 /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 

vnc:10.0.0.11:5900
--virt-type kvm 虚拟化的类型(qemu)
--os-type=linux 系统类型
--os-variant rhel7 系统版本
--name centos7 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 
--noautoconsole

用VNC连接

[root@kvm01 ~]# systemctl start libvirtd.service
[root@kvm01 ~]# systemctl status libvirtd.service
[root@kvm01 /opt]#  netstat -lntup|grep 5900
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      7961/qemu-kvm 

KVM_第7张图片
image
KVM_第8张图片
image
KVM_第9张图片
image
KVM_第10张图片
image
KVM_第11张图片
image
KVM_第12张图片
image
virsh destroy centos7  #强制关机
virsh start centos7  #开机

virsh list    #查看运行或暂停中的虚拟机

安装完成后reboot后,手动重启kvm

virsh start centos7  #开机

KVM_第13张图片
image

连接成功

KVM_第14张图片
image

kvm虚拟机的virsh日常管理命令和配置

列表list(--all)
开机start
关机shutdown
拔电源关机destroy
重启reboot

导出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
删除undefine 推荐:先destroy,在undefine
导入配置define 
修改配置edit(自带语法检查)

重命名domrename (低版本不支持)
挂起suspend
恢复resume
查询vnc端口号vncdisplay

kvm虚拟机开机启动

console 控制台 登录
kvm运行业务程序
autostart

开机启动autostart,前提:systemctl enable libvirtd;
取消开机启动autostart --disable
centos7的kvm虚拟机:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"

迁移虚拟机

mkdir -p /data
virsh list 
virsh destroy centos7 
virsh list --all
mv /opt/centos2.raw /data/
virsh start centos7 
virsh edit centos7  ---> 
virsh start centos7 
virsh list --all
[root@kvm01 /opt]# virsh dumpxml centos7 |grep raw
      
      

修改kvm虚拟机名字

centos7改为centos2:

[root@kvm01 /opt]# virsh list 
 Id    Name                           State
----------------------------------------------------
 6     centos7                        running

[root@kvm01 /opt]# ls /data/
centos2.raw
[root@kvm01 /opt]# virsh destroy centos7 
Domain centos7 destroyed

[root@kvm01 /opt]# virsh domrename centos7 centos2
Domain successfully renamed

[root@kvm01 /opt]# virsh start centos2 
Domain centos2 started

[root@kvm01 /opt]# virsh list --all 
 Id    Name                           State
----------------------------------------------------
 7     centos2                        running

挂起与恢复kvm虚拟机

KVM_第15张图片
image
挂起:
[root@kvm01 /opt]# virsh suspend centos2 
Domain centos2 suspended

[root@kvm01 /opt]# virsh list --all 
 Id    Name                           State
----------------------------------------------------
 7     centos2                        paused

恢复:
[root@kvm01 /opt]# virsh resume centos2 
Domain centos2 resumed

[root@kvm01 /opt]# virsh list --all 
 Id    Name                           State
----------------------------------------------------
 7     centos2                        running

挂起的影响导致时间不同步了

image

利用ntpdate同步时间
ntpdate ntp1.aliyun.com

快速查看vnc端口

有了vncdisplay后,一次就能连接到想要的虚拟机,不用从5900一直尝试一台一台的找。

vncdisplay

[root@kvm01 /opt]# virsh vncdisplay centos2 
:0

KVM_第16张图片
image

用xshell连接kvm虚拟机

image

kvm虚拟机上不了网

在宿主机上:
[root@kvm01 /opt]# sysctl -a|grep ipv4|grep ip_forward
net.ipv4.ip_forward = 1

sysctl -p

kvm虚拟机开机自启动

autostart

[root@kvm01 /opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 7     centos2                        running

[root@kvm01 /opt]# virsh destroy centos2 
Domain centos2 destroyed

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

[root@kvm01 /opt]# virsh autostart centos2 
Domain centos2 marked as autostarted

[root@kvm01 /opt]# systemctl restart libvirtd.service
[root@kvm01 /opt]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     centos2                        running

其实是创建了软链接:
[root@kvm01 /opt]# ll -h /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx 1 root root 29 Sep  2 15:55 centos2.xml -> /etc/libvirt/qemu/centos2.xml

console登录

纯文字版的控制台

[root@kvm01 /opt]# virsh console centos2 
Connected to domain centos2
Escape character is ^]

# crtl + ] 退出

kvm虚拟机改内核参数命令

[root@localhost ~]# cp /boot/grub2/grub.cfg  /tmp/
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]# vim /boot/grub2/grub.cfg   #自动添加了内核参数

KVM_第17张图片
image

在宿主机上利用console登录kvm虚拟机

重启kvm虚拟机:
virsh destroy centos2   关闭kvm虚拟机
virsh start centos2    开启kvm虚拟机
virsh console centos2   在宿主机上用console登录

KVM_第18张图片
image

kvm虚拟机虚拟磁盘格式转换和快照管理

raw: 裸格式,占用空间比较大,不支持快照功能,不方便传输,性能较好,不方便传输 总50G 占用50G

qcow2: cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --
vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --
vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-
1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

磁盘工具的常用命令

qemu -img info,create,resize,convert

查看虚拟磁盘信息
qemu-img info test.qcow2

创建一块qcow2格式的虚拟硬盘:
qemu-img create -f qcow2 test.qcow2 2G

调整磁盘磁盘容量 只能扩容不能缩,数据会丢失,17楼见~
qemu-img resize test.qcow2 +20G

raw转qcow2:qemu-img convert -f raw -O qcow2 oldboy.raw oldboy.qcow2

 convert [-f fmt] [-O output_fmt] filename output_filename
-c 压缩
virsh edit web01
virsh destroy web01
virsh start web01

把磁盘格式改为qcow2格式

原格式是raw格式,远程复制的时候不方便,为了提高传输效率,可以转换为qcow2格式

[root@kvm01 /opt]# time qemu-img convert -f raw -O qcow2 /data/centos2.raw /data/centos2.qcow2

real    0m9.885s
user    0m0.780s
sys 0m8.982s

virsh destroy centos2   
virsh edit centos2 
  
  
virsh start centos2 
[root@kvm01 /opt]# virsh dumpxml centos2 |grep qcow2
      
      

[root@kvm01 /opt]# ll -h /data/
total 2.2G
-rw-r--r-- 1 qemu qemu 1.1G Sep  2 17:19 centos2.qcow2
-rw------- 1 root root  10G Sep  2 17:08 centos2.raw

KVM_第19张图片
image

快照管理

创建快照 virsh snapshot-create-as centos7 --name install_ok
查看快照 virsh snapshot-list centos7
还原快照 virsh snapshot-revert centos7 --snapshotname 1516574134
删除快照 virsh snapshot-delete centos7 --snapshotname 1516636570

raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中

快照存储的位置在虚拟磁盘中
qemu-img info /data/centos2.qcow2

创建快照
[root@kvm01 ~]# virsh snapshot-create-as centos2  --name --name install_nginx
Domain snapshot 1567416293 created

查看快照
[root@kvm01 /opt]# virsh snapshot-list centos2 
 Name                 Creation Time             State
------------------------------------------------------------
 1567416293           2019-09-02 17:24:53 +0800 running
 install_nginx        2019-09-02 17:40:43 +0800 running

还原快照
virsh snapshot-revert centos2 --snapshotname install_nginx

删除快照
virsh snapshot-revert centos2 --snapshotname install_nginx

kvm虚拟机克隆

完整克隆

自动挡:
virt-clone --auto-clone -o web01 -n web02 (完整克隆)

手动挡:

cp centos2-clone.qcow2 web02.qcow2 
virsh dumpxml web01 >web02.xml 
vim web02.xml #修改虚拟机的名字 
#删除虚拟机uuid 
#删除mac地址 
#修改磁盘路径 
virsh define web02.xml 
virsh start web02

KVM_第20张图片
image

链接克隆

a:生成虚拟机磁盘文件

[root@kvm01 /data]# qemu-img create -f qcow2 -b web01.qcow2 web03.qcow2

b:生成虚拟机的配置文件

virsh dumpxml web01 >web03.xml 
vim web03.xml 
#修改虚拟机的名字 
web03 
#删除虚拟机uuid 
8e505e25-5175-46ab-a9f6-feaa096daaa4 
#删除mac地址 
 
#修改磁盘路径 


c:导入虚拟机并进行启动测试

virsh define web03.xml 
virsh start web03

全自动链接克隆脚本

[root@kvm01 scripts]# cat link_clone.sh 
#!/bin/bash 
old_vm=$1 
链接克隆: 
qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2 
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 -- 
noautoconsole 
4.8:kvm虚拟机的桥接网络 
默认的虚拟机网络是NAT模式,网段192.168.122.0/24 
4.8.1:创建桥接网卡 
创建桥接网卡命令 
virsh iface-bridge eth0 br0 
取消桥接网卡命令 
virsh iface-unbridge br0 
4.8.2 新虚拟机使用桥接模式 
默认NAT模式 
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 -- 
noautoconsole 
桥接模式 
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 -- 
noautoconsole 
问题1: 
如果虚拟机获取不到ip地址: 
new_vm=$2 
#a:生成虚拟机磁盘文件 
old_disk=`virsh dumpxml $old_vm|grep "/tmp/${new_vm}.xml 
#修改虚拟机的名字 
sed -ri "s#()(.*)()#\1${new_vm}\3#g" /tmp/${new_vm}.xml 
#删除虚拟机uuid 
sed -i '//d' /tmp/${new_vm}.xml 
#删除mac地址 
sed -i '/)#\1${disk_tmp}/${new_vm}.qcow2\3#g" 
/tmp/${new_vm}.xml 
#c:导入虚拟机并进行启动测试 
virsh define /tmp/${new_vm}.xml 
virsh start ${new_vm}

kvm虚拟机的桥接网络

默认的虚拟机网络是NAT模式,网段192.168.122.0/24

创建桥接网卡

创建桥接网卡命令

virsh iface-bridge eth0 br0

取消桥接网卡命令

virsh iface-unbridge br0

新虚拟机使用桥接模式

默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

创建链接克隆生成虚拟机磁盘文件
qemu-img  create  -f qcow2  -b 49-web01.qcow2 49-web04.qcow2

创建桥接网卡命令
virsh iface-bridge eth0 br0

新虚拟机使用桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network  bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

KVM_第21张图片
image
KVM_第22张图片
image

桥接和NAT原理图

KVM_第23张图片
image

将已有虚拟机网络修改为桥接模式

a:关机状态下修改虚拟机配置文件:
例如:virsh edit centos7
 


b:启动虚拟机,测试虚拟机网络


  
  

热添加技术

热添加硬盘、网卡、内存、cpu

kvm热添加硬盘

临时生效

virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2

永久生效 --config

virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 --config

临时剥离硬盘

virsh detach-disk web01 vdb

永久剥离硬盘

virsh detach-disk web01 vdb --config

扩容:

virsh shutdown web05
qemu-img resize web05.qcow2 100G
qemu-img info web05.qcow2 
virsh console web05

进入到kvm虚拟机
[root@localhost ~]# fdisk -l
[root@localhost ~]# mkfs.xfs  /dev/vdb
[root@localhost ~]# mount /dev/vdb /mnt/
/dev/vdb        100G   33M  100G   1% /mnt

kvm虚拟机硬盘扩容规范

1.在kvm虚拟机里把扩容盘的挂载目录,卸载掉
[root@localhost ~]# umount /mnt

2.在宿主机上剥离硬盘
[root@kvm01 /data]# virsh detach-disk web05 vdb
Disk detached successfully

3.在宿主机上调整容量
[root@kvm01 /data]# qemu-img resize web05.qcow2 200G
Image resized.

4.在宿主机上再次附加硬盘
[root@kvm01 /data]# virsh attach-disk web05 /data/web05.qcow2 vdb --subdriver qcow2
Disk attached successfully

5.在虚拟机里再次挂载扩容盘
[root@localhost ~]# mount /dev/vdb /mnt
[root@localhost ~]# df -h
/dev/vdb        100G   33M  100G   1% /mnt

6.在虚拟机里用xfs_growfs更新扩容盘超级块信息
[root@localhost ~]# xfs_growfs /dev/vdb 
data blocks changed from 26214400 to 52428800
[root@localhost ~]# df -h
/dev/vdb        200G   33M  200G   1% /m    扩容为200G

练习扩容kvm虚拟机的根分区

链接

关闭虚拟机
shutdown -h now

在宿主机上执行操作
[root@kvm01 /data]# qemu-img resize web04.qcow2 50G
[root@kvm02 /data]# qemu-img info web04.qcow2
image: web04.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 439M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

[root@kvm02 /data]# virsh start web04
[root@kvm02 /data]# virsh console web04 
Connected to domain web04
Escape character is ^]
...
[root@localhost ~]#  df -h
[root@localhost ~]#  fdisk -l 
[root@localhost ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Selected partition 1
Partition 1 is deleted

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-104857599, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): 
Using default value 104857599
Partition 1 of type Linux and of size 50 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

[root@localhost ~]# reboot      重新添加分区后重启
[root@localhost ~]# xfs_growfs /dev/vda1    更新超级块
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  915M   50G   2% /


kvm虚拟机在线热添加和删除网卡

创建虚拟机:
[root@kvm01 /data]# virsh destroy web04
[root@kvm01 /data]# virsh undefine web04
[root@kvm01 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

在宿主机上添加网卡:
virsh attach-interface web04 bridge br0
virsh attach-interface web04 bridge br0 --model  virtio
# --model virtio    此产参数可以修改网卡名称为eth*

在宿主机上删除网卡:删除虚拟机每张网卡的mca地址
virsh detach-interface web04 bridge --mac 52:54:00:68:68:40
virsh detach-interface web04 bridge --mac 52:54:00:a8:72:44
# 只剩下一块网卡时不需要加mac地址,直接删除即可

上面的操作临时生效,下次重启后恢复,可以添加--config参数使永久生效
virsh attach-interface web04 bridge br0 --model  virtio --config

KVM_第24张图片
image
KVM_第25张图片
image

kvm虚拟机在线热添加内存

临时热添加内存
virsh setmem web03 1024M 
永久增大内存
virsh setmem web03 1024M --config

删除web03这台虚拟机:
[root@kvm02 /data]# virsh destroy web03
[root@kvm02 /data]# virsh undefine web03 

再次创建web03虚拟机 设置最大内存maxmemory=2048:
[root@kvm02 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm02 /data]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     web04                          running
 4     web03                          running

连接web03查看内存情况
[root@kvm02 /data]# virsh console web03 
...
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            465          63         297           8         104         280
Swap:             0           0           0

在宿主机上修改内存大小为1024M
[root@kvm02 /data]# virsh setmem web03 1024M

在web03虚拟机上查看内存已经变大了
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            977          63         808           8         104         791
Swap:             0           0           0

再增加为2048M
[root@kvm02 /data]# virsh setmem web03 2048M

再次查看虚拟机内存变大了
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           2001          63        1832           8         104        1816
Swap:             0           0           0

1.如果修改的内存超过了设置的最大值,则报错
[root@kvm02 /data]# virsh setmem web03 4096M
error: invalid argument: cannot set memory higher than max memory

2.如果将虚拟机关机后增加内存是可以调整的,但是超过宿主机的最大内存的话,会导致不能启动
3.如果修改的内存过小,则会让虚拟机奔溃掉

kvm虚拟机在线热添加cpu

setvcpus    核心数
setvcpu     特性

热添加cpu核数
virsh setvcpus web04 4 
永久添加cpu核数
virsh setvcpus web04 4 --config

KVM_第26张图片
image
先把虚拟机web03删除掉:
virsh destroy web03 
virsh undefine web03 

创建web03虚拟机:
[root@kvm02 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

登录到虚拟机web03查看cpu核心数
[root@kvm02 /data]# virsh console web03 
...
[root@localhost ~]# lscpu |head -5
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1    #当前为1核心
On-line CPU(s) list:   0

在宿主机上增加web03虚拟机的cpu核心数为2核
[root@kvm02 /data]# virsh setvcpus web03 2

查看虚拟机web03的cpu核心数
[root@localhost ~]# lscpu |head -5
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2        #改为2核心
On-line CPU(s) list:   0,1

修改虚拟机的cpu核心数为4核
[root@kvm02 /data]# virsh setvcpus web03 4

再次查看虚拟机cpu
[root@localhost ~]# lscpu |head -5
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3

KVM_第27张图片
image.png

热迁移 (共享的网络文件系统)

kvm虚拟机热迁移资料—强哥
web04.qcow2 的环境下载链接: 提取码: sw23

冷迁移
1.关机
2.备份配置文件
3.scp传输配置文件和磁盘文件,传输到新的宿主机
4.virsh define web04.xml
5.启动

热迁移
kvm虚拟机:配置文件,nfs共享


详细步骤

环境要求:
主机名 ip 内存 网络 软件需求 虚拟化
kvm01 10.0.0.11 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
kvm02 10.0.0.12 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
nfs01 10.0.0.31 1G nfs

kvm虚拟机热迁移大体步骤规划

  • 两边的环境(桥接网卡)
  • 实现共享存储(nfs)
  • 虚拟机桥接网络
  • 在线热迁移

注意:需要互相做好host解析 ↓

不然后面可能有报错,会因为主机名重复吗,
修改主机名:
hostnamectl set-hostname kvm01 或 kvm02

kvm01和kvm02宿主机都添加host解析:
[root@kvm01 ~]# cat /etc/hosts
192.168.37.202 mirrors.aliyun.com
10.0.0.11 kvm01
10.0.0.12 kvm02

scp -rp /etc/hosts 10.0.0.12:/etc/

清理当前的宿主机环境,保证一个干净的环境测试

保留一个配置文件web04.qcow2,将/opt/下和/data/下的其余全部删除掉

[root@kvm01 ~]# rm -rf /opt/*
[root@kvm01 ~]# mv /data/web04.qcow2 /opt/
[root@kvm01 ~]# rm -rf  /data/*
[root@kvm01 ~]# mv /opt/web04.qcow2 /data/
[root@kvm01 ~]# ll /data/
total 450688
-rw-r--r-- 1 qemu qemu 459800576 Sep  3 17:08 web04.qcow2

删除所有的配置文件:
[root@kvm01 /data]# rm -rf /etc/libvirt/qemu/*.xml
[root@kvm01 /data]# systemctl restart libvirtd
[root@kvm01 /data]# virsh list --all
 Id    Name                           State
----------------------------------------------------
\\没有虚拟机了

#想kvm01宿主机关机
[root@kvm01 /data]# shutdown -h now


调整宿主机 并克隆第二台kvm02宿主机和nfs01共享主机

调整内存大小后,克隆两台主机,分别为kvm02和nfs01

KVM_第28张图片
image
image

开机后修改IP地址并重启网卡

因为是桥接网卡,索引网卡修改路径是
vim /etc/sysconfig/network-scripts/ifcfg-br0
systemctl restark network

kvm01 默认 10.0.0.11
kvm02 修改为10.0.0.12
nfs01 修改为10.0.0.31

给三台主机同时安装nfs环境

yum install nfs-utils rpcbind 

如果没有网络可能是dhcp的原因,暂时关掉

KVM_第29张图片
image

配置nfs服务端(nfs01上)

添加配置文件(async异步同步,性能更高)
[root@nfs01 ~]# vim /etc/exports
/data  10.0.0.0/24(rw,async,no_root_squash,no_all_squash)

重启
[root@nfs01 ~]# systemctl restart rpcbind
[root@nfs01 ~]# systemctl restart nfs

创建/data目录
[root@nfs01 ~]# mkdir /data

去kvm01和02上检查是否连接nfs
[root@kvm01 /data]#  showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 10.0.0.0/24

[root@kvm02 /data]#  showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 10.0.0.0/24

挂载并测试

kvm01上:
[root@kvm01 ~]# mount -t nfs 10.0.0.31:/data/ /data/
[root@kvm01 ~]# df -h
10.0.0.31:/data   48G  2.2G   46G   5% /data

kvm02上:
[root@kvm02 /data]# mount -t nfs 10.0.0.31:/data/ /data/
[root@kvm02 /data]# df -h
10.0.0.31:/data   48G  2.2G   46G   5% /data

查看nfs01的/data目录是否同步之前的文件:
[root@nfs01 ~]# ll -h /data/
total 446M
-rw-r--r-- 1 107 107 6.3M Sep  3 22:14 web03.qcow2
-rw-r--r-- 1 107 107 439M Sep  3 22:24 web04.qcow2

将虚拟机从kvm02宿主机迁移到kvm01宿主机上

虚拟机都在kvm02上:
[root@kvm02 /data]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web04                          running
 6     web03                          running

当前的kvm01上没有虚拟机:
[root@kvm01 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------

执行迁移的命令 (将kvm02上的web03迁移到10.0.0.11宿主机上)
[root@kvm02 /data]# virsh migrate --live --verbose web03 qemu+ssh://10.0.0.11/system --unsafe
[email protected]'s password: 
Migration: [100 %]

在kvm01上查看web03虚拟机已迁移过来了
[root@kvm01 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 3     web03                          running

登录web03上修改网卡配置文件
[root@kvm01 ~]# virsh console web03 
[root@localhost ~]# sed -i 's#dhcp#static#' /etc/sysconfig/network-scripts/ifcfg-eth0

添加下面的内容到网卡配置中
IPADDR=10.0.0.129
GATEWAY=10.0.0.254
NETMASK=255.255.255.0
DNS1=223.5.5.5

重启网卡
systemctl restart network

再次将迁移过到kvm01上的web03虚拟机迁移回kvm02上

迁移到10.0.0.12的kvm02宿主机上:
[root@kvm01 ~]# virsh migrate --live --verbose web03 qemu+ssh://10.0.0.12/system --unsafe
[email protected]'s password: 
Migration: [100 %]
[root@kvm01 ~]# virsh list
 Id    Name                           State
----------------------------------------------------

在kvm02宿主机上查看已经迁移回来了:
[root@kvm02 /data]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web04                          running
 7     web03                          running

迁移过程中会丢包

KVM_第30张图片
image

安装ESXI并安装一台虚拟机

安装ESXI

新建虚拟机

KVM_第31张图片
image

添加镜像
镜像网盘提取码: mhtx
VMware-viclient网盘下载链接 提取码: jfcr

KVM_第32张图片
image
KVM_第33张图片
image
KVM_第34张图片
image
KVM_第35张图片
image
KVM_第36张图片
image
KVM_第37张图片
image
KVM_第38张图片
image
KVM_第39张图片
image
KVM_第40张图片
image
KVM_第41张图片
image
KVM_第42张图片
image
KVM_第43张图片
image
KVM_第44张图片
image
KVM_第45张图片
image
KVM_第46张图片
image
KVM_第47张图片
image
KVM_第48张图片
image

用VMware vSphere软件连接

KVM_第49张图片
image
KVM_第50张图片
image
KVM_第51张图片
image
KVM_第52张图片
image
KVM_第53张图片
image
KVM_第54张图片
image
KVM_第55张图片
image
KVM_第56张图片
image
KVM_第57张图片
image
KVM_第58张图片
image
KVM_第59张图片
image
KVM_第60张图片
image
KVM_第61张图片
image
image
KVM_第62张图片
image
KVM_第63张图片
image

ESXI的常用配置

开启ssh功能

KVM_第64张图片
image
KVM_第65张图片
image
KVM_第66张图片
image

点击启动后去控制台操作

KVM_第67张图片
image

下面是按照centos6的步骤

KVM_第68张图片
image
KVM_第69张图片
image
KVM_第70张图片
image
KVM_第71张图片
image
KVM_第72张图片
image
KVM_第73张图片
image
KVM_第74张图片
image
KVM_第75张图片
image
KVM_第76张图片
image
KVM_第77张图片
image
KVM_第78张图片
image
KVM_第79张图片
image
KVM_第80张图片
image
KVM_第81张图片
image

等待安装好后就可以操作使用了

练习

将kvm虚拟机迁移到esxi上

qemu-img convert -f qcow2 oldimage.qcow2 -O vmdk newimage.vmdk
#可能不需要
vmkfstools -i oldimage.vmdk newimage.vmdk -d thin

将ESXI虚拟机迁移到kvm上

将虚拟机导出ova文件
virt-v2v -i ova centos-dev-test01-v2v.ova -o local -os /opt/test -of qcow2

问题与需求总结

kvm宿主机 2000台
查看每一个宿主机有多少台虚拟机?
查看每一个宿主机还剩多少资源?
查看每一台宿主机,每一个虚拟机的ip地址? excel 资产管理
kvm管理平台,数据库工具
信息:宿主机,总配置,剩余的总配置
虚拟机的信息,配置信息,ip地址,操作系统
带计费功能的kvm管理平台,openstack ceilometer计费 ecs IAAS层
自动化管理kvm宿主机,云主机定制化操作
服务器, 20核心 1T内存 96T
资源浪费,linux环境特别乱,,kvm虚拟机

你可能感兴趣的:(KVM)