KVM虚拟化搭建及其KVM中LVM扩容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM虚拟化搭建及其KVM中LVM扩容相关的知识,希望对你有一定的参考价值。

                                             KVM虚拟化搭建及其KVM中LVM扩容

    前言:

            公司项目方最近有两台物理服务器系统分别为CentOS 7.2。需要部署KVM虚拟化,第一台服务器A需要虚拟出三台虚拟机(均为CentOS 7.2系统),服务器B上需要虚拟出三台CentOS 7.2 系统和两台windows server2012 系统。其中六台CentOS 7.2 虚拟机需要部署我们自己的平台,两台windows分别部署客户的平台。下面来为大家说一下KVM虚拟化的搭建,以及创建虚拟机的两种办法,及其操作使用。


    KVM小课补:

            今天这一章内容是利用linux内核的一个模块kvm,并使用一些辅助工具来搭建虚拟机,完成和esxi类似的操作(vsphere虚拟化平台,底层需要ESXI,使用vcenter管理esxi,从而实现了虚拟机的迁移,备份,高可用等操作,但是安装成本很高,需要购买正版。),实现linux虚拟化。KVM直接整合到了linux内核,因此在性能、安全性、兼容性、稳定性上都有好的表现。我们都知道,使用虚拟化技术可以为公司节约成本,可以在一台物理机上运行多个系统,充分利用物理机的资源。


    搭建KVM虚拟化:

        准备环境:

        建议使用一台物理机来配置kvm环境,需要cpu支持intel VT等硬件虚拟化功能。

        检查虚拟化:

        cat /proc/cpuinfo | grep vmx

        确认有结果输出。则表示该机器支持或已配置intel VT。vmx(intel)或svm(AMD) 支持虚拟技术。

        配置yum源:

       #首先需要把你要使用CentOS系统上传到服务器。

        #挂载centos镜像

        mount -o loop  CentOS-7-x86_64-Everything-1511.iso   /mnt/cdrom

  

        #修改yum仓库地址

        cat  yum.repo.d/my.repo  

        [base]

        name=mycentos

        baseurl=file:///mnt/cdrom

        gpgckeck=0

        enabled=1 

        gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7

        

        安装软件包:

        yum install libvirt qemu-kvm virt-install bridge-utils qemu-img virt-manager libguestfs

        启动服务,并设置为开机自启动:

        systemctl start libvirtd


        理论:  设置kvm网络

        在libvirt中运行kvm网络有两种方法:nat和bridge,默认是nat(用户模式),用户模式可以访问外网,但是无法从外部访问虚拟机网络,所以用的不是很多,我们一般做的服务器都需要外网的访问,所有我们多数情况采用桥接模式(bridge),这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机。

        

        调整网络配置,建立虚拟网桥。配置之前,需要先备份一下,要修改的文件。

        配置网桥br0,让eth0或者em1桥接到br0上。

        #cat ifcfg-eth0

  

         DEVICE=eth0

            BOOTPROTO=none

            ONBOOT=yes

            HOTPLUG=yes

            TYPE=Ethernet

            PEERDNS=no

            BRIDGE=br0

            NM_CONTROLLED=no

  

        #cat ifcfg-br0

  

         DEVICE=br0

            BOOTPROTO=static

            ONBOOT=yes

            TYPE=Bridge

            IPADDR=xxx.xxx.xxx.xxx

            NETMASK=xxx.xxx.xxx.xxx

            GATEWAY=xxx.xxx.xxx.xxx

            PEERDNS=no

            DELAY=0

            STP=yes

            NM_CONTROLLED=no


下面就是创建虚拟机:

        有两种方法:

       第一种:创建虚拟机

         

        #准备虚拟机ISO文件

        /tmp/CentOS-7-x86_64-Everything.iso


        #创建一块虚拟磁盘

        qemu-img create -f qcow2 /var/lib/libvirt/images/server-1.qcow2 750G


        #启动镜像安装虚拟机

        virt-install --virt-type kvm --name server-1 --ram 16384 --vcpu 8 \

        --disk /var/lib/libvirt/images/server-1.qcow2,format=qcow2 \

        --network bridge=br0,model=virtio \

        --graphics vnc,listen=0.0.0.0 --noautoconsole \

        --os-type=linux --os-variant=rhel7 \

        --cdrom=/tmp/CentOS-7-x86_64-Everything.iso


        #使用vnc登入虚拟机,安装系统。

        #系统安装完成之后,需要更改虚拟机的配置

        virsh  edit server-1

   

    

  <memory unit=‘KiB‘>33554432</memory>                                     #在条件允许的情况下,一般建议将内存提升至32G

  <currentMemory unit=‘KiB‘>33554432</currentMemory>

  <vcpu placement=‘static‘>16</vcpu>                                              #在条件允许的情况下,一般建议将CPU提升至16核

    

