zoukankan      html  css  js  c++  java
  • kvm系列之四:热添加技术

    kvm虚拟机可以在线添加cpu、磁盘、内存、网卡等资源,也可以在线迁移虚拟机,这边博文记录这些技术的实现方法。有两点需要注意:

    • 这里主要操作是在web01虚拟机中进行,为了方便,我将它的网卡改成了桥接模式
    • 根分区的扩容时需要关机的

    热添加磁盘

    为虚拟机添加一块磁盘的流程:

    • 宿主机创建磁盘
    • 宿主机将磁盘附加给虚拟机
    • 虚拟机中格式化磁盘
    • 虚拟机中挂载并使用磁盘

    操作过程记录如下:

    虚拟机磁盘初始状态

    [root@web01 ~]# 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: 0x000b2376
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048    20971519    10484736   83  Linux
    [root@web01 ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        10G  1.1G  9.0G  11% /
    devtmpfs        486M     0  486M   0% /dev
    tmpfs           496M     0  496M   0% /dev/shm
    tmpfs           496M  6.7M  490M   2% /run
    tmpfs           496M     0  496M   0% /sys/fs/cgroup
    tmpfs           100M     0  100M   0% /run/user/0

    宿主机操作

    ##创建磁盘
    [root@kvm1 opt]# qemu-img create -f qcow2 web01-add1.qcow2 5G
    Formatting 'web01-add1.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 
    
    ##将磁盘附加给web01
    [root@kvm1 opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2
    Disk attached successfully

    web01上操作

    ###查看磁盘情况,发现已经添加了一块5g的磁盘
    [root@web01 ~]# 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: 0x000b2376
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048    20971519    10484736   83  Linux
    
    Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 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
    
    ###格式化新磁盘
    [root@web01 ~]# mkfs.xfs /dev/vdb 
    
    ###挂载新磁盘
    [root@web01 ~]# mkdir /add1
    [root@web01 ~]# mount /dev/vdb /add1/
    
    ###测试新磁盘可用性
    [root@web01 ~]# cp /etc/hostname /add1/
    [root@web01 ~]# cat /add1/hostname 
    web01
    View Code

    热添加磁盘容量(在线扩容)

    紧接着上一节,在web01中操作,以扩容新增加的磁盘vdb为例,流程如下:

    • web01中卸载磁盘
    • 宿主机中把目标磁盘从web01中剥离
    • 宿主机中更改磁盘容量
    • 重新将磁盘附加给web01
    • web01中重新挂载磁盘
    • 刷新磁盘容量
    • 测试磁盘可用性

    操作记录如下:

    web01中umount磁盘

    [root@web01 ~]# df -h |grep add1
    /dev/vdb        5.0G   33M  5.0G   1% /add1
    [root@web01 ~]# umount /add1/
    
    [root@web01 ~]# umount /add1/
    umount: /add1/: not mounted

    宿主机中操作

    其中,剥离和重新附加操作,可以在web01中用fdisk -l命令验证效果,这里就不贴上来了。

    ###将磁盘从web01中剥离
    [root@kvm1 opt]# virsh detach-disk web01 /opt/web01-add1.qcow2 
    Disk detached successfully
    
    ###更改磁盘大小
    [root@kvm1 opt]# qemu-img resize /opt/web01-add1.qcow2 +5G
    Image resized.
    
    ###重新将磁盘附加到web01
    [root@kvm1 opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2  
    Disk attached successfully

    web01中重新挂载

    [root@web01 ~]# mount /dev/vdb /add1/
    [root@web01 ~]# df -h|grep add1
    /dev/vdb        5.0G   33M  5.0G   1% /add1
    
    ###将挂载写入配置文件,使永久生效
    [root@web01 ~]# echo "mount /dev/vdb /add1/">>/etc/profile

    刷新磁盘容量

    由上面df -h返回结果可知,挂载分区依然显示5G,但用fdisk -l查看时,实际上vdb磁盘的大小为10G。这是因为在格式化磁盘的时候,容量已经写到磁盘中了。

    当然,我们可以重新格式化磁盘来解决这个问题,但这样做会丢失磁盘数据。正确的操作如下:

    ###刷新磁盘容量
    [root@web01 ~]# xfs_growfs /add1/
    ###验证
    [root@web01 ~]# df -h|grep add1
    /dev/vdb         10G   33M   10G   1% /add1

    磁盘添加及扩容永久生效

    以上的配置的硬盘扩展,在重启虚拟机后就会丢失,想要永久生效,使下面命令:

    [root@kvm1 opt]# virsh attach-disk web01 /opt/web01-add1.qcow2 vdb --subdriver qcow2 --config              
    Disk attached successfully

    这个命令中--config参数的作用,是把扩容相关的配置写入配置文件,可以查看web01的配置文件,发现以下内容被添加进来了

        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/opt/web01-add1.qcow2'/>
          <target dev='vdb' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
        </disk>

    扩容根分区

    扩容根分区需要在关闭虚拟机的时候进行,流程如下:

    • 查找根分区对应的磁盘文件(web01中df -h查看/分区对应的分区,然后宿主机中通过查看web01配置文件得到这个分区对应的磁盘文件)
    • 关闭web01
    • 扩展目标磁盘文件
    • 开启web01
    • web01中修改磁盘分区表
    • 重启web01
    • 刷新分区容量
    • 验证

    操作记录如下(其中第一步确认磁盘文件就不贴上来了):

    宿主机中扩展磁盘

    [root@kvm1 opt]# virsh destroy web01
    ###更改磁盘容量,注意:resize方法不支持包含快照的磁盘文件,这里我是将快照文件删除后重新执行的
    [root@kvm1 opt]# qemu-img resize /opt/centos.qcow2 +10G
    [root@kvm1 opt]# virsh start web01

    web01中修改分区表

    这是使用fdisk -l查看,vdb的真实容量是20G,但df -h查看挂载分区显示10G,使用命令xfs_grows /也无法刷新到正确的容量。这是因为根分区的容量是写在分区表中的,这是我们需要重新设置分区表,操作如下:

    ###直接n一路回车,然后w保存即可,有兴趣的话可以p查看初始和修改完毕后的分区信息
    
    [root@web03 ~]# fdisk /dev/vda
    #进入交互界面后操作如下
    p #显示当前分区信息
    d #删除分区
    n #创建分区,一路回车
    w #保存退出
    
    # 重启后操作

    重启web01,刷新分区容量

    重启web01后,df -h查看,根分区还是10G,这时再使用xfs_growfs /就可以刷新到正确的容量了。

    [root@web01 ~]# xfs_growfs /
    [root@web01 ~]# df -h|grep -w /
    /dev/vda1        20G  1.1G   19G   6% /

    热添加网卡

    热添加网卡的操作很简单,只需要在宿主机中执行一条命令即可,需要理解的是一个参数--model的作用。先看看添加网卡的操作,然后结合效果进行说明

    [root@kvm1 opt]# virsh attach-interface web01 --type bridge --source br0
    [root@kvm1 opt]# virsh attach-interface web01 --type bridge --source br0 --model virtio

    上面两条命令往web01中以不同模式分别添加了一块网卡,到web01中查看信息如下:

    [root@web01 ~]# ip add show ens10 
    3: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 52:54:00:c9:ce:4d brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.143/24 brd 10.0.0.255 scope global noprefixroute dynamic ens10
           valid_lft 1649sec preferred_lft 1649sec
        inet6 fe80::a17:42ec:19e:e9de/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@web01 ~]# ip add show eth1
    4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 52:54:00:56:bb:59 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.144/24 brd 10.0.0.255 scope global noprefixroute dynamic eth1
           valid_lft 1704sec preferred_lft 1704sec
        inet6 fe80::42e1:3c04:c56:69f5/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever

    从上面可以看出,使用 --model virtio参数后,新添加的网卡会以eth前缀命名,这是表象,内在的,virtio是优化过的虚拟机网卡驱动,性能比默认的好。

    添加网卡永久生效

    和扩展分区一样,可以用--config参数使网卡扩展永久生效

    [root@kvm1 opt]# virsh attach-interface web01 --type bridge --source br0 --model virtio --config
    [root@kvm1 opt]# virsh attach-interface web01 --type bridge --source br0 --config

    查看配置文件,对比web01中ip add显示的网卡信息,会发现mac地址不一样,重启web01后,配置文件中的mac地址就应用到网卡了。

    热添加内存和cpu

    这两个技术,操作相似,也很简单,所以写在一起,他们的实现主要流程如下

    使web01支持热添加内存

    重新构建虚拟机,用参数指定最大内存

    ##web01关机、卸载
    [root@kvm1 ~]# virsh destroy web01
    [root@kvm1 ~]# virsh undefine web01
    
    ###重新构建web01,注意:如果是按照我前几篇博客一路操作过来的,这里的web03是web01的链接克隆,也在使用web01的磁盘,所以要把web03也给关机并卸载,然后才能进行下面的操作
    [root@kvm1 ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web01 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=8 --disk /opt/centos.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole 
    
    ###开机后查看状态
    [root@kvm1 ~]# virsh list 
     Id    Name                           State
    ----------------------------------------------------
     10    web01                          running

    web01内存和cpu初始状态

    [root@web01 ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            462         102         243           8         116         213
    Swap:             0           0           0
    
    [root@web01 ~]# lscpu|egrep -i "^cpu(" 
    CPU(s):                1

    宿主机中对web01的内存和cpu扩容

    [root@kvm1 ~]# virsh setmem web01 1G
    [root@kvm1 ~]# virsh setvcpus web01 3
    
    ###使扩容永久生效
    [root@kvm1 ~]# virsh setmem web01 1G --config
    [root@kvm1 ~]# virsh setvcpus web01 3  --config

    web01中验证

    [root@web01 ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            974         103         753           8         118         722
    Swap:             0           0           0
    
    [root@web01 ~]# lscpu|egrep -i "^cpu("
    CPU(s):                3

     

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/10361914.html
Copyright © 2011-2022 走看看