CentOS下KVM虚拟化学习笔记

前言:

虚拟化的理论知识我就不啰嗦了,可以参见http://bbs.linuxtone.org/thread-24347-1-1.html,kvm全称Kernel-based  Virtual Machine, 其实kvm只是一个内核模块,提供虚拟cpu和内存管理的模块,至于其它的设备是由qemu模拟的,如网卡,显卡,磁盘等。后来redhat联合IBM以及Linux社区创造了libvirt,模拟的设备性能要比qemu的好很多,并提供了一系列的管理工具和api,整个集成了kvm虚拟化的解决方案。Linux(redhat系)装载kvm模块后,妖神一变成为了VM Monitor,也称为Hypervisor,部署使用简单,需要硬件支持虚拟化。

 

一.  部署虚拟机

1).  检测硬件是否支持虚拟化

#   egrep   '(vmx|svm)'   --color=always   /proc/cpuinfo 
#   modprobe   kvm 
#   modprobe   kvm_intel   ||   modprobe   kvm_amd

如果含有vmx或者svm字样,则表示支持CPU虚拟化,Intel是vmx,AMD是svm,也需要检测是否有kvm_xxx模块,如果装载不成功,可能是没有开启硬件虚拟化,需要bios中开启,具体开启方式请联系厂家

2). 安装rpm包,并启动服务

# yum -y install kvm  python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v libguestfs-tools 
# service libvirtd start

3). 检查是否有kvm模块,如果有则继续

#   lsmod   |   grep   kvm 
kvm_intel                             52570     30   
kvm                                       314739     1   kvm_intel

4). 配置桥接网络 br0

#   cd   /etc/sysconfig/network-scripts/ 
#   cp   ifcfg-eth0   ifcfg-br0 

    ifcfg-eth0 : 

        DEVICE = eth0 
        TYPE = Ethernet 
        ONBOOT = yes 
        NM_CONTROLLED = yes 
        BRIDGE = " br0 " 
        BOOTPROTO = static 
        IPADDR = " 192 . 168 . 2 . 149 " 
        NETMASK = " 255 . 255 . 255 . 0 " 
        GATEWAY = " 192 . 168 . 2 . 2 " 

    ifcfg-br0 : 

        DEVICE = br0 
        TYPE = Bridge 
        ONBOOT = yes 
        NM_CONTROLLED = yes 
        BOOTPROTO = static 
        IPADDR = " 192 . 168 . 2 . 149 " 
        NETMASK = " 255 . 255 . 255 . 0 " 
        GATEWAY = " 192 . 168 . 2 . 2 " 

#   service   network   restart     
#   ifconfig   
     br0   . . . 
     eth0   . . . 
     lo   . . . 
     virbr0   . . .

5). 部署安装虚拟机(GuestOS)

    ① 建立磁盘文件,如果使用的是raw格式就不需要了,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持快照镜像,zlib磁盘压缩,AES加密等。这里使用qcow2格式

     #   mkdir   /opt/vms   
     #   qemu-img   create   -f   qcow2   /opt/vms/centos63-webtest.img   40G

    ② 建立虚拟机, 下面展示多种方式建立虚拟机

     ########### 使用使用iso来安装 ########### 
     # virt-install \ 
      --name=centos5 \ 
      --os-variant=RHEL5 \ 
      --ram=512 \ 
      --vcpus=1 \ 
      --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
      --accelerate \ 
      --cdrom /data/iso/CentOS5.iso \ 
      --vnc --vncport=5910 \ 
      --vnclisten=0.0.0.0 \ 
      --network bridge=br0,model=virtio \ 
      --noautoconsole 



     ######### 从http中启动,使用ks安装 ######### 

     # virt-install \ 
     --name=centos63-webtest \ 
     --os-variant=RHEL6 \ 
     --ram=4096 \ 
     --vcpus=4 \ 
     --virt-type kvm  \ 
     --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
     --accelerate  \ 
     --location http://192.168.130.4/centos63 \ 
     --extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\ 
     --vnc --vncport=5910 \ 
     --vnclisten=0.0.0.0 \ 
     --network bridge=br0,model=virtio \ 
     --force \ 
     --noautoconsole 


     ########## 从http安装,使用ks, 双网卡, 启用console ######## 
     # virt-install \ 
     --name=centos63-webtest \ 
     --os-variant=RHEL6 \ 
     --ram=4096 \ 
     --vcpus=4 \ 
     --virt-type kvm  \ 
     --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
     --accelerate  \ 
     --location http://111.205.130.4/centos63 \ 
     --extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0  serial" 
     --vnc --vncport=5910 --vnclisten=0.0.0.0 \ 
    --network bridge=br0,model=virtio \ 
    --network bridge=br1,model=virtio \ 
    --force \ 
    --noautoconsole 


