前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM虚拟主机管理篇

KVM虚拟主机管理篇

作者头像
老七Linux
发布2018-05-31 12:37:59
4.9K0
发布2018-05-31 12:37:59
举报
文章被收录于专栏:Laoqi's Linux运维专列
磁盘格式

虚拟磁盘常用格式 rawqcow2

代码语言:javascript
复制
//创建一个2G的 raw格式 磁盘
[[email protected] ~]# qemu-img create -f raw /kvm_data/zhdya01_2.img 2G
Formatting '/kvm_data/zhdya01_2.img', fmt=raw size=2147483648    

//把raw格式的磁盘转换为qcow2格式
[[email protected] ~]# qemu-img convert -O qcow2 /kvm_data/zhdya01_2.img /kvm_data/zhdya01_2.qcow2

[[email protected] ~]# qemu-img info /kvm_data/zhdya01_2.qcow2 
image: /kvm_data/zhdya01_2.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

转换后用ls -lh查看磁盘文件的大小,可以看到qcow2文件比较小。

raw文件大小和我们指定空间大小一样是2G,而qcow2的空间是你使用了多少就会占用磁盘多少。

代码语言:javascript
复制
[[email protected] kvm_data]# ls -lh *
-rw-r--r-- 1 root root 2.0G 2月   4 17:39 zhdya01_2.img
-rw-r--r-- 1 root root 193K 2月   4 17:42 zhdya01_2.qcow2

raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照。

把zhdya02转换为raw格式的磁盘
代码语言:javascript
复制
[[email protected] kvm_data]# qemu-img convert -O raw /kvm_data/zhdya01.img /kvm_data/zhdya01_2.qcow2

下一步,更改配置文件(两种途径,我们可以直接修改配置文件,但是官方的建议使用如下方式,因为只要是配置有问题,使用edit方式可以自动检测出来。)

代码语言:javascript
复制
virsh edit zhdya01  //更改格式和文件路径

修改如下两处:

mark
mark
代码语言:javascript
复制
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/zhdya01_2.qcow2'/>

最后程序有个反馈:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh edit zhdya01
编辑了域 zhdya01 XML 配置。

启动更改后的虚拟主机:

代码语言:javascript
复制
[[email protected] kvm_data]# ll
总用量 4250992
drwx------ 2 root root       16384 2月   3 14:00 lost+found
-rw-r--r-- 1 root root  2147483648 2月   4 17:39 zhdya01_2.img
-rw-r--r-- 1 root root 10737418240 2月   4 18:00 zhdya01_2.qcow2
-rw------- 1 root root 10739384832 2月   4 17:53 zhdya01.img
-rw------- 1 root root  1634271232 2月   4 17:38 zhdya02
[[email protected] kvm_data]# virsh start zhdya01
域 zhdya01 已开始

[[email protected] kvm_data]# ll
总用量 4250992
drwx------ 2 root root       16384 2月   3 14:00 lost+found
-rw-r--r-- 1 root root  2147483648 2月   4 17:39 zhdya01_2.img
-rw-r--r-- 1 qemu qemu 10737418240 2月   4 18:00 zhdya01_2.qcow2
-rw------- 1 root root 10739384832 2月   4 17:53 zhdya01.img
-rw------- 1 root root  1634271232 2月   4 17:38 zhdya02

如上可以看到,停机和关机的状态 所属主和所属组均为root,一旦启动就会变成qemu

一旦修改好以后,我们再次创建快照就会出错:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh snapshot-create zhdya01
错误:不支持的配置:存储类型 vda 不支持磁盘 raw 的内部快照
磁盘扩容 – raw格式

日常的虚拟主机使用的时候,也会遇到一个很囧的事情,就是磁盘没有空间了,虚拟主机一旦没有空间了是不是寿命就到此结束了呢?显然,肯定不是的。

目前虚拟机内的主机硬盘:

代码语言:javascript
复制
[[email protected] ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda3       8.0G 1015M  7.0G   13% /
devtmpfs        487M     0  487M    0% /dev
tmpfs           497M     0  497M    0% /dev/shm
tmpfs           497M  6.6M  490M    2% /run
tmpfs           497M     0  497M    0% /sys/fs/cgroup
/dev/vda1      1014M  130M  885M   13% /boot
tmpfs            49M     0   49M    0% /run/user/0

增加2G的存储空间

代码语言:javascript
复制
[[email protected] ~]# qemu-img resize /kvm_data/zhdya01.img +2G
Image resized.

//现在变成了12G的空间。
[[email protected] ~]# qemu-img info /kvm_data/zhdya01.img 
image: /kvm_data/zhdya01.img
file format: qcow2
virtual size: 12G (12884901888 bytes)

进入虚拟主机去查看是否生效:

代码语言:javascript
复制
[[email protected] ~]# virsh console zhdya01
连接到域 zhdya01
换码符为 ^]


[[email protected] ~]# fdisk -l

磁盘 /dev/vda:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes

