xen实现虚拟化(一)-阿里云开发者社区

开发者社区> 技术小胖子> 正文

xen实现虚拟化(一)

简介:
+关注继续查看

一、Xen简介


    Xen采用ICA协议,通过一种叫做准虚拟化的技术获得高性能,甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有上佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在Inter VT-X支持下3.0版本之前的Xen需要系统的来宾权限,用来和Xen API进行连接。到目前为止,这种技术已经可以运用在NetBSD,GUN/Linux,FreeBSD和Plan 9系统上。Sun微系统公司也在积极的将Solaris移植到Xen平台之上。


    Xen虚拟机可以在不停止的情况在多个物理主机之间实时迁移。在操作过程中,无你几在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的的开始执行之前,会有一次60-300毫秒的非常断在的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。

    Xen 是一个基于X86架构、发展最快、性能最稳定、占用资源最少的开源虚拟化技术。Xen可以在一套物理硬件上安全的执行多个虚拟机,与Linux是一个完美的开源组合,SUSE 最先采用了XEN虚拟机技术。它特别适用于服务器应用整合,可有效节省运营成本,提高设备利用率,最大化利用数据中心的IT基础架构。


     Xen是英国剑桥大学计算机实验室开发的一个虚拟化开源项目,XEN 可以在一套物理硬件上安全的执行多个虚拟机,它和操作平台结合的极为密切,占用的资源最少。编写文档时稳定版本为XEN3.0.支持万贯虚拟化和超虚拟化。以高性能、占用资源少著称,赢得了IBM、AMD、HP、Red Hat和Novell等众多世界级硬件厂商的高度认可和大力支持,已被国内外众多企事业单位用于来搭建高性能的虚拟化平台。

    Xen 开源的虚拟监视器(VMM),属于Type-I类型,即半虚拟化类型,xen代码直接运行在硬件平台上,在单个物理节点上能支持多达128个虚拟机 


二、半虚拟化架构的xen


     Xen通过一种叫做半虚拟化的技术获得高效的表现(较少的效能损失,典型的情况下大约损失2%,在最早的情况下会有8%的效能耗损,与其它使用完全的虚拟化却造成最高到20%损耗的其他解决方案形成一个明显的对比),设置在某些与传统虚拟化技术极度不友好的的架构(x86),Xen也有极佳的表现。


     半虚拟化架构图

wKioL1OAtiLgPt-YAABhov28nBY651.jpg


1
2
3
4
5
6
7
8
9
10
11
 组成组件:①xen只能虚拟化CPU,虚拟化Memory,虚拟化MMU ------装在物理设备之上
               ②Dom0 ,特权域,安装上xen的时候第一个安装的虚拟机;拥有一切能够访问底层硬件的接口   
               ③DomU ,用户域,没有特权 ,
                
    
                     
     xen环境中用域来定义每一个虚拟机,每一个域一个ID 
       Dom0(特权与)
         运行在 hypervesior 之上的一个特殊虚拟机,其内核为特殊修改过的linux内核,能够访问IO资源,却无法访问CPU;
       DomU(非特权域)
         DomU中的虚拟机针对CPU、Memory、请求中断等都直接经过 xen hypervisor,而针对IO设备的使用则需要经过Dom0

 

详细细节参考下图


wKiom1OAukCAgXHNAAJ2hJIn0tM056.jpg


三、Xen的使用方法


   1、xen hypervisor的实现 

   硬件之上---->安装linux---->安装xen----->修改grub配置文件,配置其内核为xen,而不再需要使用原linux的内核(linux内核和initramfs文件被当作xen模块)使其能够运行于Dom0上-->重新重启系统


   2、DomU上虚拟机的安装实现

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

  

   3、工具栈

     xm/xend   xl  

     红帽研发的libvirt:virtsh/libvirtd 、virt-manager、virt-install 