参数说明: 

--name指定虚拟机名称 
--ram分配内存大小。 
--vcpus分配CPU核心数,最大与实体机CPU核心数相同 
--disk指定虚拟机镜像,size指定分配大小单位为G。 
--network网络类型,此处用的是默认,一般用的应该是bridge桥接。可以指定两次也就是两块网卡 
--accelerate加速 
--cdrom指定安装镜像iso 
--location 从ftp,http,nfs启动 
--vnc启用VNC远程管理 
--vncport指定VNC监控端口,默认端口为5900,端口不能重复。 
--vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。 
--os-type=linux,windows 
--extra-args指定额外的安装参数 
--os-variant= [win7 vista winxp win2k8 rhel6 rhel5] 
--force 如果有yes或者no的交互式,自动yes

    ③ 安装系统 有三种方式,通过VNC来安装, 通过virt-manager来安装 , 通过console配合ks来安装

        Ⅰ.  通过VNC来安装

        下载TightVNC来连接上vnc安装,只需要TightVNC Client即可,如果使用在RealVNC,就设置ColourLevel=rgb222才能连接,端口号是安装时指定的,以后的安装流程和普通的是一样的

 

 

      Ⅱ.  通过virt-manager, 如果你使用xshell那么可以不用安装x window就可以使用virt-manager, 需要安装 x11相关软件

     #   yum   -y   install   libX11   xorg-x11-server-utils   xorg-x11-proto-devel   dbus-x11   xorg-x11-xauth   xorg-x11-drv-ati-firmware     xorg-x11-xinit 
     #   virt-manager

 

     Ⅲ. 通过virt console, 如果你安装时启用了 console可以使用 console来安装, Ctrl+]  可以退出console

     # virsh console centos63-webtest

二. virsh常见命令解释

    1 .   virsh进入交互模式,在该交互模式下有命令不全补全,详细帮助 
          virsh   #   lis[tab补全] 
          virsh   #   help   list       详细帮助 
    2 .   virsh   list   --all   查看虚拟机状态 
    3 .   virsh   start   instanceName   虚拟机开机 
    4 .   virsh   shutdown   instanceName   虚拟机关机   
          需要Linux母体机电源管理 
          service   acpid   start 
    5 .   virsh   destroy   instanceName     强制关机 
    6 .   virsh   create   /etc/libvirt/qemu/wintest01 . xml   通过以前的配置文件创建虚拟机 
    7 .   virsh   autostart   instanceName   配置自启动 
    8 .   virsh   dumpxml   wintest01   >   /etc/libvirt/qemu/wintest02 . xml   导出配置文件 
    9 .   virsh   undefine   wintest01   删除虚拟机配置文件,不会真的删除虚拟机 
    10 .   mv   /etc/libvirt/qemu/wintest02 . xml   /etc/libvirt/qemu/wintest01 . xml   
            virsh   define   /etc/libvirt/qemu/wintest01 . xml   
            重新定义虚拟机 
    11 .   virsh   edit   wintest01     编辑虚拟机配置文件 
    12 .   virsh   suspend   wintest01     挂起虚拟机 
    13 .   virsh   resume   wintest01   恢复挂起虚拟机
 
 

三. 克隆

1).  使用virt-manager来克隆,这个太简单了,就不演示了,需要注意的是,如果启用了VNC, 记得更改VNC的端口,否则启动会失败的,见命令方式修改VNC修改

2).  使用命令克隆虚拟机

     #   virt-clone   -o   centos63_webtest   -n   centos63_webtest2   -f   /opt/vms/centos_webtest2.img

     参数说明: 
         -o –-original  原来实例name 
         -n –-name      新实例名称 
         -f –-file      新实例磁盘存放位置