//很显然没有生效。这就需要我们把虚拟主机重启一下才可以生效。(注意:不可以在虚拟主机内重启,需要到宿主机下面吧虚拟主机重启)
代码语言:javascript
复制
[[email protected] ~]# virsh destroy zhdya01

[[email protected] ~]# virsh start zhdya01

[[email protected] ~]# virsh console zhdya01

[[email protected] ~]# fdisk -l

磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8f63

   设备 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200     4196351     1048576   82  Linux swap / Solaris
/dev/vda3         4196352    20971519     8387584   83  Linux

当然增加后的2G不可以再次分给/dev/vda1 呢? 肯定是不可以的。

只能是重新分区。(也许会考虑到这一点,重新分区,那现在已经存在的系统会不会受到影响呢? 答案是肯定不会的,新的磁盘划分将会从如下:)

代码语言:javascript
复制
// 也就是起始扇区最终是在新硬盘的基础上划分的
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
已选择分区 4
起始 扇区 (20971520-25165823,默认为 20971520):
如何增加一块新的硬盘呢?
磁盘扩容(raw)
代码语言:javascript
复制
qemu-img create -f raw /kvm_data/zhdya01_2.raw 5G

virsh edit zhdya01 //复制增加<disk>…</disk>,注意更改source、target、slot

source:修改为/kvm_data/zhdya01_2.raw
target:修改为/dev/vdb
slot:修改为0x08

增加disk部门就是将刚刚格式化的一个磁盘,挂载到现在运行的这个虚拟机中。

代码语言:javascript
复制
virsh destroy zhdya01

virsh start zhdya01     //再次启动就会发现刚刚添加的一块/dev/vdb的新磁盘
mark
mark
磁盘扩容(qcow2)

如果当前的镜像已经做了快照,则不支持增加分区容量

代码语言:javascript
复制
qemu-img resize /kvm_data/zhdya01.img +2G

若提示qemu-img: Can't resize an image which has snapshots,需要删除快照

第一种方法:

代码语言:javascript
复制
qemu-img info /kvm_data/zhdya01.img 

virsh destroy zhdya01

virsh start zhdya01

virsh console zhdya01

fdisk -l 查看磁盘情况,并分新的分区

第二种方法:

除了对已有磁盘扩容外,还可以额外增加磁盘

代码语言:javascript
复制
qemu-img create -f qcow2 /kvm_data/zhdya01_2.img 5G

virsh edit zhdya01 //增加<disk>…</disk>,注意更改source、target、slot   //和如上是一样的操作步骤。

virsh destroy zhdya01

virsh start zhdya01

如上两种格式的硬盘均提供了两种不同的方式来扩容,其实我还是比较喜欢直接增加一块新硬盘的方式。。

调整CPU,内存,网卡

查看硬件配置:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh dominfo zhdya01
Id:             1
名称:       zhdya01
UUID:           597c1ac6-d702-4903-a5b5-7e07507191ee
OS 类型:    hvm
状态:       running
CPU:          1
CPU 时间:   36.0s
最大内存: 1048576 KiB
使用的内存: 524288 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

或者 使用 如下:

代码语言:javascript
复制
[root@zhdya01 kvm_data]# virsh edit zhdya01

当然修改虚拟机的硬件配置文件也是在如上这个命令中

下面我来针对当前的内存和CPU进行调整:

注意:(在操作前,尽量把虚拟机给关机。)

mark
mark

再次启动机器,然后查看下配置:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh dominfo zhdya01
Id:             2
名称:       zhdya01
UUID:           597c1ac6-d702-4903-a5b5-7e07507191ee
OS 类型:    hvm
状态:       running
CPU:          2
CPU 时间:   24.9s
最大内存: 1048576 KiB
使用的内存: 724288 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

有时候我们在虚拟机主机内运行着公司重要的线上业务,哪能随笔就重启的,所以在硬件遇到瓶颈的时候我们需要在保证业务正常运行的情况下 动态的调整硬件资源的大小

代码语言:javascript
复制
[[email protected] kvm_data]# virsh setmem zhdya01 850M

[[email protected] kvm_data]# virsh console zhdya01
连接到域 zhdya01
换码符为 ^]

[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           818M         80M        606M        6.5M        130M        588M
Swap:          1.0G          0B        1.0G

//虽然有误差 但是和实际设置的还是不大的。

需要把配置写入到配置文件里

代码语言:javascript
复制
virsh dumpxml zhdya01 > /etc/libvirt/qemu/zhdya01.xml

当然也可以动态的将内存降低:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh setmem zhdya01 550M

[[email protected] kvm_data]# virsh console zhdya01
连接到域 zhdya01
换码符为 ^]