<interface type=‘bridge‘>                                                        #修改网桥模式,在type=‘bridge‘修改成网桥

      <mac address=‘52:54:00:17:fa:65‘/>

      <source bridge=‘br0‘/>                                                     #修改网桥模式,在source brige=‘br0‘修改成br0网桥

      <model type=‘virtio‘/>

      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>

</interface>


###使用vnc-server连接宿主机5900端口,然后安装系统。

列出所有虚拟机

virsh list --all

查看虚机vnc端口

virsh vncdisplay server-1

  

:0

0则表示5900+0就是虚机的vnc端口

安装完毕后关闭虚机


    第二种方法是建立在第一种发放之上的。将现有的虚拟机server-1.xml和server-1.qcow2文件,拷贝几份(自己需要几个虚拟机拷贝几份),拷贝之前需要关闭虚拟机,使用命令如下:

virsh shutdown  server-1 关闭虚拟机

virsh undefine server-1   把server-1.xml文件undefine下来


修改sever-1.xml文件,修改如下:

需要修改name 、uuid、    memory、vcpu、mac地址(因为是cp的文件,所以必须修改mac地址,不修改会造成虚拟机之间无法通信)等等。修改文件必须虚拟机关机并undefine下来,不然修改不生效。


修改完成后,在使用virsh define server-1.xml ,并 virsh start server-1 启动。

使用virsh list --all看一下虚拟机的状态。如果是running状态表示已经启动了。


以上是两种方法:第二种建议要细心,思路清晰,不然请选择第一种方法。


    创建Windows虚机

准备文件:

1.准备iso镜像文件

/tmp/windows2008R2-x64.iso

2.准备virtio驱动iso


创建虚拟磁盘

# qemu-img create -f raw /tmp/win1.raw 40G

 

启动虚拟

# virt-install  --name win1 --ram 2048 --vcpus 2 \

  --network bridge=br0,model=virtio \

  --graphics vnc,listen=0.0.0.0 --noautoconsole \

  --disk path=/tmp/win1.raw,device=disk,bus=virtio \

  --cdrom=/tmp/virtio-win.iso \

  --disk path=/tmp/windows2012-x64.iso,device=cdrom \

  --os-type windows --os-variant win1

 

###使用vnc-server连接宿主机5900端口,然后安装系统。

列出所有虚拟机

virsh list --all

查看虚机vnc端口

virsh vncdisplay server-1

  

:0

0则表示5900+0就是虚机的vnc端口


安装系统过程中

默认情况下Windows检测不到可用的安装磁盘。 需要加载驱动,选择光驱的viostor目录,按照系统版本加载相应的驱动
如手动安装加载磁盘驱动:浏览 E:\viostor\xxx\xxxx\viostor.inf

完成系统安装,使用Administrator登录系统。


注意:

由于服务器在机房,我远程连接,和机房服务器不在一个网,需要使用跳板机连接物理服务器来部署KVM的,要想使用VNC客户端工具,需要在物理服务器上开启VNC proxy功能,命令如下:

iptables  -I INPUT 1  -p tcp   --dport 5900:5910 -j ACCEPT


使用VNC连接虚拟机修改完IP地址等信息后,需要立刻关闭VNC的5900端口,防止被黑客扫描攻击。

iptables -D  INPUT   -p tcp  --ports 5900:5990  -j ACCEPT


查看防火墙规则:

iptables -L -n


KVM上虚拟机LVM扩容流程及其命令:

逻辑卷扩容根分区的方法:

1:首先新加一块磁盘,连接至主机。开机,进入系统。使用root登录,运行fdisk,将新加的磁盘分区(此处省略)。我们这里假设将全部磁盘容量只分一个区,分区为/dev/sdb1;