四、创建Xen PV模式虚拟机的前提


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在PV模式中运行guest系统,需要满足几个基本前提。
 1、 能运行于Xen DomU的(Xen-enabled)内核:Liunx 2.6.24及以后的内核已经添加了对Xen DomU的支持,因此,只要在内核编译时启用了相应的功能就能满足此要求,目前多数Linux发行版的内核都已经支持此特性;而此前的版本需要内核在编译前手动打补丁方可;
 2、根文件系统(Root Filesystem):包含了应用程序、系统组件及配置文件等运行DomU的各种所需要文件的文件系统,其不用非得包含内核及对应的ramdisk,后面的这些组件放在Dom0中即可;事实上,用于DomU的内核文件必须要能够允许Dom0访问到,因为其运行时需要与Xen Hypervisor通信,因此,这些内核组件可以位于Dom0能够访问到的任何文件系统上;然而,目前基于pygrub(可用于Dom0跟非特权域磁盘映像中的内核通信),此内核文件也可以直接放置于非特权域的磁盘映像中;
 3、DomU内核所需要的内核模块:内核模块是内核的重要组成部分,它们一般存储于根文件系统;
  ramdisk或者ramfs:这个根据实际需要是个可选组件,如果在内核初始化过程中不需要依赖于此来装载额外的驱动程序以访问根文件系统则也可以不用提供;
  swap设备:交换分区能够让Linux运行比仅有物理内存时更多的进程,因此,提供此组件是常见的做法;当然,它是可选的;
 4、DomU配置文件:集中在一起指定前述各组件的配置信息,以及定义其它有关PV DomU的基本属性的文件;其通常包含所有用于当前DomU属性配置参数,包括为其指定磁盘映像和内核文件的位置(或pygrub的位置)等,以及其它许多属性如当前DomU可以访问的设备等,这些设备包括网络设备、硬盘、显卡及其它PCI设备;同时,配置文件中也可以指定新创建的非特权域可以使用的物理内存大小及虚拟CPU个数等等;
   
这里需要提醒的是,如果计划为PV DomU编译内核,需要以与传统方式不同的方式放置内核及其模块。前面也已经提到,内核一般会放在Dom0的某路径下,而内核模块则需要放在DomU的根文件系统上。
   
PV DomU的根文件系统可以以多种不同的方式进行安置,比如:
   虚拟磁盘映像文件
   Dom0没有使用的额外物理磁盘分区
   Dom0没有使用的逻辑卷
   块级别网络文件系统,如iSCSI设备
   网络文件系统,如NFS


五、DomU虚拟机实例配置文件


   配置文件存放目录/etc/xen/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
kernel:为当前域指定可用于DomU的内核文件;
ramdisk:与kernel指定的内核文件匹配使用的ramdisk映像文件,根据需要指定,此为可选项;
name:当前域的独有名称;每个域必须使用全局惟一的名称,否则将产生错误;
memory:当前域的可用物理内存空间大小,单位为MB,默认为128;
disk:当前域的所有可用磁盘设备列表,格式为disk = [ “disk1”, “disk2”, …],每个disk都有三个参数进行定义
      格式     为“backend-dev,front-dev,mode”;
      backend-dev主要有两种类型,物理设备或虚拟磁盘映像文件,它们的格式分别为“phy:device”和“file:/path/to/file”;
      frontend-dev定义其在DomU中的设备类型,一般为xvd[a-z];mode则用于定义其访问权限,r为只读,w为读写;
                               
vcpus:配置给当前域使用的虚拟CPU的个数;默认为1;
root:为当前域指定其根文件系统所在的设备,这个将作为内核参数在内核启动传递给内核;
extra:传递给内核的额外参数,其中selinux=0表示禁用selinux,init则用于指定init程序的路径;多个参数之间使用空格隔开;
on_reboot:执行xm reboot命令或在当前域内部执行重启操作时由Xen执行的动作;其常用的值为destroy和restart;
on_crash:当前域由于各种原因崩溃时由Xen执行的动作;其常用的值为destro、restart和preservey,preserve可以保存系统崩溃前的状态信息以用于调试;
                       
on_shutdown:执行xm shutdown命令或在当前域内部执行关机操作时由Xen执行的动作; 
vif : vif = ['ip="172.16.100.11",bridge=br0']
       type : 设备类型,默认为netfront 
        mac : 指定mac地址
      bridge: 指定桥接到的物理设备
        ip : ip地址;
    script : 配置此接口的脚本文件
   vifname : 后端设备名称 
bootloader : 引导器文件的路径,一般指得PyGrub的路径;一般在Dom0的某个目录上


六、Xen虚拟机状态


  r:running,当前跑在哪个CPU上

  b:阻塞

  p:暂停

  s:停止

  c:崩溃

  d:dyiing,正在关闭的过程中


七、配置虚拟机实例


   我们使用Centos6.5-x86_64版本的linux系统

   下载xen安装包存放于/root目录下