[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           518M         81M        306M        6.5M        130M        287M
Swap:          1.0G          0B        1.0G

但是如果设置CPU的话就不可以从大到小的去设置。

如果当前使用的是 1核 你可以设置为 2核 但是一旦设置了 2核 你需要降低为 1核 那就不可以。

代码语言:javascript
复制
[root@zhdya01 kvm_data]# virsh setvcpus zhdya01 2

[root@zhdya01 kvm_data]# virsh setvcpus zhdya01 1
错误:不支持的配置:failed to find appropriate hotpluggable vcpus to reach the desired target vcpu count

根据如上,就有那么一个小经验:

我们在给虚拟机分配 硬件资源的时候,一定要给到位,假如宿主机是 8核 16G 我建议每台机器你都设置为 8核 16G 但是这个不是真正给虚拟主机分配的,这个只是最大支持的配置,后期随着业务的发展我们可以动态的去增加用来满足业务的需求!!

网卡调整
代码语言:javascript
复制
virsh domiflist zhdya01    //查看网卡

virsh attach-interface zhdya01 --type bridge  --source virbr0  //增加一块新的网卡,并设置为nat网络模式(virbr0类似vmware的vmnet8),这里如果写--source br0,则网络模式为桥接

或者再次增加一块网卡到br0
virsh attach-interface zhdya01 --type bridge  --source br0

virsh dumpxml zhdya01 > /etc/libvirt/qemu/zhdya01.xml  //需要把配置写入到配置文件里

再次查看:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh domiflist zhdya01
接口     类型     源        型号      MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:02:cf:d7
vnet1      bridge     virbr0     rtl8139     52:54:00:2f:df:f3
vnet2      bridge     br0        rtl8139     52:54:00:e3:e7:73

进入到虚拟主机:

代码语言:javascript
复制
[[email protected] kvm_data]# virsh console zhdya01
连接到域 zhdya01
换码符为 ^]


[[email protected] ~]# ifconfig 
ens8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.218  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::cc35:d0bc:ee8f:54d2  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:2f:df:f3  txqueuelen 1000  (Ethernet)
        RX packets 64  bytes 5393 (5.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 78  bytes 7110 (6.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.161.131  netmask 255.255.255.0  broadcast 192.168.161.255
        inet6 fe80::f29a:6db6:d98a:d7bb  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:e3:e7:73  txqueuelen 1000  (Ethernet)
        RX packets 138  bytes 7117 (6.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1454 (1.4 KiB)[[email protected] kvm_data]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.161.161  netmask 255.255.255.0  broadcast 192.168.161.255
        inet6 fe80::5c32:87ff:fe34:c4a4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 4125  bytes 254377 (248.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1801  bytes 229207 (223.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 4161  bytes 317547 (310.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1806  bytes 238797 (233.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:58:db:51  txqueuelen 1000  (Ethernet)
        RX packets 94  bytes 6686 (6.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 86  bytes 7699 (7.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:02:cf:d7  txqueuelen 1000  (Ethernet)
        RX packets 1105  bytes 73992 (72.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查看下宿主机:

代码语言:javascript
复制
[[email protected] kvm_data]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.161.161  netmask 255.255.255.0  broadcast 192.168.161.255
        inet6 fe80::5c32:87ff:fe34:c4a4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 4125  bytes 254377 (248.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1801  bytes 229207 (223.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 4161  bytes 317547 (310.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1806  bytes 238797 (233.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:58:db:51  txqueuelen 1000  (Ethernet)
        RX packets 94  bytes 6686 (6.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 86  bytes 7699 (7.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如上我们配置了网卡和内存以及cpu均没有正式的生效,尽在内存的缓存中,我们需要把配置保存到配置文件中。

代码语言:javascript
复制
virsh dumpxml zhdya01 > /etc/libvirt/qemu/zhdya01.xml
迁移虚拟机
代码语言:javascript
复制
该方式要确保虚拟机是关机状态
virsh shutdown zhdya01

virsh dumpxml zhdya01 > /etc/libvirt/qemu/zhdya03.xml  // 如果是远程机器,需要把该配置文件拷贝到远程机器上

virsh domblklist zhdya01   //查看虚拟机磁盘所在目录

rsync -av /kvm_data/zhdya01.img  /kvm_data/zhdya03.img    //如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上

vi /etc/libvirt/qemu/zhdya03.xml   //因为是迁移到本机,配置文件用的是zhdya01子机的配置,不改会有冲突,所以需要修改该文件,如果是远程机器不用修改

修改domname:   <name>zhdya03</name>

修改uuid(随便改一下数字,位数不要变)

修改磁盘路径

virsh define /etc/libvirt/qemu/zhdya03.xml   //定义新虚拟机

virsh list --all   //会发现新迁移的zhdya03子机
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/02/10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 磁盘格式
    • 把zhdya02转换为raw格式的磁盘
    • 磁盘扩容 – raw格式
    • 如何增加一块新的硬盘呢?
      • 磁盘扩容(raw)
        • 磁盘扩容(qcow2)
        • 调整CPU,内存,网卡
          • 网卡调整
          • 迁移虚拟机
          相关产品与服务
          轻量应用服务器
          轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档