• Linux系统KVM虚拟化技术


    在公司工作时出现了这样一个需求:需要在一台服务器中安装两个系统,分别部署不同的服务,设置不同的系统时间,并且两个系统之间可以互相通讯。在网上查询相关资料后,决定通过KVM实现该功能,现将步骤记录如下。

    我这边服务器用的是CentOs7.2版本。虚拟机也使用相同版本。主机名hls 、IP:192.168.1.11。

    虚拟机主机名hls01

    一、安装前准备

    1、 查看CPU是否支持KVM

    (e)grep  -E '(vmx|svm)'   /proc/cpuinfo

    如果出现vmx 则表示支持

     

    2、 关闭SELinux

    将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled

     

    3、 安装KVM需要的软件包

    yum install kvm libvirt kmod-kvm qemu-kvm virt-manager bride-utils virt-install

      

    其中:virt-manager是GUI管理窗口,bridge-utils 用于网络桥接qemu-kvm用来创建虚拟机硬盘,libvirt用来管理虚拟机 virt-install 用来创建虚拟机

    4、 安装完成检查模块是否有加载。

    lsmod | grep kvm

     

    5、 检查KVM是否安装成功

    virsh -c qemu:///system list

     

    6、 开启KVM服务并且设置其开机启动

    systemctl start libvirtd

    systemctl enable libvirtd

    查看KVM状态操作结果

    systemctl status libvirtd

     systemctl is-enabled libvirtd

    7、 网卡配置

    启动libvirtd,并将它设为开机启动,启动后使用ifconfig查看发现会自动建立一个名称为virbr0的虚拟网桥,ip默认为192.168.122.1/24,说明libvirtd启动成功,如果默认没有ifconfig命令,使用yum install -y net-tools安装。在多网卡情况下,此网桥默认与eth1网卡绑定。为了向虚拟机提供联网功能,KVM使用virbr0作为默认网络设备,因此在实际应用中,需要将virbr0与连接到实际网络的网卡绑定。

    1)      添加网桥br0

    vi /etc/sysconfig/network-scripts/ifcfg-br0

    TYPE=bridge

    BOOTPROTO=static

    NM_CONTROLLED=yes

    NAME= br0

    DEVICE= br0

    ONBOOT=yes

    IPADDR=192.168.1.12

    GATEWAY=192.168.1.1

    DNS1=192.168.1.1

    也可以根据自己需要设置成自动获取

        vi /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    BOOTPROTO=dhcp

    然后修改本机的物理网卡

    vi  /etc/sysconfig/network-scripts/ifcfg-eth0

    在最后面添加 BRIDGE=br0

    重启网卡   service network restart

    现在访问电脑 使用192.168.1.12就可以了。

    二、使用KVM创建虚拟机

    1、 创建安装硬盘

    使用qemu命令创建一个10G的硬盘(最小10G,可以更多这块硬盘空间就是虚拟机系统硬盘总空间),我这边硬盘的名称为: CentOS-7-x86_64.raw

    qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
     
    查看硬盘  ll -h /opt
     

    
    
     
    2、 创建虚拟机
    先在根目录下创建一个ISO的目录文件夹用来存放CentOS7的ISO文件
     mkdir ISO
     

    
    
    
    
    virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024  --cdrom=/root/ISO/OracleLinux-R7-U2-Server-x86_64-dvd.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 –-noautoconsole
     

    其中CentOS-7-x86_64是虚拟机的名称 可以自己随便定 –cdrom 是我们放的ISO文件的路径 –disk path 是我们创建的硬盘路径。

    但是我这边在执行的时候出现了一个错误

     

    Permission denied 。最开始我以为是ISO文件没有权限,但是授权之后仍然出现这个问题于是在网上找资料,最终发现是需要修改/etc/libvirt/qemu.conf 配置文件。

     vi /etc/libvirt/qemu.conf

    需要配置qemu进程的用户和组相关配置,可根据自己的实际情况进行修改,这边我将user和group都设置成root:

     

    配置修改完成后,需要重启libvirtd服务

      service libvirtd restart

    然后再重新执行上一步就会发现已经开始安装了

    这时候使用TightVNC工具 连接主机IP 192.168.1.12

     

    进去之后就是CentOS7的安装界面,一步步安装就行了。

     

    还有一种方法是先不创建虚拟机硬盘 直接在命令中指定

    mkdir –p /home/iso  将iso文件上传到目录下

    mkdir -p /home/kvm-bak   创建虚拟机文件存放路径

    创建虚拟机 

    virt-install -n hls01 -r 2048 --disk /home/kvm-bak/hls01.img,format=qcow2,size=20 --network bridge=br0 --os-type=linux --os-variant=none --cdrom /home/iso/ OracleLinux-R7-U2-Server-x86_64-dvd.iso --vnc --vncport=5910 --vnclisten=0.0.0.0

    然后就可以用VNC Viewer连接一步步安装。

    安装中间出现的问题:使用VNC工具连接到虚拟机直接是黑屏,没法显示安装界面。

    这里困扰我几天,找了各种资料、修改了很多配置文件、安装很多包都没有解决。最后偶然发现是我的Linux系统内核问题。我这边使用的是Oracle版本的CentOS系统,默认的是3.8的uek内核与VNC图形不匹配。改成3.10的Red Hat 内核就行。如果是原版的CentOS系统就直接没有这个问题。算是我给自己挖的坑。

    解决方法是将默认内核修改步骤如下:

    cat /boot/grub2/grub.cfg |grep menuentry   查看系统可用内核

    grub2-editenv list    查看系统默认内核

    grub2-set-default 'Oracle Linux Server (3.10.0-327.el7.x86_64 with Linux) 7.2'  修改系统默认内核

    grub2-editenv list    查看修改结果

     

    三、虚拟机的配置工作

    1、查看虚拟机信息

    当KVM中的虚拟机启动后,可以在/etc/libvirt/qemu目录下,看到启动的虚拟机的信息

     

    使用命令 virsh edit CentOS-7-x86_64 我们可以看到更多信息并且可以修改。

    2、配置网卡

    我们可以在安装虚拟机系统时指定使用桥接模式 br0

    如果我们已经安装好系统就需要在其XML配置文件中修改。

     virsh edit CentOS-7-x86_64

     

    将 type 改为bridge   network=’default’改为bridge=’br0’

     

    修改完成后需要重启虚拟机

    virsh shutdown CentOS-7-x86_64     ##关闭虚拟机

    virsh list --all            ##查看所有虚拟机状态

    virsh start CentOS-7-x86_64      ##启动虚拟机

    主机就可以和虚拟机之间相互通讯了。也可以用SSH连接虚拟机。

    3、 CPU热添加(KVM支持CPU的热添加,不过局限是宿主机和虚拟机的系统相同才行,这里宿主机是CentOS7,虚拟机也是CentOS7,所以可以模拟CPU热添加,不过真实生产环境不建议这样操作)

    virsh edit CentOS-7-x86_64

    将  <vcpu placement='static'>1</vcpu> 修改为:

    <vcpu placement='auto' current="1">4</vcpu>

    意思是当前cpu为1核,最多可以有4核,修改完虚拟机的配置文件,必须关闭虚拟机再启动,配置才能生效

     

    在主机上通过命令添加核数

     virsh setvcpus CentOS-7-x86_64 2 --live ##虚拟机的cpu添加到2core

    再通过VNC工具查看虚拟机CPU信息

     

    4、 内存热添加

    查看当前虚拟机内存

    virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon

    修改当前虚拟机内存为512(可根据实际需要调大或者调小虚拟机内存)

      virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512

     

    四、迁移虚拟机

    虚拟机建好后,最大的好处就是任由我们折腾,而不用担心重装系统的麻烦。所以一定要知道虚拟机怎么复制迁移,这里有两种情况,一种是本机上镜像复制,另一种是将本机镜像迁移到其他服务器上

    1、 本机复制

    先关闭虚拟机  virsh shutdown CentOS-7-x86_64
    创建一个克隆的虚拟机硬盘  mkdir -p /home/kvm-img
     使用 virt-clone 克隆CentOS-7-x86_64为新的虚拟机
    virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64_01 -f /home/kvm-img/ CentOS-7-x86_64_01.img
     
    克隆完成 使用 virsh list –all 查看虚拟机的状态
     
    开启CentOS-7-x86_64_01然后修改IP地址主机名

     virsh start CentOS-7-x86_64_01

     hostname hls02

    vi /etc/hostname

    重启虚拟机 reboot

    2、 将虚拟机镜像(CentOS-7-x86_64_01)迁移到其他服务器上

    先找到虚拟机的配置文件和镜像文件的位置然后将CentOS-7-x86_64_01.img放到新服务器的/home/kvm-img目录下,将CentOS-7-x86_64_01.xml放到 /etc/libvirt/qemu 目录中

    都改名为CentOS-7-x86_64_02

    复制一个 CentOS-7-x86_64_02.xml 将里面所有CentOS-7-x86_64_01替换为CentOS-7-x86_64_02,然后把UUID换为新的 同时注意xml中的source file 文件路径要修改。

    定义新的虚拟机 virsh define /etc/libvirt/qemu/ CentOS-7-x86_64_02.xml

    按照需要修改IP,主机名然后重启就行了。

    3、删除虚拟机

    如果虚拟机在工作中可以先关闭也可以直接destroy然后再undefine移除

    virsh destroy  CentOS-7-x86_64

    virsh undefine CentOS-7-x86_64

    如果虚拟机已经关闭直接undefine 移除就行

    再删除相应的文件

    /var/lib/libvirt/images/CentOS-7-x86_64

    /etc/libvirt/qemu/CentOS-7-x86_64

  • 相关阅读:
    【BZOJ1495】[NOI2006]网络收费 暴力+DP
    【BZOJ2827】千山鸟飞绝 hash+堆+SBT
    【BZOJ2905】背单词 fail树+DFS序+线段树
    【BZOJ3120】Line 矩阵乘法
    【BZOJ1441】Min 拓展裴蜀定理
    【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP
    【BZOJ3416】Poi2013 Take-out 栈
    【BZOJ4244】邮戳拉力赛 DP
    【BZOJ3717】[PA2014]Pakowanie 状压DP
    【BZOJ1217】[HNOI2003]消防局的设立 树形DP
  • 原文地址:https://www.cnblogs.com/lk-fxtx/p/7692773.html
Copyright © 2020-2023  润新知