3).  如果你启用了vnc, 修改配置文件中的vnc端口,否则启动失败,配置文件为 /etc/libvirt/qemu对应实例名字的xml文件,先来一张配置文件解释图,很重要

     # cd /etc/libvirt/qemu 
     # ls 
     # virsh edit centos63_webtest 
   
      <graphics type='vnc' port='5915'   ............

4).  启动克隆机器 (有的Linux版本可能生成的网卡有问题,请修改 /etc/udev/rules.d/70-persistent-cd.rules, 重启虚拟机)

    # virsh start centos63_webtest1

四.  快照

快照相信大家都知道是什么意思,如果不知道,亲去补补课吧,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。  要使用镜像功能,磁盘格式必须为qcow2。下面开始kvm虚拟机快照的过程。

1). 查看磁盘格式

#   qemu-img   info   /opt/vms/centos63-119.22.img   
image :   /opt/vms/centos63- 119 . 22 . img 
file   format :   qcow2 
virtual   size :   40G   ( 42949672960   bytes ) 
disk   size :   136K 
cluster_size :   65536

2). 如果不是qcow2需要关机转换磁盘格式,如果是请跳过

#   cp   centos63-119.22.img   centos63-119.22.raw 
#   qemu-img   convert   -f   raw   -O   qcow2   centos63-119.22.raw     centos63-119.22.img  

3). 启动vm, 建立快照,以后可以恢复

#   virsh   start   centos63-119.22 
#   virsh   snapshot-create   centos63-119.22

4). 快照位置

快照配置文件在/var/lib/libvirt/qemu/snapshot/虚拟机实例名称/下

5). 恢复快照,可以建立一些测试文件,准备恢复

先将虚拟机关闭,查看快照名称,然后恢复快照

#   ls   /var/lib/libvirt/qemu/snapshot/centos63-119.22 
1410341560 . xml 
#   virsh   snapshot-revert   centos63-119.22   1410341560

6). 删除快照

#   qemu-img   info       centos63-119.22 
        1                  1410341560                           228M   2014 - 04 - 08   10 : 26 : 40       00 : 21 : 38 . 053 
#   virsh   snapshot-delete   centos63-119.2  1410341560
 

五. 让已安装的虚拟机GuestOS支持 virsh console

virsh console vmname 可以进入到vm的console模式,但是有时只显示链接到vm,提示如下,回车没有反应,这是因为guestos不支持console,下面来启用guestos的console

Connected   to   domain   centos63- 119 . 22 
Escape   character   is   ^ ]

1). 修改grub.conf,给内核传递参数 console=ttyS0

#   vim   /etc/grub.conf   
kernel   /vmlinuz- 2 . 6 . 32 - 279 . el6 . x86_64   ro   root = UUID = 25756cd7- 3597 -4e45-8dd 
db-79d091c6d17f   rd_NO_LUKS     KEYBOARDTYPE = pc   KEYTABLE = us   LANG = en_US . UTF- 8   rd_NO_MM 
D   SYSFONT = latarcyrheb-sun16   console=ttyS0   rd_NO_LVM   crashkernel = auto   rhgb   quiet     
rd_NO_DM

2). 在/etc/inittab中添加agetty

#   echo   "S0:12345:respawn:/sbin/agetty   ttyS0   115200"   >>   /etc/inittab

3). 添加到/etc/securetty

#   echo   "ttyS0"   >>   /etc/securetty

4). 重启GuestOS

六. 添加网卡

线上服务器是双网卡,一个走内网,一个走外网,我们也需要虚拟机这么来工作,但是初始安装虚拟机的时候没有指定两个网卡,这样需要我们来添加一个网卡了,比如说我们已经将br1桥接到em2了,如果不会见刚开始br0桥接em1

1). 通过virt-manager来添加

简单说一下  选中虚拟机 -- Open -- Details – AddHardware 选择网卡模式,mac不要重复,确定即可

2). 通过命令来添加

    Ⅰ.  使用virsh attach-interface命令为虚拟机添加网卡

     # virsh attach-interface centos63-119.23 --type bridge --source br1 --model virtio

    Ⅱ. 导入配置文件并覆盖原来的, 因为attach-interface添加后,只是在虚拟机中生效了,配置文件并没有改变

     # cd /etc/libvirt/qemu 
     # virsh dumpxml centos63-119.23 > centos63-119.23.xml

    Ⅲ. 修改GuestOS中网卡配置文件,为另一个网卡配置IP

     # cd /etc/sysconfig/network-scripts 
     略

    Ⅳ. 重启网卡

