云计算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数据库 开发+运维

1574831150439

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

1574831559416

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

1574832037328

[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

1574832185975

云主机都没有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虚拟机的磁盘扩容

img

qemu-img resize qiangge.qcow2 +10G

调整之后

img

接下来进入到虚拟机发现没有生效!!!

img

回到顶部(go to top)

3、在虚拟机中调整分区

由于分区表没有更新所以没有生效,接下来我们还需要调整分区表(核心是调整根分区的起始扇区的位置)

img

回到顶部(go to top)

4、重启虚拟机,完成根分区扩容

重启reboot之后执行xfs_growfs /dev/vda1,再次查看,分区扩容成功!

img

本文适合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 ~]# 

posted @   老王教你学Linux  阅读(503)  评论(0编辑  收藏  举报
编辑推荐:
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示