热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在CentOS6系统上搭建Xen虚拟机环境

众所周知,在centos6中,官方源已经去除了xen的rpm包,只能使用第三方源或自行编译,因为编译安装对于我这种菜鸟来说实在太过于繁琐,所以我选择来自Steve的这个第三方源来部署。如果这篇日志算是一篇教程的话,这是一篇偏实际操作的教程,至于理论教程

众所周知,在centos 6中,官方源已经去除了xen的rpm包,只能使用第三方源或自行编译,因为编译安装对于我这种菜鸟来说实在太过于繁琐,
所以我选择来自 Steve 的这个第三方源来部署。

如果这篇日志算是一篇教程的话,这是一篇偏实际操作的教程,至于理论教程,大家可以自行搜索学习,融会贯通。

1. 准备工作

首先检查SELinux是否已经禁用。

vi /etc/sysconfig/selinux




SELINUX=disabled
SELINUXTYPE=targeted

修改完毕保存之后,使用 reboot 命令重启服务器。

2. 创建一个网桥

给服务器创建一个网桥,如此一来,此服务器上的所有虚拟服务器就可以像物理系统进入。要创建网桥,我们需要安装 bridge-utils。

yum install bridge-utils

安装完成之后,我们开始配置网桥,创建一个 /etc/sysconfig/network-scripts/ifcfg-br0,并从 /etc/sysconfig/network-scripts/ifcfg-eth0中将
IPADDR, PREFIX, GATEWAY, DNS1和DNS2这些参数复制过来,并确保你使用的是 TYPE=Bridge 而不是TYPE=Ethernet:

首先创建ifcfg-br0:

vi /etc/sysconfig/network-scripts/ifcfg-br0



DEVICE="br0"
NM_COnTROLLED="yes"
OnBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=192.168.0.88
PREFIX=16
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System br0"

然后修改ifcfg-eth0,并注释掉 BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1, and DNS2,添加 BRIDGE=br0。

vi /etc/sysconfig/network-scripts/ifcfg-eth0



DEVICE="eth0"
NM_COnTROLLED="yes"
OnBOOT=yes
HWADDR=00:1E:90:F3:F1:07
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
BRIDGE=br0

保存之后,重启网络。

/etc/init.d/network restart

执行 ifconfig,查看当前网络情况:



[root@dearroy ~]
br0       Link encap:Ethernet  HWaddr 00:1E:90:F3:F1:07
          inet addr:192.168.0.88  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1196 (1.1 KiB)  TX bytes:2794 (2.7 KiB)
eth0      Link encap:Ethernet  HWaddr 00:1E:90:F3:F1:07
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4554 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3020 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6249612 (5.9 MiB)  TX bytes:254928 (248.9 KiB)
          Interrupt:25 Base address:0x6000
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1304 (1.2 KiB)  TX bytes:1304 (1.2 KiB)
[root@dearroy ~]

3. 安装Xen

首先要检测你的CPU是否支持HVM虚拟化(硬件虚拟化),使用如下命令:

egrep ‘(vmx|svm)’ —color=always /proc/cpuinfo

输出结果中如果有如下显示,则说明你的CPU支持HVM虚拟化,如果什么都没有显示,则说明你的CPU支持paravirtualization虚拟化,即PV虚拟化,而不是HVM虚拟化。




flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dts tpr_shadow vnmi flexpriority
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dts tpr_shadow vnmi flexpriority

开头已经说过,因为CentOS 6 是基于 RedHat 6,官方源已经去除了xen的rpm包,所以这里我们使用一个第三方的源。

yum install http://au1.mirror.crc.id.au/repo/el6/x86_64/kernel-xen-release-6-5.noarch.rpm

然后我们安装Xen,

yum install kernel-xen xen

这样之后,Xen以及Xen内核就已经安装到我们的服务器上了。在我们重启系统进入Xen内核之前,我们需要检查一下GRUB bootloader的启动引导配置,

vi /boot/grub/menu.lst

可以看到第一个内核应该就是刚刚安装的Xen内核:



[...]
title CentOS (2.6.32.54-1.el6xen.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFOnT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM
        initrd /initramfs-2.6.32.54-1.el6xen.x86_64.img
[...]

我们需要注意的是,Xen管理必须最先被加载。在 kernel /vmlinuz... 这一行,将第一个单词由kernel替换为module,下一行也一样操作
——将 initrd /initramfs... 修改为 module /initramfs...。

然后在以上提到的两行之前添加一行:

kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1
dom0_vcpus_pin

添加之后,你的这一部分应该是如下这样:



[...]
title CentOS (2.6.32.54-1.el6xen.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin
        module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFOnT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM
        module /initramfs-2.6.32.54-1.el6xen.x86_64.img
[...]

最后,检查一下 default 的值,如果不是0,修改为0,以确保第一个内核(也就是Xen内核)可以默认载入。

一份完整的 /boot/grub/menu.lst 如下:



default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32.54-1.el6xen.x86_64)
        root (hd0,0)
        kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin
        module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFOnT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM
        module /initramfs-2.6.32.54-1.el6xen.x86_64.img
title CentOS (2.6.32-220.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFOnT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM
        initrd /initramfs-2.6.32-220.el6.x86_64.img

最后,重启系统,准备进入xen内核。

4. 进入Xen内核

系统重启之后,不出意外服务器就已经是Xen内核了。




[root@gentlexen1 ~]
Linux gentlexen.paulvps.com 3.8.6-1.el6xen.x86_64

查看xm info:



[root@gentlexen1 ~]
host                   : gentlexen1.paulvps.com
release                : 3.8.6-1.el6xen.x86_64
version                :
machine                : x86_64
nr_cpus                : 8
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 2
cpu_mhz                : 3392
hw_caps                : bfebfbff:28100800:00000000:00007f40:77bae3ff:00000000:00000001:00000281
virt_caps              : hvm hvm_directio
total_memory           : 32662
free_memory            : 9697
free_cpus              : 0
xen_major              : 4
xen_minor              : 2
xen_extra              : .1
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          : unavailable
xen_commandline        : dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin
cc_compiler            : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
cc_compile_by          : mockbuild
cc_compile_domain      : crc.id.au
cc_compile_date        : Sat Apr  6 12:57:25 EST 2013
xend_config_format     : 4

到此,在CentOS 6上安装Xen的工作就已经完成了。接下来我还会写一篇如何安装api管理工具、编译安装libvirt以及安装xen guest的日志。

如果大家有什么疑问,可以在此页留言和我一起探讨。


推荐阅读
author-avatar
呼噜垃圾桶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有