zoukankan      html  css  js  c++  java
  • 虚拟化技术xen的简介和安装

    虚拟化技术的分类:

    1,模拟:Emulation

    ​ Qemu,PearPC,Bochs

    2,完全虚拟化:Full Virtualization,Native Virtualization

    ​ HVM:hardware virtualization machine

    ​ vmware workstation,virtualBox,Parallels desktop(mac),KVM,xen

    3,半虚拟化:pava-virtualization

    ​ 必须修改guestOS的内核,让它知道自己不是允许在物理机器删上,而是允许在虚拟环境中。

    ​ 使用hypercall调用物理机的cpu

    ​ xen,UML(user-mode Linux)

    4,容器虚拟化

    ​ docker,openvz,LXC(linux container),libcontainer,virtuozzo,linux V Server

    5,库级别虚拟化

    ​ wine

    xen

    剑桥大学开发的开源vmm(virtual machine monitor),虚拟机监视器。

    xen是安装在物理机器上的。

    xen只控制物理机器的cpu和内存,I/O控制,交给了在它上面安装的第一个虚拟内核(叫dom0)。处理dom0的虚拟机叫:domU,在domU上的I/O操作,都是直接发给dom0,dom0再去操作硬件控制器。domU上的I/O接口叫frontend,dom0上的I/O叫backend。

    组成部分:

    • xen hypervisor

      分配cpu,memory,interrupt

    • dom0:

      特权域,I/O分配

      • 网络设备

        net-front(guestOS),net-backend(dom0)

      • 块设备

        block-front(guestOS),block-backend(dom0)

      linux kernel:

      ​ 2.6.37开始支持允许dom0

      ​ 3.0对关键特性进行了优化

      提供管理domu的工具:

      ​ 实现对虚拟机的添加,启动,快照,停止,删除等类似在,virtualBox上的操作。

    • domU:非特权域,根据虚拟化方式,有多种类型

      • PV:半虚拟化

      • HVM:硬件提供虚拟化支持,有的cpu提供虚拟化支持

      • PV ON HVM

    xen的PV技术

    不依赖于CPU的HVM特性,但要求guestOS的内核要做出修改,以达到知晓自己不是允许在物理机上。

    运行于domu上的os:linux(2.6.24+),Netbsd,Freebsd,openSolaris

    xen的HVM技术

    依赖于Intel VT或AMD的AMD-V,还有依赖Qemu来模拟I/O设备

    运行于domu上的os:几乎所有支持x86平台的

    PV on HVM

    cpu为HVM模式运行,I/O设备为PV模式运行。

    运行于domu上的os:只要OS能驱动PV接口类型的IO设备(net-front,block-front)

    xen的pv架构

    xen的工具栈

    • xm/xend:在xen hypervisor的dom0中要启动xend服务。是最早的控制台,好像已经被弃用了。
    • xl:不需要启动xend服务。是轻量级的

    下图是xm和xl的对比:

    • xe/xapi:提供了多xen管理的api,因此多用于cloud环境。

      上面的cloud环境:

      • xen server(也是linux内核)
      • XCP(xen cloud platform)
    • xenstore:为各个domainU提供的共享信息存储空间,有层级结构的名称空间,位于Dom0

    统一的虚拟化管理工具

    背景:虚拟化技术有xen,kvm,qemu等,每个虚拟化铲平都有自己的管理工具,学习这么多的管理工具太费劲了,所有就出现了一个救世主,virsh。它可以管理下面的3个虚拟化产品,只用一套命令即可。

    virsh/libvirt:用python开发的图像化管理工具,类似VMware的图形界面,对应用户很友好。但是它必须启动libvirtd守护进程,也挺消耗资源。

    RHCL对Xen的支持:

    • RHCL 5.7:默认的虚拟化技术是xen

    • RHCL 6+:仅支持kvm(红帽收购了以色列的kvm公司)

      Dom0上无法安装centos6+

      DomU上可以安装centos6+

    如何在centos6+上安装xen?

    1,编译3.0以上版本的内核,启动对Dom0的支持

    2,编译xen程序

    可以使用制作好的程序包项目:

    • xen4centos:xen官方专门为centos制作的rpm包
    • xen made easy

    在Centos6.10上安装xen

    1,去清华的yum源上找到xen的rpm下载网址,自己做一个repo文件(文件名为xen4.repo),指向那个地址即可

    xen4.repo内容:注意url不要写错。

    [xen4centos]
    name=xen4 for centos 6
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/6.10/virt/x86_64/xen-410/
    gpgcheck=0
    

    2,yum install xen

    由于要更新内核,所以有点慢。成功后,/boot目录下多了下面的文件。

    # ls /boot/xen*
    /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.config  /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.gz  /boot/xen.gz
    

    3,修改/etc/grub.conf文件

    修改前:

    kernel /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=
    en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh
    gb quiet
    initrd /initramfs-4.9.206-36.el6.x86_64.img
    

    修改后:

    kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin
    module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=
    en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh
    gb quiet
    module /initramfs-4.9.206-36.el6.x86_64.img
    

    修改内容:

    • 加了一行:kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin

      宣告说kernel已经不是centos了,而是我xen了,原来的kernel降级成module了。
      xen的命令行参数说明的官方文档

    • 把原来的2行,其中的第一行的kernel替换成module;第二行的initrd替换成module。

    修改后的/etc/grub.conf文件

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # 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/mapper/vg_c610-lv_root
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (4.9.206-36.el6.x86_64)
            root (hd0,0)
            kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin
            module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=
    en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh
    gb quiet
            module /initramfs-4.9.206-36.el6.x86_64.img
    title CentOS 6 (2.6.32-754.el6.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=
    en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh
    gb quiet
            initrd /initramfs-2.6.32-754.el6.x86_64.img
    
    

    4,重启系统

    5,确认结果

    # uname -r
    4.9.206-36.el6.x86_64
    # xl list
    Name                                        ID   Mem VCPUs      State   Time(s)
    Domain-0                                     0  1024     2     r-----      28.2
    

    发现内核升级了,并且在dom0上安装了centos,分配的内存是1024M,分配的cpu是2个。

    正确的做法是在物理机器上安装xen,然后在xen上安装dom0和其他domu。

    • 安装xen之前的的学习环境是:物理机器上装的是window,在window上装的virtualbox,在virtualBox上装的是centos6(内核是2.6.32-754.el6.x86_64)。
    • 安装xen之后的的学习环境是:物理机器上装的是window,在window上装的virtualbox,在virtualBox上装的是xen,在xen上装的dom0,dom0里的系统是centos6(内核是4.9.206-36.el6.x86_64)。
    # c/c++ 学习互助QQ群:877684253 ![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg) # 本人微信:xiaoshitou5854
  • 相关阅读:
    mysql的数据结构
    mysql 如何在虚拟机中创建多个实例并启动
    mysql的查询语句原理
    mysql 之如何修复删除用户表
    docker之卷管理 与 卷挂载
    mysql的高可用
    python全栈脱产第35天------IPC机制、生产者消费者模型、线程、
    python全栈脱产第33天------基于udp协议的套接字、socketserver模块的使用、进程理论
    python全栈脱产第34天------开启进程的两种方式、join方法、进程对象其他相关的属性和方法、僵尸进程、孤儿进程、守护进程、互斥锁
    python全栈脱产第32天------基于tcp协议通信的套接字、模拟ssh实现远程执行命令、粘包问题
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/12247551.html
Copyright © 2011-2022 走看看