1
2
3
4
5
6
7
8
9
10
    kernel-xen-release-6-4.noarch.rpm   
    kernel-xen-3.7.4-1.el6xen.x86_64.rpm
    kernel-xen-devel-3.7.4-1.el6xen.x86_64.rpm   
    kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm
    kernel-xen-headers-3.7.4-1.el6xen.x86_64.rpm           
    xen-4.1.3-2.el6.x86_64.rpm             
    xen-licenses-4.1.3-2.el6.x86_64.rpm
    xen-runtime-4.1.3-2.el6.x86_64.rpm
    xen-libs-4.1.3-2.el6.x86_64.rpm 
    xen-hypervisor-4.1.3-2.el6.x86_64.rpm


1、安装xen


1
 # yum  -y install *.rpm


2、编辑grub引导文件


1
#vim /etc/grub.conf


1
2
3
4
5
6
7
8
9
 default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (3.7.4-1.el6xen.x86_64)
        kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
        root (hd0,0)
        module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=UUID=4516b2fb-0553-4f53-88bc-19c53031a4be 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.7.4-1.el6xen.x86_64.img


3、重启系统,默认进入xen内核


1
# shutdown -r now


wKiom1OAwPnzpop8AAD90dMo60Y784.jpg

登录 

1
#uname -r


3.7.4-1.el6xen.x86_64 


4、创建虚拟机实例


1
2
3
4
5
6
7
8
9
10
# cd  /etc/xen
 # vim centos6
   kernel="/root/vmlinuz"
   ramdisk="/root/initrd.img"
   name="centos6"
   vcpus=2
   memory=512   
   disk=['file:/xen/vm1/centos6.qcow2,xvda,w']
   vif=['bridge=br0']
   on_reboot="destroy"


5、提供kernel和initrd.img文件存放于/root目录下


1
2
3
4
5
6
  # cd  /root
   kernel和initrd.img可以从光盘镜像文件中获取
     
 # mount /dev/cdrom /mnt 
 # cd /mnt
 # cp kernel initrd.img /root


6、创建稀疏格式的虚拟磁盘镜像文件,使用qemu-img 


1
2
 # mkdir -pv /xen/vm1
 # qemu-img create -f qcow2 -o size=120G,preallocation=metadata /xen/vm1/centos6.qcow2


7、创建桥设备br0,将其中的eth0接口桥到br0上


1
2
3
4
5
6
7
 # brctl addbr br0
 # ifconfig eth0 0 up 
 # brctl addif  br0 eth0
 # ifconfig br0 172.16.13.3/16 up 
 # route add default gw 172.16.0.1 
 # brctl stp br0 on 
 # brctl show


wKioL1OAwoHiiprRAABC6w1aVZY633.jpg



8、创建虚拟机



1
2
3
4
5
6
7
8
  # cd  /etc/xen
 # xm create centos6
 # xm list 
  Name                           ID    Mem   VCPUs       State    Time(s)
  Domain-0                        0    1014     2        r-----     53.0
  centos6                         1    2048     2        -b----     10.6  
    
 # xm destroy centos6  关闭域名为centos6的虚拟机电源


9、虚拟机安装操作系统


1
2
# cd /etc/xen
# xm  create -c centos6


wKioL1OAxO-CNn1mAADsZJy-6r0866.jpg


wKiom1OAxT3B_BL_AADMrSHXnsE442.jpg


wKioL1OAxSLQkwykAAEPvP96N0c978.jpg


wKioL1OAxTzS_L8FAAGcec9q5AI474.jpg


wKioL1OAxVTg4KmtAACeDFiKOd8080.jpg


 等待系统安装完成并重启,注意此处的重启为关闭虚拟机,因为我们在虚拟机实例配置文件

 中使用了on_reboot="destroy" ,一旦重启就关闭电源


10、再次修改虚拟机实例文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
 # cd /etc/xen
 # vim centos6 
     # kernel="/root/vmlinuz"   注释这一行
     # ramdisk="/root/initrd.img"  注释这一行
       bootloader="/usr/bin/pygrub" 添加这一行
       name="centos6"
       vcpus=2
       memory=512   
       disk=['file:/xen/vm1/centos6.qcow2,xvda,w']
       vif=['bridge=br0'
       on_reboot="destroy"
         
  重新连入控制台
# create console centos6


wKiom1OAxsWzSpwaAACRtVBuSck134.jpg


登录系统后,查看一些信息


wKiom1OAxzWT73-gAAGso-4838Y845.jpg


至此,使用xen创建一个centos6.5虚拟机实例已经成功实现!




      本文转自灬落魄灬  51CTO博客,原文链接:http://blog.51cto.com/smoke520/1833760,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9914 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26756 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13652 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9127 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4418 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7291 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
22316 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载