七. 硬盘扩容

原来的/opt目录随着使用,空间渐渐满了,这时候我们就需要给/opt的挂载分区扩容了,有两种情况 1. 该分区是lvm格式 2. 不是lvm格式,且不是扩展分区

1). 分区是lvm格式 这种很简单,添加一块磁盘,lvm扩容

virt-manager添加方式和添加网卡一样,不再赘述,下面是使用命令来添加

    Ⅰ. 建立磁盘,并附加到虚拟机中

     # virt-img create -f qcow2 10G.img 10G 
     # virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb

     说明:   
     centos63-119.23    虚拟机的名称 
     /opt/kvm/10G.img   附加的磁盘 
     vdb                添加为哪个磁盘, 也就是在guestos中的名字

    Ⅱ. 导出并覆盖原来的配置文件,和网卡一样,attach后只是在虚拟机中生效

     # virsh dumpxml centos63-119.23 > centos63-119.23.xml

    Ⅲ. 使用lvm在线扩容,详见 http://www.cnblogs.com/cmsd/p/3964118.html

2). 分区不是lvm格式,该分区不是扩展分区, 需要关机离线扩展

    Ⅰ.  新建一个磁盘,大于原来的容量,比如原来是40G,你想对某个分区扩容20G那么

 

     #   qemu-img   create   -f   qcow2   60G.img   60G

 

    Ⅱ. 备份原来的磁盘,以防三长两短

     # cp centos63-119.27.img centos63-119.27.img.bak

    Ⅲ. 查看原来的磁盘决定扩容哪一个分区

     # virt-filesystems --partitions --long -a centos63-119.27.img 
     # virt-df centos63-119.27.img 

    Ⅳ. 扩容GuestOS的sda2

     # virt-resize --expand /dev/sda2 centos63-119.27.img 60G.img 

     说明:  
     /dev/sda2                     扩容guestos的/dev/sda2 
     centos63- 119 . 27 . img         原来的磁盘文件    
     60G                         第一步建立的更大的磁盘文件

    Ⅴ. 使用新磁盘启动

 

     #   mv   60G.img   centos63-119.27.img 
     #   virsh   start   centos63-119.27

 

    virt-resize其实就是将原来磁盘中的文件复制到新的文件中,讲想要扩大的分区扩大了

 

八. 动态迁移

用过vSphere 或者 xenserver的都知道动态迁移,最大程度上减少宕机时间 , 比如将正在运行在A上的虚拟机不关机迁移到B上,会将原来虚拟机的内存,CPU状态等迁移到新的主机上,动态迁移需要一些条件

1. 该虚拟机使用共享存储,在两台主机上的位置一样 比如 A,B都讲C的 /opt/vms 挂载到了自己的/opt/vms中,A,B对nfs可读可写,虚拟机在共享存储中

2. 目标主机最好与源主机型号一样,或者CPU支持的指令集更多

3. 目标主机CPU,内存充足

4. 能通过root用户ssh连接到目的主机上

5. hostname和ip解析一致, 迁移是通过hostname的,修改/etc/hosts,可以ping通对方的Hostname

下面来迁移试试,假设上述条件都满足, nfs已经挂载,如果nfs不会请google如何建立nfs

1). 使用virt-manager来迁移

简单来说  File – Add Connect -- 填写对方的ip,用户名,密码, 然后右击虚拟机,Migrate

注. 由于原来的22没有建在共享存储上,新建了一个29的虚拟机来完成迁移的,切记 hostname要和ip对应, 虚拟机存储是共享存储

 

2). 通过命令来动态迁移

     #   virsh   migrate   centos63-119.27   --live   qemu+ssh://192.168.119.11:9741/system  – unsafe 

     说明 : 
     centos63- 119 . 27       迁移的实例名称
    
     --live            动态迁移
     qemu+ssh          ssh的方式

     --unsafe          强制迁移,即使可能出现问题         

先写到这里吧,一些基本的用得到的都写了一下, 感谢您有耐心看到这里, 写个博客确实不容易, 亲随手给个赞, 希望能帮的到您, 有问题可以给我留言或者发邮件给我  ibuler@qq.com,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值