KVM安装与简单功能
一、kvm虚拟化管理软件的安装
1.安装KVM
虚拟化工具
关闭防火墙和selinux
# 1.做host劫持 添加源
[root@xshell ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@xshell ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@xshell ~]# yum makecache
# 2.安装软件
[root@xshell ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install openssh-askpass -y
# 3.解释
1.KVM:Kernel-based Virtual Machine libvirt 作用:虚拟机的管理软件,管理虚拟机的生命周期
2.libvirt:kvm,xen,qemu,lxc.... virt virt-install virt-clone 作用:虚拟机的安装工具和克隆工具
3.virt-manager 图形化管理虚拟机工具
4.qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘,可以虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等
5.openssh-askpass 远程连接KVM主机
KVM是linux内核的一个模块,模块不需要安装只需要加载,通过用户态程序来管理即可
[root@xshell ~]# lsmod|grep kvm
kvm_intel 148081 0
kvm 461126 1 kvm_intel
2.启动libvirt
管理KVM
工具
[root@xshell ~]# systemctl start libvirtd.service
[root@xshell ~]# systemctl enable libvirtd.service
#注意: 启动后会新增一块virbr0网络
二、创建KVM虚拟机
1.下载镜像包
TightVNC或者VNC Viewer 4.exe 宿主机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
# 1.下载镜像包centos7 放入/opt
[root@xshell /opt]# ll /opt
-rw-r--r-- 1 root root 4588568576 Jan 3 17:28 CentOS-7-x86_64-DVD-1810.iso
# 2.下载
[root@xshell ~]# 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 系统版本
--name centos7 虚拟机的名字
--memory 1024 虚拟机的内存
--vcpus 1 虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10 虚拟机磁盘大小
-cdrom /opt/CentOS-7-x86_64-DVD-1810.iso 镜像路径
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 信号转接vnc
--noautoconsole
# 3.vnc服务端端口
[root@xshell ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 2801/qemu-kvm
2.配置vnc
不加端口也可以
3.配置虚拟机
三、KVM 虚拟机常用管理命令
1.查看虚拟机
# 查看正在运行的虚拟机
virsh list
# 查看所有的虚拟机
virsh list --all
2.开启虚拟机
# 开启虚拟机
virsh start centos7
3.重启虚拟机
# 重启
virsh reboot centos7
4.关闭虚拟机
# 正常关机
virsh shutdown centos7
# 暴力关机 直接拔电源那种
virsh destroy centos7
5.查看配置文件
# 打印所有配置文件
virsh dumpxml centos7
6.导出配置文件
只要有磁盘文件和配置文件就可以迁移到其他机器
# 直接导入打开 不用装系统了
virsh dumpxml centos7 >centos7.xml
7.导入虚拟机
需要把导出的配置文件和磁盘文件一起放在相同目录下
并且会在/var/lib 目录下生成配置文件
# 导入虚拟机
virsh define centos7.xml
[root@xshell /opt]# ls /etc/libvirt/qemu
centos7.xml networks
8.删除虚拟机
# 暴力关
virsh destroy centos7
# 删除 但是磁盘文件还在
virsh undefine centos7
9.主机重命名
# 关机状态下重命名
virsh domrename centos7 web-blog
10.主机挂起
# 域 web-blog 被挂起
virsh suspend web-blog
[root@xshell ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 web-blog paused
11.主机恢复
# 域 web-blog 被重新恢复
virsh resume web-blog
[root@xshell ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 web-blog running
注意:挂起之后再恢复,会出现时间不同步问题!!!
云主机要做的优化有一个就是时间同步,可以添加在定时任务里,自动同步阿里云或者腾讯云时间。
12. kvm 虚拟机开机启动
# 域 web-blog 标记为自动开始
virsh autostart web-blog
# 测试能否开机自启
[root@xshell ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 web-blog running
2 web-www running
[root@xshell ~]# virsh shutdown web-blog
[root@xshell ~]# virsh shutdown web-www
[root@xshell ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- web-blog shut off
- web-www shut off
# 重启 libvirtd 服务
[root@xshell ~]# systemctl restart libvirtd.service
[root@xshell ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 web-blog running
- web-www shut off
13.查看哪些虚拟机是开机自启动
# 本质是软链接,只要存在这个软链接,就会开机自启动
[root@xshell ~]# ll /etc/libvirt/qemu/autostart/
lrwxrwxrwx 1 root root 30 12 月 11 11:47 web-blog.xml -> /etc/libvirt/qemu/web-blog.xml
四、生产故障
**问题背景: **
关一台少一台
**问题原因: **
开机情况下 undefine 掉虚拟机,虽然虚拟机还会运行,但是目录下的配置文件没了
此时再关机就会导致虚拟机直接没了
undefine 其实删的是配置文件
只要进程还在,虚拟机就会运行
操作步骤:
# 1.查看虚拟机
[root@xshell /opt]# virsh list --all
Id 名称 状态
----------------------------------------------------
3 centos7 running
# 2.查看配置文件还在的
[root@xshell /opt]# ls /etc/libvirt/qemu
centos7.xml networks
# 3.没正常关机 直接暴力关
[root@xshell /opt]# virsh undefine centos7
# 4.查看虚拟机 还是有的
[root@xshell /opt]# virsh list --all
Id 名称 状态
----------------------------------------------------
3 centos7 running
# 5.查看配置文件已经没了
[root@xshell /opt]# ls /etc/libvirt/qemu
networks
# 6.正常关机之后
[root@xshell /opt]# virsh shutdown centos7
域 centos7 被关闭
# 7.虚拟机丢失
[root@xshell /opt]# virsh list --all
Id 名称 状态
----------------------------------------------------
五、小项目
项目背景:
磁盘空间不足,需要迁移磁盘文件,但是配置文件里的路径需要修改
建议使用 edit 命令编辑,可以检查语法
virsh edit centos7
**操作步骤: **
# 1.虚拟机关闭状态下编辑
[root@xshell /opt]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7 shut off
# 2.编辑配置文件
[root@xshell /opt]# virsh edit centos7
-----------------------------------
<source file='/data/centos7.raw'/>
-----------------------------------
# 3.移动磁盘文件到/data 目录
[root@xshell /opt]# mkdir /data
[root@xshell /opt]# mv /opt/centos7.raw /data/
# 4.启动虚拟机
[root@xshell /data]# virsh start centos7
# 5.查看虚拟机
[root@xshell /data]# virsh list
Id 名称 状态
----------------------------------------------------
7 centos7 running
六、连接 KVM 虚拟机
1.VNC
# 查看 VNC 端口号
[root@xshell ~]# virsh list
Id Name State
----------------------------------------------------
2 centos7 running
[root@xshell ~]# virsh vncdisplay centos7
:0 # 0的意思就是端口590后面+0 5900
2.SSH
[root@xshell ~]# ssh 192.168.122.138 #kvm的ip
root@192.168.122.138's password:
Last login: Mon Jan 6 15:55:22 2020 from gateway
[root@local ~]#
3.console显示
# 登录进需要开启console的虚拟机并添加参数
[root@xshell ~]# ssh 192.168.122.138
root@192.168.122.138's password:
Last login: Mon Jan 6 16:09:22 2020 from gateway
[root@local ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8" #修改内核参数
[root@local ~]# grep "115200" /boot/grub2/grub.cfg
[root@local ~]# reboot
# 再次使用 console 登陆,然后多按几次回车
[root@xshell ~]# 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
local login: root
密码:
Last login: Mon Jan 6 16:13:06 on ttyS0
[root@local ~]#
# 退出
ctrl+]
七、KVM 磁盘管理
创建命令里面有个参数 ,format=
# 磁盘格式
raw:裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输。总50G,占用2G,传送50G。
qcow2:cow(copy on write)写时复制,占用空间小,支持快照,性能比raw差一点,方便传输。。
1.查看磁盘信息
[root@xshell ~]# qemu-img info /data/centos7.raw
image: /data/centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 2.0G
2.创建磁盘
# 创建qcow2磁盘
[root@xshell ~]# qemu-img create -f qcow2 /data/centos7.qcow2 1G
# 查看磁盘信息
[root@xshell ~]# qemu-img info /data/centos7.qcow2
image: /data/centos7.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
# 查看磁盘实际占用空间
[root@xshell ~]# ls -lh /data/
total 2.1G
-rw-r--r-- 1 root root 193K Jan 6 16:52 centos7.qcow2 #实际193k
-rw------- 1 qemu qemu 10G Jan 6 16:48 centos7.raw #看不到实际
3.调整磁盘容量,只能加不能减
[root@xshell ~]# qemu-img resize /data/centos7.qcow2 10G
[root@xshell ~]# qemu-img info /data/centos7.qcow2
image: /data/centos7.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
4.磁盘格式转换
操作步骤:
1.将虚拟机关机
2.转换磁盘格式
3.编辑配置文件修改为 qcow2 格式
# 关机
[root@xshell ~]# virsh shutdown centos7
# 转换格式
[root@xshell ~]# qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow2
# 修改配置文件
[root@xshell ~]# virsh edit centos7
<driver name='qemu' type='qcow2'/>
<source file='/data/centos7.qcow2'/>
# 启动虚拟机
[root@xshell ~]# virsh start centos7
# 查看虚拟机
[root@xshell ~]# virsh list
Id Name State
----------------------------------------------------
3 centos7 running
# 然后进入虚拟机 dd 生成文件
[root@xshell ~]# virsh console centos7
[root@local ~]#
[root@local ~]# dd if=/dev/zero of=/opt/test.raw bs=500M count=1
[root@xshell ~]# ll -h /data/centos7.qcow2
-rw-r--r-- 1 qemu qemu 2.5G Jan 6 17:19 /data/centos7.qcow2 #多了500M
八、KVM 快照管理
raw 格式不支持做快照,qcow2 格式快照就保存在本地,后面的数字是 unix 时间戳
1.创建快照
[root@xshell data]# virsh snapshot-create-as centos7 --name int_ok
Domain snapshot int_ok created
2.查看快照
[root@xshell data]# virsh snapshot-list centos7
Name Creation Time State
------------------------------------------------------------
int_ok 2020-01-06 17:25:37 +0800 running
3.还原快照
[root@xshell data]# virsh snapshot-revert centos7 --snapshotname int_ok
4.删除快照
[root@xshell data]# virsh snapshot-delete centos7 --snapshotname int_ok
Domain snapshot int_ok deleted
九、KVM 虚拟机克隆
1.完整克隆
自动克隆
# 1.停虚拟机 必须暂停或者关闭有要克隆设备的域。
[root@xshell data]# virsh shutdown centos7
# 2.克隆
[root@xshell data]# virt-clone --auto-clone -o centos7 -n centos7_buckup
# 3.查看所有虚拟机
[root@xshell data]# virsh list --all
Id Name State
----------------------------------------------------
- centos7 shut off
- centos7_buckup shut off
# 4.查看配置文件
[root@xshell data]# virsh dumpxml centos7_buckup |grep "qcow2"
<driver name='qemu' type='qcow2'/>
<source file='/data/centos7_buckup.qcow2'/>
# 5.查看空间 发现比原来的小
[root@xshell data]# ls -lh /data/centos7*
-rw------- 1 root root 2.0G Jan 6 17:37 /data/centos7_buckup.qcow2
-rw-r--r-- 1 root root 2.7G Jan 6 17:34 /data/centos7.qcow2
-rw------- 1 root root 10G Jan 6 17:08 /data/centos7.raw
# 6.查看快照发现并没有把原来机器的快照一起复制过来
[root@xshell data]# virsh snapshot-list centos7_buckup
Name Creation Time State
------------------------------------------------------------
完整克隆的时候 会做一次压缩 所以克隆过来的空间比之前的大
快照不能被克隆
2.链接克隆
只能手动做 没有自动工具
# 1.关机
[root@xshell data]# virsh shutdown centos7
# 2.生成虚拟机磁盘文件
[root@xshell data]# qemu-img create -f qcow2 -b centos7.qcow2 centos7-clone.qcow2
# 3.查看克隆后磁盘信息
[root@xshell data]# qemu-img info centos7-clone.qcow2
image: centos7-clone.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: centos7.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
# 4.复制一下配置文件
[root@xshell data]# virsh dumpxml centos7 > centos7-clone.xml
# 5.重命名虚拟机名称、删除 uid 、删除 mac 地址、修改磁盘地址
[root@xshell data]# sed -i '/uuid/d' centos7-clone.xml
[root@xshell data]# sed -i '/mac address/d' centos7-clone.xml
[root@xshell data]# sed -i 's#centos7.qcow2#centos7-clone.qcow2#g' centos7-clone.xml
[root@xshell data]# sed -i '/\<nam/s#centos7#centos7-clone#g' centos7-clone.xml
# 6.导入配置文件
[root@xshell data]# virsh define centos7-clone.xml
# 7.启动虚拟机
[root@xshell data]# virsh start centos7-clone
[root@xshell data]# virsh list --all
Id Name State
----------------------------------------------------
4 centos7-clone running
- centos7 shut off
- centos7_buckup shut off
3.自动链接克隆虚拟机脚本
#!/bin/bash
old_vm=$1
new_vm=$2
#关机:
virsh shutdown $1
#a:生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2
#b:生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\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 。
如果使用NAT模式,外界访问虚拟机上跑的业务需要宿主机做端口映射,但是虚拟机特别多的情况下,都要占用80端口就没办法做端口映射了,这个时候就可以用桥接网络,直接外界访问虚拟机。(生产环境常用桥接模式)
1.创建新虚拟机的桥接网络
# 1.创建桥接网卡
[root@xshell data]# virsh iface-bridge ens33 br0
virsh iface-unbridge br0(取消桥接网卡 )
# 2.查看网卡配置
[root@xshell ~]# ifconfig
br0: 10.0.0.100
[root@xshell ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE="br0"
[root@xshell ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
OTPROTO=none
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
STP=on
DELAY=0
# 3.链接克隆一台新磁盘
[root@xshell data]# qemu-img create -f qcow2 -b centos7.qcow2 bridge.qcow2
# 4.创建新虚拟机
[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-bridge --memory 1024 --vcpus 1 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 5.查看虚拟机
[root@xshell data]# virsh list
Id Name State
----------------------------------------------------
1 centos7 running
2 centos7-bridge running
# 6.进入kvm查看ip 发现没有ip
[root@xshell data]# virsh console centos7-bridge
[root@local ~]# ip a
# 7.vm启用一下dhcp
# 8.自动获取ip
[root@local ~]# dhclient
[root@local ~]# ip a
eth0: 10.0.0.2
# 9.远程连接
[g:\~]$ ssh root@10.0.0.2
[root@local ~]# lscpu|grep -i kvm
超管理器厂商: KVM
2.现有NAT网络转换为桥接网络
# 1.修改配置文件
[root@xshell data]# virsh edit centos7
搜mac 改这两行
<interface type='bridge'> #类型桥接
<source bridge='br0'/> #你创建的桥接网卡
十一、 KVM 虚拟机热添加技术
1.热添加硬盘
# 1.创建一个硬盘 给centos7加一块10G
[root@xshell data]# qemu-img create -f qcow2 centos7-add.qcow2 10G
# 2.添加硬盘
[root@xshell data]# virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2 [临时添加]
[root@xshell data]# virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2 --config [永久添加]
# 3.剥离硬盘
[root@xshell data]# virsh detach-disk centos7 vdb [临时剥离]
[root@xshell data]# virsh detach-disk centos7 vdb [永久剥离]
新硬盘如果要使用,应该格式化,挂载
# 4.格式化硬盘
[root@local ~]# mkfs.xfs /dev/vdb [格式化的时候就在分inode和block]
# 5.挂载
[root@local ~]# mount /dev/vdb /mnt/
[root@local ~]# df -h |tail -1
/dev/vdb 10G 33M 10G 1% /mnt
kvm硬盘扩容 :因为这个盘后面可能不够了,但是在再添加新盘不在同个目录下,所以可以扩容
kvm扩容一定要规范操作!!!!!!!
# 6.测试扩容里面文件会不会丢
[root@local ~]# cp /etc/services /mnt/
[root@local ~]# ll /mnt
-rw-r--r--. 1 root root 670293 1月 7 09:01 services
# 7.停止挂载
[root@local ~]# umount /mnt/
# 8.剥离磁盘
[root@xshell data]# virsh detach-disk centos7 vdb
# 9.扩容
[root@xshell data]# qemu-img resize /data/centos7-add.qcow2 +20G
# 10.查看下磁盘现大小
[root@xshell data]# qemu-img info /data/centos7-add.qcow2
image: /data/centos7-add.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes) # 之前10G+20G
disk size: 28M
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
# 11.把磁盘添加进去
[root@xshell data]# virsh attach-disk centos7 /data/centos7-add.qcow2 vdb --subdriver qcow2
# 12.进虚拟机查看磁盘大小 变为30G
[root@local ~]# fdisk -l /dev/vdb
磁盘 /dev/vdb:32.2 GB
# 13.不需要格式化了 直接挂载 原来数据还在
[root@local ~]# mount /dev/vdb /mnt/
[root@local ~]# ll /mnt
-rw-r--r--. 1 root root 670293 1月 7 09:01 services
# 14.查看挂载信息 发现可用容量还是扩容前的
[root@local ~]# df -h |tail -1
/dev/vdb 10G 33M 10G 1% /mnt
# 15.更新分区表
[root@local ~]# xfs_growfs /dev/vdb
meta-data=/dev/vdb isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 7864320
[root@local ~]# df -h |tail -1
/dev/vdb 30G 34M 30G 1% /mnt
如果ext4 的分区命令需要使用 resize2fs resize2fs /dev/vdb
2.热添加网卡
# 1.添加网卡 [永久添加在后面加--config]
[root@xshell data]# virsh attach-interface centos7 --type bridge --source br0 --model virtio
--type bridge:桥接类型
--model virtio:如果不加这个参数也可以创建一个网卡 只不过网卡是ens的 rtl8139(瑞昱RTL 8139)
# 2.添加NAT网络网卡
[root@xshell data]# virsh attach-interface centos7 --type network --source default --model virtio
# 3.剥离网卡
[root@xshell data]# virsh detach-interface centos7 network
error: Domain has 2 interfaces. Please specify which one to detach using --mac
error: Failed to detach interface
[直接指定类型剥离会报错 因为有多块 这个时候要在后面加上mac地址]
[root@xshell data]# virsh detach-interface centos7 network --mac 52:54:00:b6:4f:9d
3.热添加内存
# 1.创建虚拟机 多加一个参数
[root@xshell data]# virsh undefine centos7_buckup
Domain centos7_buckup has been undefined
[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7_buckup --memory 512,maxmemory=2048 --vcpus 1 --disk /data/centos7_buckup.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 2.进centos7_buckup虚拟机查看内存
[root@local ~]# free -m
total used free shared buff/cache available
Mem: 463 105 229 8 127 204
Swap: 1023 0 1023
# 3.添加内存 最大就是你创建虚拟机时设置的2048 [永久--config]
[root@xshell data]# virsh setmem centos7_buckup 1024M --live
[root@local ~]# free -m
total used free shared buff/cache available
Mem: 975 106 740 8 127 715
Swap: 1023 0 1023
# 4.减内存
[root@xshell data]# virsh setmem centos7_buckup 512M --live
[root@local ~]# free -m
total used free shared buff/cache available
Mem: 463 105 229 8 127 203
Swap: 1023 0 1023
4.热添加CPU
# 1.创建虚拟机 多加一个参数
[root@xshell data]# virsh undefine centos7_buckup
Domain centos7_buckup has been undefined
[root@xshell data]# virsh destroy centos7_buckup
Domain centos7_buckup destroyed
[root@xshell data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7_buckup --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/centos7_buckup.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 2.添加cpu [永久 --config]
[root@xshell data]# virsh setvcpus centos7_buckup 4 --live
# 3.进centos7_buckup虚拟机查看cpu
[root@local ~]# 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冷添加CPU
#编辑配置文件
virsh edit centos7
------------------------------------------------
<vcpu placement='static' current='2'>4</vcpu>
------------------------------------------------
#添加cpu核数
virsh setvcpus centos7 4 --live
#永久添加cpu核数
setvcpus centos7 4 --config
十二、KVM 虚拟机迁移
环境:新克隆一个虚拟机,然后删除/data 和/opt 下所有的文件,然后批量删除所有的虚拟机
主要靠nfs共享 这里我再起一个nfs服务器
virsh undefine $(virsh list --all|awk 'NR>1{print $2}')
1)准备两台kvm宿主机,配置桥接网络,nfs客户端
2)安装nfs服务端
3)kvm宿主机挂载nfs服务端,挂载点一定要是同一个目录
4)启动一台新虚拟机,该虚拟机磁盘文件存储在共享存储上
5)命令行热迁移
6)安装图形界面 virt-manager
# 1.安装nfs 三个服务器都装
yum install nfs-utils -y
# 2.nfs配置文件
[root@nfs ~]# vim /etc/exports
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)#不做gid,uid,因为在nfs上没有qemu用户
# 3.重启
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl restart nfs
# 4.查看挂载信息 两个服务器都查看
[root@xshell ~]# showmount -e 10.0.0.5
Export list for 10.0.0.5:
/data 10.0.0.0/24
# 5.挂载
[root@xshell ~]# mount -t nfs 10.0.0.5:/data /opt
[root@xshell2 ~]# mount -t nfs 10.0.0.5:/data /opt
# 6.拷贝个文件去挂载目录
[root@xshell ~]# ll /data
-rw-r--r-- 1 root root 8650752 Jan 6 20:34 bridge.qcow2
-rw-r--r-- 1 qemu qemu 13238272 Jan 7 09:13 centos7-add.qcow2
-rw------- 1 root root 2086141952 Jan 7 10:58 centos7_buckup.qcow2
-rw-r--r-- 1 root root 8192000 Jan 6 18:25 centos7-clone.qcow2
-rw-r--r-- 1 root root 4060 Jan 6 18:01 centos7-clone.xml
-rw-r--r-- 1 qemu qemu 2841509888 Jan 7 17:03 centos7.qcow2
-rw------- 1 root root 10737418240 Jan 6 17:08 centos7.raw
[root@xshell ~]# cp /data/bridge.qcow2 /opt
# 7.创建这个centos7-clone虚拟机
[root@xshell ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-qianyi --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
# 8.查看虚拟机 成功
[root@xshell ~]# virsh list --all
Id Name State
----------------------------------------------------
10 centos7-qianyi running
# 9.热迁移的命令
[root@xshell ~]# virsh migrate --live --verbose centos7-qianyi qemu+ssh://10.0.0.101/system --unsafe
十三、在kvm01上安装图形界面、vnc服务端和virt-manager
yum groups install "GNOME Desktop" -y
yum install tigervnc-server.x86_64 -y
yum install virt-manager -y
# 启动vnc服务端
vncserver :1 启动5901端口的vnc服务端
vncserver -kill :1 关闭5901端口的vnc服务端
使用vnc连接宿主机,使用virt-manager进行迁移
这时候会提醒输入密码,就是之前第6步的时候设置的vnc连接密码
迁移成功!
在迁移的过程中,使用ping虚拟机的ip,发现只丢了一个包
至此热迁移完成!