云计算kvm虚拟化
1:什么是云计算?
云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的!
2:云计算的服务类型
2.1 IAAS 基础设施即服务(infrastructure as an service) 虚拟机 ecs openstack
2.2 PAAS 平台即服务(platform as an service ) php,java docker容器
2.3 SAAS 软件即服务 企业邮箱服务 cdn服务 rds数据库 开发+运维
3:为什么要用云计算
小公司:10台 20w+ idc 5w + 100M 10W, 10台云主机,前期投入小,扩 展灵活,风险小
大公司:闲置服务器计算资源,虚拟机,出租(超卖)
64G 服务器 64台1G 320台1G 64台 大公司自己的业务 264台 租出去
国企,银行
4:云计算的基础KVM虚拟化
宿主机:内存4G+ 纯净的系统CentOS-7 4.1:
4.1、什么是虚拟化?
虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不 同的操作系统的技术。
4.2 :虚拟化软件的差别
linux虚拟化软件:
qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性 好!
xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差!
redhat 5.5 xen kvm KVM(linux) 全虚拟机,它有硬件支持cpu,基于内 核,而且不需要使用专门的内核 centos6 kvm 性能较好,兼容较好
vmware workstations: 图形界面
virtual box: 图形界面 Oracle
4.3 安装kvm虚拟化管理工具
KVM全称:Kernel-based Virtual Machine
ip:10.0.0.1
KVM全称:Kernel-based Virtual Machine
[root@oldboy ~]# "192.168.37.200 mirrors.aliyun.com" >>/etc/hosts
[root@oldboy ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@oldboy ~]# yum install libvirt virt-install qemu-kvm -y
libvirt 作用:虚拟机的管理软件 libvirt: kvm,xen,qemu,lxc....
virt virt-install virt-clone
作用:虚拟机的安装工具和克隆工具 qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘
环境要求:
centos 7.4或者centos7.6
vmware 宿主机 kvm虚拟机 (嵌套虚拟机)
内存4G,cpu开启虚拟化
4.4:安装一台kvm虚拟机
分发软件TightVNC或者VNC-Viewer-6.19.325 宿主机
微软的远程桌面
vnc:远程的桌面管理工具 向日葵 微软的远程桌面
[root@oldboy ~]# systemctl start libvirtd.service
[root@oldboy ~]# systemctl status libvirtd.service
10.0.0.11 宿主机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
[root@oldboy ~]# -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-1105.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
vnc:10.0.0.11:5900
[root@oldboy ~]# 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-1105.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-1105.iso --network network=default 使用默认NAT的网络 --graphics vnc,listen=0.0.0.0 --noautoconsole
云主机都没有swap分区
4.5: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虚拟机开机启动 kvm运行业务程序 开机启动autostart,
前提: systemctl enable libvirtd; 取消开机启动autostart --disable
console 控制台 登录
#### 演示:
[root@oldboy opt]# virsh list
Id Name State
----------------------------------------------------
[root@oldboy opt]# virsh list --all 查看主机所有清单
Id Name State
----------------------------------------------------
- centos7 shut off
[root@oldboy opt]# virsh start centos7 #启动centos7
Domain centos7 started
[root@oldboy opt]# virsh list
Id Name State
----------------------------------------------------
2 centos7 running
[root@oldboy opt]#
[root@oldboy opt]# virsh shutdown centos7 #关机(正常关机)
[root@oldboy opt]# virsh destroy centos7 #强制关机(相当于拔电源关机)
[root@oldboy opt]# virsh reboot centos7 #重启
[root@oldboy opt]# virsh dumpxml centos7 >vm_centos7.xml ###备份虚拟机
[root@oldboy opt]# virsh define vm_centos7.xml #导入刚才备份的虚拟机
Domain centos7 defined from vm_centos7.xml
[root@oldboy opt]# virsh list --all
Id Name State
----------------------------------------------------
2 centos7 running
####生产小案例:越关越少越关越少,咋回事?
[root@oldboy opt]# ls /etc/libvirt/qemu #虚拟机的配置文件
centos7.xml networks
[root@oldboy ~]# 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 --boot hd network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
#首先删除镜像,将--network换成boot hd 硬盘启动
[root@oldboy opt]# virsh domrename centos7 web01 #domrename改名字
error: Requested operation is not valid: cannot rename active domain
[root@oldboy opt]# virsh destroy centos7
Domain centos7 destroyed
[root@oldboy opt]# virsh domrename centos7 web01 #domrename改名字
Domain successfully renamed
[root@oldboy opt]# mv centos2.raw web01.raw #修改centos2.raw名称为web01.raw
[root@oldboy opt]# virsh start web01
error: Failed to start domain web01
error: Cannot access storage file '/opt/centos2.raw': No such file or directory
[root@oldboy opt]# virsh edit web01 #修改文件
.........
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/opt/web01.raw'/>
<target dev='vda' bus='virtio'/>
.........
Domain web01 XML configuration edited.
[root@oldboy opt]# virsh start web01
Domain web01 started
[root@oldboy opt]# virsh suspend web01 ###将虚拟机挂起
Domain web01 suspended
[root@oldboy opt]# virsh list
Id Name State
----------------------------------------------------
4 web01 paused
[root@oldboy opt]# virsh resume web01 ###恢复挂起操作
Domain web01 resumed
[root@oldboy opt]# virsh list
Id Name State
----------------------------------------------------
4 web01 running
容易时间不同步
做时间同步
[root@oldboy opt]# yum install ntpdate -y
[root@oldboy opt]# ntpdate ntp6.aliyun.com ###与阿里云时间同步
[root@oldboy opt]# virsh vncdisplay web01 ###查看端口号
:0
虚拟机的开机自启
[root@oldboy opt]# virsh autostart web01 ###设置开机自启
[root@oldboy opt]# virsh autostart --disable web01 ###取消开机自启
###开机自启的原理 (软链接)
[root@oldboy opt]# ll -h /etc/libvirt/qemu
total 8.0K
drwx------ 3 root root 42 Nov 27 11:18 networks
-rw------- 1 root root 4.4K Nov 27 13:52 web01.xml
[root@oldboy opt]# ln -s /etc/libvirt/qemu/web01.xml
[root@oldboy opt]# ln -s /etc/libvirt/qemu/web01.xml /etc/libvirt/qemu/autostart/
看哪些机器开机自启(使用如下命令)
[root@oldboy opt]# ll /etc/libvirt/qemu/autostart/
[root@oldboy ~]# ssh 192.168.122.93
xshell连接
[root@localhost ~]# cp /boot/grub2/grub.cfg /tmp/ ###备份
[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]# reboot
Connection to 192.168.122.93 closed by remote host.
Connection to 192.168.122.93 closed.
切换到10.0.0.1进行命令行启动
[root@oldboy opt]# virsh console web01
Connected to domain web01
Escape character is ^]
[ 7.922942] intel_rapl: no valid rapl domains found in package 0
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Wed Nov 27 15:20:18 from 192.168.122.1
kvm虚拟机上不了网(解决方案)
[root@kvm ~]# sysctl net.ipv4.ip_forward=1 ##临时修改内核转发参数
kvm登陆的时候怎么退出?(解决方案)
ctrl + [ ]
4.6:kvm虚拟机虚拟磁盘格式转换和快照管理
raw: 裸格式,占用空间比较大,不支持快照功能,不方便传输 ,读写性能 较好 总50G 占用50G,传输50G qcow2: qcow(copy on write)占用空间 小,支持快照,性能比raw差一点,方便传输 总50G 占用2G,传输2G
qemu 写时的复制 qcow qcow2
[root@oldboy ~]# qemu-img info /opt/web01.raw
image: /opt/web01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 992M
[root@oldboy ~]# qemu-img create /opt/pldqiang.raw
qemu-img: /opt/pldqiang.raw: Image creation needs a size parameter
[root@oldboy ~]# qemu-img create /opt/pldqiang.raw 60G
Formatting '/opt/pldqiang.raw', fmt=raw size=64424509440
[root@oldboy ~]# qemu-img create -f qcow2 /opt/oldqiang.qcow2 60G
Formatting '/opt/oldqiang.qcow2', fmt=qcow2 size=64424509440 encryption=off cluster_size=65536 lazy_refcounts=off
[root@oldboy ~]#
[root@kvm01 opt]# ll /opt/web01.raw -h
-rw------- 1 qemu qemu 10G Nov 27 20:18 /opt/web01.raw
[root@kvm01 opt]# virsh suspend web01
Domain web01 suspended
[root@kvm01 opt]# time qemu-img convert -f raw -O qcow2 /opt/web01.raw /opt/web01.qcow2
real 0m27.454s
user 0m0.088s
sys 0m12.349s
[root@kvm01 opt]# virsh edit web01
Domain web01 XML configuration edited.
[root@kvm01 opt]# virsh resume web01
Domain web01 resumed
[root@kvm01 opt]# virsh destroy web01
Domain web01 destroyed
[root@kvm01 opt]# virsh start web01
Domain web01 started
[root@kvm01 opt]# virsh dumpxml web01 |grep qcow2
<driver name='qemu' type='qcow2'/>
<source file='/opt/web01.qcow2'/>
[root@kvm01 ~]# virsh console web01
Connected to domain web01
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Wed Nov 27 15:24:41 on ttyS0
[root@localhost ~]#
快照管理
[root@kvm01 ~]# virsh snapshot-create-as web01 --name install_nginx
#####------------->给web01创建快照并指定名字为install_nginx<-----------#####
Domain snapshot install_nginx created
[root@kvm01 ~]# virsh snapshot-list web01
Name Creation Time State
------------------------------------------------------------
1574858321 2019-11-27 20:38:41 +0800 running
install_nginx 2019-11-27 20:43:22 +0800 running
[root@kvm01 ~]# virsh snapshot-delete web01 --snapshotname 1574858321 ###删除快照157***
Domain snapshot 1574858321 deleted
[root@kvm01 ~]# virsh snapshot-list web01
Name Creation Time State
------------------------------------------------------------
install_nginx 2019-11-27 20:43:22 +0800 running
[root@kvm01 ~]# virsh snapshot-revert web01 --snapshotname install_nginx ###还原快照
[root@kvm01 ~]# qemu-img info /opt/web01.qcow2
image: /opt/web01.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
2 install_nginx 209M 2019-11-27 20:43:22 00:16:35.718
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 ~]#
raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
自动挡的完整克隆
[root@kvm01 ~]# virt-clone -o web01 -n web02 --auto-clone
Allocating 'web02.qcow2' | 10 GB 00:00:27
Clone 'web02' created successfully.
[root@kvm01 ~]# ls /etc/libvirt/qemu
networks web01.xml web02.xml
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
- web02 shut off
[root@kvm01 ~]# virsh start web02
Domain web02 started
[root@kvm01 ~]# virsh dumpxml web02 |grep qcow2
<driver name='qemu' type='qcow2'/>
<source file='/opt/web02.qcow2'/>
[root@kvm01 ~]#
手动挡的完整克隆
####### 四步走战略 ########
#修改虚拟机的名字 #删除虚拟机uuid #删除mac地址 #修改磁盘路径
[root@kvm01 opt]# cp web02.qcow2 web03.qcow2
[root@kvm01 opt]# virsh dumpxml web02 >web03.xml
[root@kvm01 opt]# vim web03.xml
[root@kvm01 opt]# virsh define web03.xml
Domain web03 defined from web03.xml
[root@kvm01 opt]# virsh start web03
Domain web03 started
[root@kvm01 opt]#
链接克隆
[root@kvm01 opt]# qemu-img create -f qcow2 -b web02.qcow2 web04. ##生成虚拟机磁盘文件
Formatting 'web04.qcow2', fmt=qcow2 size=10737418240 backing_file='web02.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm01 opt]# qemu-img info web04.qcow2
image: web04.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: web02.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 opt]# cp web03.xml web04.xml
[root@kvm01 opt]# vim web04.xml ###生成虚拟机的配置文件
[root@kvm01 opt]# virsh define web04.xml ####导入配置文件
Domain web04 defined from web04.xml
[root@kvm01 opt]# virsh start web04 ####启动
Domain web04 started
[root@kvm01 opt]# virsh list
Id Name State
----------------------------------------------------
3 web02 running
4 web03 running
5 web04 running
[root@kvm01 opt]# virsh dumpxml web04 |grep qcow2
<driver name='qemu' type='qcow2'/>
<source file='/opt/web04.qcow2'/>
<source file='/opt/web02.qcow2'/>
[root@kvm01 opt]# ll -h
total 4.7G
-rw-r--r-- 1 qemu qemu 4.4M Nov 27 21:58 web04.qcow2
-rw-r--r-- 1 root root 5.0K Nov 27 21:56 web04.xml
[root@kvm01 opt]#
4.8:kvm虚拟机的桥接网络
默认的虚拟机网络是NAT模式,创建桥接网卡
[root@kvm01 ~]# virsh iface-bridge eth0 br0 #kvm宿主机创建桥接网卡
[root@kvm01 ~]# brctl show ###查看是否启动
bridge name bridge id STP enabled interfaces
br0 8000.000c292cc7cf yes eth0
virbr0 8000.525400f3b1b9 yes virbr0-nic
vnet0
vnet1
[root@kvm01 ~]# virsh edit web04 #修改桥接的Mac地址
..........
<interface type='bridge'> #type='bridge'
<mac address='52:54:00:98:bd:1e'/>
<source bridge='br0'/> #bridge='br0
<model type='virtio'/>
..........
Domain web04 XML configuration edited.
[root@kvm01 ~]# virsh destroy web04 ###相当于拔电源关机
Domain web04 destroyed
[root@kvm01 ~]# virsh start web04
Domain web04 started
关闭vmware上的DHCP (必须关闭)
编辑---虚拟机网络编辑器
[root@kvm01 opt]# virsh console web04
Connected to domain web04
Escape character is ^]
[ 7.084869] intel_rapl: no valid rapl domains found in package 0
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Thu Nov 28 10:26:01 on ttyS0
echo 'TYPE="Ethernet"
> BOOTPROTO="none"
> NAME="eth0"
> DEVICE="eth0"
> ONBOOT="yes"
> IPADDR="10.0.0.102"
> NETMASK="255.255.255.0"
0.254"
DNS> 1GATEWAY="10.0.0.254"
> DNS1="223.5.5.5"' >/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# systemctl restart network
#### --->新打开窗口测试桥接是否成功<----
[c:\~]$ ssh root@10.0.0.102
Connecting to 10.0.0.102:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Thu Nov 28 11:10:19 2019
[root@localhost ~]# lscpu |grep -i kvm
Hypervisor vendor: KVM
桥接-->不依赖内核转发参数:(具体在上面) ####此处下忽略
kvm虚拟机上不了网(解决方案)
[root@kvm ~]# sysctl net.ipv4.ip_forward=1 ##临时修改内核转发参数
热添加硬盘(开机加)
[root@kvm01 opt]# qemu-img create -f qcow2 -f qcow2 /opt/web04_add01.qcow2 40G #创建
[root@kvm01 opt]# virsh attach-disk web04 /opt/web04_add01.qcow2 vdb
[root@kvm01 opt]# virsh detach-disk web04 vdb --subdriver qcow2 #拔掉(移除)vdb这块盘
[root@kvm01 opt]# virsh console web04
[root@localhost ~]# hostnamectl set-hostname web04
[root@localhost ~]# bash
[root@web04 ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000331d8
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 20971519 10484736 83 Linux
Disk /dev/vdb: 0 MB, 197632 bytes, 386 sectors #有vdb盘表示成功
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
###硬盘添加了怎么使用?
[root@web04 ~]# mkfs.xfs /dev/vdb ##格式化
[root@web04 ~]# mount /dev/vdb /mnt ##挂载
[root@web04 ~]# df -h
[root@web04 ~]# cp /etc/services /mnt
扩容测试(云硬盘也是这样操作的)
扩容:
虚拟机,卸载分区
[root@web04 ~]# umount /mnt
宿主机执行:
[root@kvm01 opt]# virsh detach-disk web04 vdb
Disk detached successfully
[root@kvm01 opt]# qemu-img resize /opt/web04_add01.qcow2 60G
Image resized.
[root@kvm01 opt]# qemu-img info /opt/web04_add01.qcow2
image: /opt/web04_add01.qcow2
file format: qcow2
virtual size: 60G (64424509440 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 opt]# virsh attach-disk web04 /opt/web04_add01.qcow2 vdb
Disk attached successfully
切换至web04触发扩容
[root@web04 ~]# xfs_growfs /dev/vdb #切换至web04触发扩容
meta-data=/dev/vdb isize=256 agcount=4, agsize=3932160 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=15728640, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=7680, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
------此处提示扩容数据----
[Centos7虚拟机根分区扩展]
阅读目录(Content)
- [1、先把kvm虚拟机关机]
- [2、在宿主机上进行kvm虚拟机的磁盘扩容]
- [3、在虚拟机中调整分区]
- [4、重启虚拟机,完成根分区扩容]
线上的kvm虚拟机,原来只规划了8G,后来发现硬盘动不动就被日志塞满了,需要进行扩容。
扩容步骤如下:
1、先把kvm虚拟机关机
[root@kvm01 opt]# virsh destroy web04
Domain web04 destroyed
[root@kvm01 opt]# virsh list --all
Id Name State
----------------------------------------------------
- web01 shut off
- web02 shut off
- web03 shut off
- web04 shut off
2、在宿主机上进行kvm虚拟机的磁盘扩容
[root@kvm01 opt]# qemu-img info web04.qcow2
image: web04.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes) ###调整之前的磁盘大小
disk size: 15M
cluster_size: 65536
backing file: web02.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 opt]# qemu-img resize web04.qcow2 +10G ###根扩容加10G
Image resized.
[root@kvm01 opt]# qemu-img info web04.qcow2
image: web04.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes) ###调整之前的磁盘大小
disk size: 15M
cluster_size: 65536
backing file: web02.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 opt]#
2、在宿主机上进行kvm虚拟机的磁盘扩容
qemu-img resize qiangge.qcow2 +10G
调整之后
接下来进入到虚拟机发现没有生效!!!
3、在虚拟机中调整分区
由于分区表没有更新所以没有生效,接下来我们还需要调整分区表(核心是调整根分区的起始扇区的位置)
4、重启虚拟机,完成根分区扩容
重启reboot之后执行xfs_growfs /dev/vda1,再次查看,分区扩容成功!
本文适合xfs的文件系统,如果是ext4的文件系统,请将xfs_growfs /dev/vda1的命令替换为resize2fs /dev/vda1。
热添加网卡
#临时生效
[root@kvm01 opt]# virsh attach-interface web04 --type bridge --source br0
Interface attached successfully
#永久生效
[root@kvm01 opt]# virsh attach-interface web04 --type bridge --source br0 --config
Interface attached successfully
#优化
[root@kvm01 opt]# virsh attach-interface web04 --type bridge --source br0 --model virtio
Interface attached successfully
#拆除网卡
virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71 (ifconfig查看)
kvm虚拟机在线热添加内存
virt-instalh--virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory
51 2,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network
bridge=br0 -graphics vnc,listen=0.0.0.0 --noautoconsole
临时热添加内存
virsh setmem web04 1024M
永久增大内存
virsh setmem web04 1024M --config
调整虚拟机内存最大值
virsh setmaxmem web04 4G
t rhel7 --name web04 --memory
##增大内存
[root@kvm01 opt]# virsh edit web04
.........
<memory unit='MiB'>2048</memory>
<currentMemory unit='MiB'>1024</currentMemory>
.........
kvm虚拟机在线热添加cpu
virt-install --virt-type kvrh --os-type=linux --oS-variant rhel7 --name web04 --memory
512,maxmemory=2048 --vCpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd -
network bridge=br0 -graphics vnc,listen=0.0.0.0 --noautoconsole
热添加cpu核数
virsh setvcpus web04 4
永久添加cpu核数
kvm虚拟机的冷迁移
首先基于模板机克隆一台10.0.0.99 的机器
修改ip地址为10.0.0.99 主机名为kvm02
[root@kvm02 ~]# cd /etc/yum.repos.d/
[root@kvm02 yum.repos.d]# rm -rf local.repo
[root@kvm02 yum.repos.d]# echo "192.168.37.200 mirrors.aliyun.com" >>/etc/hosts
[root@kvm02 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2185 100 2185 0 0 174k 0 --:--:-- --:--:-- --:--:-- 193k
[root@kvm02 yum.repos.d]# yum install libvirt virt-install qemu-kvm -y
[root@kvm02 yum.repos.d]# systemctl start libvirtd
[root@kvm02 yum.repos.d]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
###迁移完全克隆的机器
[root@kvm01 opt]# virsh list
Id Name State
----------------------------------------------------
6 web04 running
7 web03 running
[root@kvm01 opt]# virsh dumpxml web03 |grep qcow2
<driver name='qemu' type='qcow2'/>
<source file='/opt/web03.qcow2'/>
[root@kvm01 opt]# virsh destroy web03
Domain web03 destroyed
[root@kvm01 opt]# scp -rp /opt/web03.qcow2 10.0.0.99:/opt
The authenticity of host '10.0.0.99 (10.0.0.99)' can't be established.
ECDSA key fingerprint is SHA256:cHKT5G6hYgv1k1zTfc36tZrLNQqJhc1JeBTeke545Fk.
ECDSA key fingerprint is MD5:24:4e:94:6d:46:82:0a:61:3a:1e:83:3f:75:82:e1:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.99' (ECDSA) to the list of known hosts.
root@10.0.0.99's password:
web03.qcow2 100% 991MB 9.9MB/s 01:40
[root@kvm01 opt]# virsh dumpxml web03 >web03.xml
[root@kvm01 opt]# scp web03.xml 10.0.0.99:/opt
root@10.0.0.99's password:
web03.xml 100% 4191 164.5KB/s 00:00
[root@kvm02 opt]# virsh list
Id Name State
----------------------------------------------------
1 web03 running
[root@kvm02 opt]#
测试连接无误
###迁移链接克隆的机器
[root@kvm01 opt]# virsh list
Id Name State
----------------------------------------------------
6 web04 running
[root@kvm01 opt]# virsh destroy web04
Domain web04 destroyed
[root@kvm01 opt]# qemu-img info web04.qcow2
image: web04.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 15M
cluster_size: 65536
backing file: web02.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm01 opt]# scp -rp web02.qcow2 web04.qcow2 10.00.99:/opt
The authenticity of host '10.00.99 (10.0.0.99)' can't be established.
ECDSA key fingerprint is SHA256:cHKT5G6hYgv1k1zTfc36tZrLNQqJhc1JeBTeke545Fk.
ECDSA key fingerprint is MD5:24:4e:94:6d:46:82:0a:61:3a:1e:83:3f:75:82:e1:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.00.99' (ECDSA) to the list of known hosts.
root@10.00.99's password:
web02.qcow2 100% 991MB 8.6MB/s 01:55
web04.qcow2 100% 15MB 16.0MB/s 00:00
[root@kvm01 opt]# virsh dumpxml web04 >web04.xml
[root@kvm01 opt]# scp web04.xml 10.0.0.99:/opt
root@10.0.0.99's password:
web04.xml 100% 4414 630.0KB/s 00:00
[root@kvm01 opt]#
#####10.0.0.99
[root@kvm02 opt]# virsh define web04.xml
Domain web04 defined from web04.xml
[root@kvm02 opt]# virsh start web04
error: Failed to start domain web04
error: Cannot get interface MTU on 'br0': No such device
[root@kvm02 opt]# virsh iface-bridge eth0 br0
Created bridge br0 with attached device eth0
Bridge interface br0 started
比如说宿主机256G,所以虚拟机不能超过256G
(内存压缩技术,实现超买,即使再创建几个链接克隆也是完全可以跑起来的)
kvm虚拟机的热迁移(虚拟机不用关机)
需要借助共享存储nfs,只需要导入虚拟机就可以
nfs服务端与客户端
注意:需要在客户端与服务端安装上nfs
[root@kvm02 opt]# rpm -qa |grep nfs
nfs-utils-1.3.0-0.65.el7.x86_64
libnfsidmap-0.25-19.el7.x86_64
[root@kvm02 opt]#
进入nfs服务端10.0.0.31
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
#/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/vm 10.0.0.0/24(rw,async,no_all_squash,no_root_squash)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# mkdir /vm
进入10.0.0.99 kvm02
[root@kvm02 opt]# mv /opt/* /srv
[root@kvm02 opt]# mount -t nfs 10.0.0.31:/vm /opt
[root@kvm02 opt]# mv /srv/web02.qcow2 /opt
在10.0.0.100 与 10.0.0.99 上相同操作
[root@kvm02 opt]# cd /srv/
[root@kvm02 srv]# mv /opt/web02.qcow2 /opt/web04.qcow2
[root@kvm02 srv]# virsh define web04.xml
Domain web04 defined from web04.xml
[root@kvm02 srv]# virsh start web04
Domain web04 started
###在10.0.0.100和10.0.0.99上面做host解析
[root@kvm01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.37.200 mirrors.aliyun.com
10.0.0.100 kvm01
10.0.0.99 kvm02
[root@kvm01 ~]# scp -rp /etc/hosts 10.0.0.99:/etc/hosts
root@10.0.0.99's password:
hosts 100% 227 89.7KB/s 00:00
[root@kvm02 srv]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.100/system --unsafe --persistent --undefinesource
The authenticity of host '10.0.0.100 (10.0.0.100)' can't be established.
ECDSA key fingerprint is SHA256:cHKT5G6hYgv1k1zTfc36tZrLNQqJhc1JeBTeke545Fk.
ECDSA key fingerprint is MD5:24:4e:94:6d:46:82:0a:61:3a:1e:83:3f:75:82:e1:aa.
Are you sure you want to continue connecting (yes/no)? yes
root@10.0.0.100's password:
Migration: [100 %]
[root@kvm02 srv]#
登录10.0.0.100查看发现web04热迁移成功
[root@kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
8 web04 running
[root@kvm01 ~]# virsh console web04
localhost login: root
Password:
Last failed login: Thu Nov 28 20:24:16 CST 2019 on ttyS0
There was 1 failed login attempt since the last successful login.
Last login: Thu Nov 28 15:03:30 on ttyS0
[root@localhost ~]# ip addr ###可以看到没有ip地址,我们重新配置一回
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:8d:97:4a brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:98:bd:1e brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-eth0 ifdown-isdn ifup-aliases ifup-plusb init.ipv6-global
ifcfg-lo ifdown-post ifup-bnep ifup-post network-functions
ifdown ifdown-ppp ifup-eth ifup-ppp network-functions-ipv6
ifdown-bnep ifdown-routes ifup-ippp ifup-routes
ifdown-eth ifdown-sit ifup-ipv6 ifup-sit
ifdown-ippp ifdown-tunnel ifup-isdn ifup-tunnel
ifdown-ipv6 ifup ifup-plip ifup-wireless
[root@localhost network-scripts]# cat ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth0"
UUID="e016d765-f704-4843-a947-db8d5b8691ee"
DEVICE="eth0"
ONBOOT="yes"
[root@web04 network-scripts]# mv ifcfg-eth1 ifcfg-eth0
[root@web04 network-scripts]# echo 'TYPE="Ethernet"
> BOOTPROTO="none"
> NAME="eth0"
> DEVICE="eth0"
> ONBOOT="yes"
> IPADDR="10.0.0.101"
> NETMASK="255.255.255.0"
> GATEWAY="10.0.0.254"
> DNS1="223.5.5.5"' >/etc/sysconfig/network-scripts/ifcfg-eth0
[root@web04 network-scripts]# systemctl restart network
###测试热备份成功
[c:\~]$ ssh root@10.0.0.101
Connecting to 10.0.0.101:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Thu Nov 28 20:24:20 2019
[root@web04 ~]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义