一、近日接到CTO分下来任务,研发部经常使用一批机器来业务测试,准备几台性能好服务器放在IDC房做Linux虚拟化来接入使用。我第一时间想到就是用xen,以前看过这方面资料,但没运用在生产环境上,先从xen实施起,以后在利用openstack打造内部私有云。

 

二、以下回忆xen原理,具体原理,网上有很多资料查询的到

  虚拟化技术的分类:

     模拟:著名的模拟器,PearPC, Bochs, QEMU
     完全虚拟化:也称为native virtulization
                  两种加速方式:
                       BT
                           HVM
       VMware Workstation, VMware Server, Parallels Desktop, KVM, Xen(HVM)
 

    半虚拟化:para-virtualization
      xen, uml(user-mode linux)
 

    OS级别的虚拟化:
          OpenVZ, lxc
          Solaris Containers
          FreeBSD jails
 

    库虚拟化:
          wine

   应用程序虚拟化:
          jvm

 

    虚拟化网络:
         nat mode
         bridge mode
         routed mode
         isolation mode

 

 

Xen的工作模式:
     pv: 半虚拟化
     fv: 依赖于CPU的HVM
     pv on hvm: CPU完全虚拟化,但IO采用半虚拟化;

 

xen的使用方式:
     xen hypervisor
              硬件 --> 安装Linux --> 安装xen --> 修改grub,配置其内核为xen,而不再使用原Linux的内核(原Linux的内核和initramfs文件被当作xen的模块)--> 重新编译Linux内核,使得其能够运行于Dom0 --> 重启系统;
 

     DomU: 在Dom0使用工具创建虚拟机-->启动虚拟机-->安装操作系统;
 

     xenserver:
              citrix:
 

        xcp: xen cloud platform

 

        工具栈:xm/xend, xl, xapi/xe
              libvirt: virsh/libvirtd, virtmanager


 基本组件

 Xen包含三大部分:

Hypervisor:直接运行于硬件之上,是Xen客户操作系统与硬件资源之间的访问接口。通过将客户操作系统与硬件进行分类,Xen管理系统可以允许客户操作系统安全,独立的运行在相同硬件环境之上。

Domain 0:运行在Xen管理程序之上,具有直接访问硬件和管理其他客户操作系统的特权的客户操作系统。

DomainU:运行在Xen管理程序之上的普通客户操作系统或业务操作系统,不能直接访问硬件资源(如:内存,硬盘等),但可以独立并行的存在多个。

 

二、操作系统

拿公司一台装有linux系统的物理来测试

[root@logicserver ~]# cat /etc/issue;uname -r
CentOS release 6.3 (Final)
Kernel \r on an \m
2.6.32-279.el6.x86_64

 

三、部署安装

[root@logicserver ~]# yum install centos-release-xen
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                                                                                      | 4.8 kB     00:00     
 * base: mirrors.pubyun.com
 * epel: ftp.cuhk.edu.hk
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
epel                                                                                                                                                                               | 4.3 kB     00:00     
epel/primary_db                                                                                                                                                                    | 5.7 MB     00:13     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package centos-release-xen.x86_64 10:6-4.el6.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================================================================================================================
 Package                                                Arch                                       Version                                               Repository                                  Size
==========================================================================================================================================================================================================
Installing:
 centos-release-xen                                     x86_64                                     10:6-4.el6.centos                                     extras                                     4.9 k
Transaction Summary
==========================================================================================================================================================================================================
Install       1 Package(s)
Total download size: 4.9 k
Installed size: 1.3 k
Is this ok [y/N]: y
Downloading Packages:
centos-release-xen-6-4.el6.centos.x86_64.rpm                                                                                                                                       | 4.9 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 10:centos-release-xen-6-4.el6.centos.x86_64                                                                                                                                            1/1 
  Verifying  : 10:centos-release-xen-6-4.el6.centos.x86_64                                                                                                                                            1/1
Installed:
  centos-release-xen.x86_64 10:6-4.el6.centos                                                                                                                                                            