2:创建pv: pvcreate /dev/sdb1

3:扩展VG:vgextend  centos  /dev/sdb1

4:运行vgdisplay ,查看扩展后的VG,如果显示容量增加,表示,VG扩展成功;

5:扩展LV: lvextend -L + n(M,或G) /dev/mapper/centos-root

6  xfs_growfs /dev/VolGroup/lv_root


修改文件位置:

<disk type=‘file‘ device=‘disk‘>

      <driver name=‘qemu‘ type=‘qcow2‘ cache=‘none‘/>

      <source file=‘/data/vm/huge.img‘/>

      <target dev=‘vdb‘ bus=‘virtio‘/>

    </disk>


create一个:

qemu-img create -f qcow2 /data/vm/huge.img 500G

简单报错分析:

1、几台KVM服务器上虚拟机无法通信,检查方法:

      1)检查一下虚拟机本身的网卡信息,IP是否正确、是否MAC地址冲突、等等。

      2)检查是否有默认路由,创建默认路由命令格式如下:

            ip r add default 【xxxxip地址】 via dev br0

      3)检查网卡是否为桥接模式,使用命令brctl show查看,是否桥接是错误

         例如:KVM配置的br0桥接,使用命令brctl show查看,是否虚拟机使用的是br0 或者virbr0模式。

                    如果在NAT方式下,会使用virbr0进行通信,以允许虚拟机访问网络服务。
                    目前我们环境是桥接,所有没有作用。查看和禁用:
                    # virsh net-list
                    # virsh net-destroy default
                    # virsh net-undefine default
                    # service libvirtd restart
                        或者
                    #ifconfig virbr0 down
                    #brctl delbr virbr0

      4)如网络不通,可以查看是否为混杂模式,命令如下:

            设置混杂模式命令:

            ifconfig 【网卡名称】 promisc

            使用ifconfig看看是否设置为混杂模式。



KVM虚拟化常用命令操作汇总:

virsh list --all   查看虚拟机状态
virsh start kvm01  开机
virsh shutdown kvm01 关机(虚拟机需开启acpid服务)
virsh destroy kvm01 强制开机
virsh suspend kvm01 挂起虚拟机
virsh resume kvm01 恢复挂起的虚拟机
virsh snapshot-create kvm01  建虚拟机快照(建快照镜像格式要为qcow2格式)
virsh snapshot-list kvm01   查看虚拟机快照
virsh snapshot-revert kvm01 1489386302 恢复虚拟机快照
virsh edit kvm01 编辑配置文件
virsh autostart kvm01 设置物理机开机自动启动虚拟机
virsh dumpxml kvm01 > kvm01.xml 导出虚拟机配置文件
/etc/libvirt/qemu/   虚拟机配置文件默认目录
virsh undefine kvm01 删除一个虚拟机(会一起删除配置文件,镜像不删除)
virsh define /etc/libvirt/qemu/kvm01.xml 重新定义一个虚拟机
virt-clone -o kvm01 -n kvm02 -f  /var/lib/libvirt/images/kvm02.img 克隆虚拟机(/etc/udev/rules.d/70-persistent-net.rules启动后删除)
qemu-img info kvm01 查看虚拟机镜像格式

qemu-img convert -f raw -O qcow2 kvm01.img kvm01.qcow2 转换虚拟机镜像格式

qemu-img create -f qcow2  /var/lib/libvirt/images/kvm01-1.img 20G  新建虚拟机镜像磁盘
virsh attach-disk kvm01 /var/lib/libvirt/images/kvm01-1.img vdb --cache=none --subdriver=qcow2 在线添加虚拟机镜像硬盘






本文出自 “卢春宁” 博客,谢绝转载!

以上是关于KVM虚拟化搭建及其KVM中LVM扩容的主要内容,如果未能解决你的问题,请参考以下文章

记录一次kvm虚拟机apparmor相关无法启动故障排除

997-扩展KVM虚拟机逻辑卷

kvm虚拟机磁盘扩容

26.KVM

Linux系统KVM虚拟机实战LVM逻辑卷之扩展Swap交换分区

利用KVM工具(virsh)给KVM扩容