Complete!
[root@logicserver ~]# yum list xen*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.skyshe.cn
 * epel: ftp.cuhk.edu.hk
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
Xen4CentOS                                                                                                                                                                         | 3.4 kB     00:00     
Xen4CentOS/primary_db                                                                                                                                                              | 150 kB     00:00     
Available Packages
xen.x86_64                                                                                            4.4.2-7.el6                                                                               Xen4CentOS
xen-debuginfo.x86_64                                                                                  4.1.2-20.el6                                                                              el6-xen   
xen-devel.x86_64                                                                                      4.4.2-7.el6                                                                               Xen4CentOS
xen-doc.x86_64                                                                                        4.4.2-7.el6                                                                               Xen4CentOS
xen-hypervisor.x86_64                                                                                 4.4.2-7.el6                                                                               Xen4CentOS
xen-libs.x86_64                                                                                       4.4.2-7.el6                                                                               Xen4CentOS
xen-licenses.x86_64                                                                                   4.4.2-7.el6                                                                               Xen4CentOS
xen-ocaml.x86_64                                                                                      4.4.2-7.el6                                                                               Xen4CentOS
xen-ocaml-devel.x86_64                                                                                4.4.2-7.el6                                                                               Xen4CentOS
xen-runtime.x86_64                                                                                    4.4.2-7.el6                                                                               Xen4CentOS
xenserverjava.noarch                                                                                  5.6.100.1-1.el6                                                                           epel      
xenserverjava-javadoc.noarch                                                                          5.6.100.1-1.el6                                                                           epel
[root@logicserver ~]# ll /boot/xen*
-rw-r--r--. 1 root root   855600 8月   3 20:18 /boot/xen-4.4.2-7.el6.gz
lrwxrwxrwx. 1 root root       18 9月   8 13:20 /boot/xen-4.4.gz -> xen-4.4.2-7.el6.gz
lrwxrwxrwx. 1 root root       18 9月   8 13:20 /boot/xen.gz -> xen-4.4.2-7.el6.gz
-rw-r--r--. 1 root root 15925635 8月   3 20:18 /boot/xen-syms-4.4.2-7.el6

 

 安装完支持 Xen 的 Linux 内核后需要加新条目到 grub.conf,以便系统能默认启动带 Xen 的 Linux 内核(而不是常规 Linux 内核),这个操作可以通过 grub-bootxen.sh 自动完成,弄完后打开 grub.conf 文件再次确认一下:

root@logicserver ~]# vim /etc/grub.conf
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.18.17-13.el6.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
        module /vmlinuz-3.18.17-13.el6.x86_64 ro root=UUID=17793804-41a2-4cec-b58d-ffec3766aaf3 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
        module /initramfs-3.18.17-13.el6.x86_64.img
title CentOS (2.6.32-279.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=17793804-41a2-4cec-b58d-ffec3766aaf3 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-279.el6.x86_64.img

 

重启机器reboot

[root@logicserver ~]# service xend start
启动 xend 守护进程:                                       [确定] 

[root@logicserver ~]# xm info
WARNING: xend/xm is deprecated.
host                   : logicserver
release                : 3.18.17-13.el6.x86_64
version                : #1 SMP Tue Jul 21 17:17:17 UTC 2015
machine                : x86_64
nr_cpus                : 2
nr_nodes               : 1
cores_per_socket       : 2
threads_per_core       : 1
cpu_mhz                : 2993
hw_caps                : bfebfbff:28100800:00000000:00007f00:059ae3bf:00000000:00000001:00000281
virt_caps              : hvm
total_memory           : 8068
free_memory            : 6951
free_cpus              : 0
xen_major              : 4
xen_minor              : 4
xen_extra              : .2-7.el6
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : Thu Apr 23 15:06:13 2015 +0100 git:8621d99-dirty
xen_commandline        : dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
cc_compiler            : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
cc_compile_by          : mockbuild
cc_compile_domain      : centos.org
cc_compile_date        : Mon Aug  3 12:17:58 UTC 2015
xend_config_format     : 4
[root@logicserver ~]# xm list
WARNING: xend/xm is deprecated.
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1021     2     r-----     94.7


另外xl不需要xend服务的,所以在使用它前,需要把xend服务停掉

[root@logicserver ~]# service xend stop
正在关闭 xend 守护进程:                                   [确定] 

[root@logicserver ~]# xl info
host                   : logicserver
release                : 3.18.17-13.el6.x86_64
version                : #1 SMP Tue Jul 21 17:17:17 UTC 2015
machine                : x86_64
nr_cpus                : 2
max_cpu_id             : 1
nr_nodes               : 1
cores_per_socket       : 2
threads_per_core       : 1
cpu_mhz                : 2993
hw_caps                : bfebfbff:28100800:00000000:00007f00:059ae3bf:00000000:00000001:00000281
virt_caps              : hvm
total_memory           : 8068
free_memory            : 6951
sharing_freed_memory   : 0
sharing_used_memory    : 0
outstanding_claims     : 0
free_cpus              : 0
xen_major              : 4
xen_minor              : 4
xen_extra              : .2-7.el6
xen_version            : 4.4.2-7.el6
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : Thu Apr 23 15:06:13 2015 +0100 git:8621d99-dirty
xen_commandline        : dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
cc_compiler            : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
cc_compile_by          : mockbuild
cc_compile_domain      : centos.org
cc_compile_date        : Mon Aug  3 12:17:58 UTC 2015
xend_config_format     : 4


[root@logicserver ~]# xl list
Name                                        ID   Mem VCPUs State Time(s)
Domain-0                                     0  1021     2     r-----     106.8