Xen实践手册
2011年03月25日
一、Xen的安装
源代码安装:
1、创建一个目录用于保存Xen源代码,并进入该目录。
mkdir ~/xen-source
cd ~/xen-source
2、Xen的源代码被保存在Mercurial版本修订控制库中,所以需要安装可以用于检查源代码的mercurial客户端。可以使用yum来安装mercurial。
yum install mercurial
然后使用mercurial客户端(hg)运行类似下面的命令来检验源代码:
hg clone http://xenbits.xensource.com/xen-3.2-testing.hg
它将会在xen-source目录下面创建一个叫 xen-3.2-testing.hg 的目录并把源代码置于其中,现在我们就已经准备好编译Xen了。
在编译Xen前我们需要检查系统是否已经包含提供编译器、库文件和建立Xen开发环境需要的开发头文件包,下面是必须要安装的包:
gcc
glib-devel
libgomp
glibc-headers
ncurses-devel
openssl-devel
zlib-devel
xorg-X11-proto-devel
python-devel
tetex-latex
xen-devel
如果没有安装这些包,可以用yum安装:
yum install gcc glibc-devel xen-devel libgomp glibc-headers ncurses-devel openssl-devel zlib-devel xorg-X11-proto-devel python-devel tetex-latex
4、我们编译内核前的第一步是先配置它。我们一般使用缺省值,除非你要增加一些驱动或选项的支持,然后退出对话并保存修改。
make linux-2.6-xen0-config
5、编译内核和模块
make linux-2.6-xen0-build
6、上面的命令将会编译并生成大量的文件到dist/install目录
在dist/install下的boot目录包含了用于Xen内核的配置文件、内核镜像文件和内核调试符号文件;
在dist/install下的lib目录下包含了所有的内核模块和驱动;
7、使用root用户运行下面的命令来安装刚才生成的文件,它将安装内核模块并拷贝内核镜像和符号文件到/boot
make linux-2.6-xen0-install
8、运行depmod命令读取/lib/modules/2.6.**.**-xen0(用你所编译的内核版本替换**,下同)下的每个模块来创建一个模块依赖关系列表,并确定哪些符号是它输出的符号和哪些符号是必需的
depmod -a 2.6.**.**-xen0
9、在/boot目录创建启动的时候Xen内核需要用到的initrd文件,在xen-3.2-testing.hg目录下运行:
/sbin/mkinitrd -v -f with=sd_mod with=scsi_mod /boot/initrd-2.6.**.**-xen0.img 2.6.**.**-xen0
编译并安装Xen工具、库文件和Python模块,但是在这样做之前必须确定没有Xen工具的二进制包已经安装
make install KERNELS="linux-2.6-xen0″
10、修改grub文件,增加启动新的Xen内核的入口
11、重启并进入新的Xen系统
12、确定所有的程序正常启动
13、检查网络接口以确定都已经启动并正常运行
到此你已经成功编译和安装开发版的Xen到你的机器上并正常运行了。
用yum安装xen:
相比源代码安装,yum使xen的安装变得轻而易举,步骤如下:
1、运行下面的命令安装xen内核和工具:
yum install kernel-xen xen
这将下载并安装下面的包和它们的关联包:
kernel-xen:包含允许主机和客户机运行xen的内核,类似管理器
xen:包含与管理器交互的用户空间工具
bridge-untils:用于配置连接多个Ethernet设备的网桥
libvirt:提过使用Xen框架的API的C库
libvirt-python:包含一个让Python应用程序使用libvirt提供的xen框架的API的Python模块
python-virtinst:包含一个使用libvirt在虚拟机内部启动安装Fedora/Red Hat Enterprise Linux发布版本的Python模块
xen-libs:包含运行管理xen的应用程序所需的库
2、Xen内核在安装完后不会设置为缺省的启动项,需要修改/boot/grub/grub.conf,改变default=1为default=0
3、用xen内核重启系统
4、系统启动并运行后,检查正在运行的内核的版本以确定是否在运行Xen内核
5、xend-Xen控制daemon管理着域,可以用/etc/rc.d/init.d/xend脚本来启动和停止它,它在系统启动的时候默认是自动启动的。检查并确定xend是否正在运行,可以用下面的命令来搜索系统正在运行的进程的列表:
pidof xend
6、一旦xend运行,它将启动Domain0,这是个私有域。用xm命令检查domain0是否已经被创建并在运行。
xm list
7、检查网络接口是否已经起了,包括通常的网络接口如eth0和lo,分配给Xen的接口。在高于Fedora 7.0的版本中,名叫peth0的网络接口已经更名为eth0
二、Xen客户机的安装
总体流程
1、选择存储介质 文件、分区、LVM等;
2、安装客户机操作系统文件到选择的存储介质,安装这些文件的机制可以是一个自举工具(例如debootstap),一个ISO镜像文件,一个cd-rom,甚至可以是一个包含了所有需要的文件的简单文件系统目录;
3、创建一个指定Xen创建子域时用到的参数的配置文件;
4、使用xm创建子域;
物理地址扩展
物理地址扩展(PAE)是一种为用户模式应用程序增加总体有效的物理或虚拟内存,使服务可以访问4GB以外的物理内存的技术。为达到此目的,PAE修改32位的寻址模式为64的寻址模式,因此操作系统或用户应用程序可以访问额外的物理内存。
如果存在PAE的话那么linux内核和Xen管理器都将受益于它。能有效运行Xen的三张模式:
*纯32位模式
*带PAE的32位模式
*纯64位模式
在使用这些模式的时候有一些重点需要确定的:
*当采用不完全虚拟时Xen管理器、dom0和domU必须运行在同一种模式下,混合使用不同的模式将导致错误;
*当使用完全虚拟或硬件虚拟机(HVM)时上面的限制不会生效。但当前使用HVM需要Intel或AMD芯片支持这功能。
编译一个domU内核
我们使用上面下载的Xen源代码来创建domU内核
1、进入包含源代码的目录
cd ~/xen-source
2、编译domU内核
make linux-2.6-xenU-config
3、选择domU内核需要的选项,如果不确定,可以使用缺省选项,记得在退出时保存选项。
4、创建domU内核然后安装
make linux-2.6-xenU-build
make linux-2.6-xenU-install
5、为domU内核创建initrd
mkinitrd -v -f with=ide-disk with=sd_mod with=ide-generic with=ext3 with=scsi_mod /boot/initrd-2.6.**.**-xenU.img 2.6.**.**-xenU
6、现在我们已经有编译好的domU内核并且已经准备好,我们将使用它启动我们下一章将要创建的虚拟机。
Xen域的内存
在我们当前的配置中,dom0的内核处理所有在系统启动时候激活的内存,然后在domUs需要的时候分配给它们。当我们创建客户域的时候我们需要一种给我 们创建的每个客户域提供内存的方法。Xen提供了一个在启动时侯简单指定dom0内核使用的内存值的参数。在你的基本系统里面修改/boot/grup /memu.lst,添加指定dom0内核可以使用的内存总值的参数。
kernel /xen.gz noreboot dom0_mem=256M
Pygrub
在Xen里通常情况下我们都会在dom0的配置文件中指定内核和initrd,这也就意味着任何时候内核需要修改或改变的时候,你都需要有在dom0主机 上的管理员权限来修改它。Redhat开发了一个类似grub的启动装载器叫Pygrub,它允许domU用户们使用grub一样的用户接口选取他们自己 的内核。Xen在domUs启动前启动Pygrub,控制台用户可以在一个与grub /grub/menu.lst在同一个配置文件中读取的菜单中选取 一个内核启动,一旦用户选择了一个内核和initrd,控制权回到Xen上,Xen启动所选择的domU内核。
Time for Action Bootstrapping an Ubuntu System
1、Ubuntu使用叫做debootstrap的debian工具来创建系统,当前它在Fedora中还未预置。我们将从Ubuntu Feisty下载最新版的debootstrap并安装到我们基于Fedora Core的系统中。由于它是deb格式的包,所以我们需要把它转换为适合安装在Fedora系统的格式。首先获取下面两个从属软件包并安装。
wget http://www.hccfl.edu/pollock/AUnix1/alien/deb-1.10 .27-3.i586.rpm
wget http://www.hccfl.edu/pollock/AUnix1/alien/html2tex t-1.3.2a-3.i586.rpm
rpm ivh -nodeps deb-1.10.27-3.i586.rpm
rpm ivh -nodeps html2text-1.3.2a-3.i586.rpm
2、下载并安装用于把包从一种发布格式转换为另一种的alien。
wget http://www.hccfl.edu/pollock/AUnix1/alien/alien_8. 64.tar.gz
tar -zxvf alien_8.64.tar.gz
perl Makefile.PL
make PREFIX=/usr
make PREFIX=/usr install
3、从Ubuntu下载debootstrap,转换它为rpm格式并安装
wget http://librarian.launchpad.net/6615094http://libra rian.launchpad.net/6615094/debootstrap_0.3.3.2ubunt u3_all.deb
alien to-rpm debootstrap_0.3.3.2ubuntu3_all.deb
rpm -Uvh debootstrap-0.3.3.2-2.noarch.rpm
现在我们已经有了自举一个Ubuntu Feisty系统所需要的所有工具。
(当前debootstrap有源代码的版本,所以可以尝试用源代码编译,也就免去了前面的步骤中deb包到rpm包的转换了)
4、创建一个叫xen-images的目录,我们将把所有的客户镜像创建到这个目录。
mkdir ~/xen-images
你可以在本地文件、NFS系统、LVM组、或iSCSI存储里面创建虚拟机。
5、创建三个文件,一个用于存储根文件系统(/),一个用于/boot,另一个用于swap
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_domU.img bs=1G count=6
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_swap_domU.img bs=1G count=1
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_boot_domU.img bs=1k count=1000
6、在根文件镜像上创建一个ext3的文件系统,这是/被挂载的镜像
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_domU.img
7、在启动文件镜像上创建一个ext3的文件系统并在swap文件上创建swap
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_boot_domU.img
/sbin/mkswap ~/xen-images/ubuntu_feisty_swap_domU.img
我们需要挂载这些文件到目录下面以对其进行读写操作
8、创建一个xen-mounts目录,我们将在里面创建挂载其他文件镜像的目录
mkdir -p ~/xen-mounts/ubuntu_feisty_domU
9、使用loop back挂载用于存储根文件系统的文件
mount -o loop ~/xen-images/ubuntu_feisty_domU.img ~/xen-mounts/ubuntu_feisty_domU
10、运行debootstrap。他将下载并解压所有需要的到上面挂载的目录
/usr/sbin/debootstrap arch i386 feisty ~/xen-mounts/ubuntu_feisty_domU http://archive.ubuntu.com/ubuntu
11、我们将使用之前创建的domU内核来启动这个域,所以这个域将需要预编译了该内核需要的内核模块,从/lib/modules目录下面拷贝它们
mkdir -p ~/xen-mounts/ubuntu_feisty_domU/lib/modules
cp -dpR /lib/modules/2.6.**.**-xenU ~/xen-mounts/ubuntu_feisty_domU/lib/modules
12、chroot到新的系统并配置它
chroot ~/xen-mounts/ubuntu_feisty_domU
13、设置系统的主机名
echo "ubuntu_fesity_domU" > /etc/hostname
14、设置启动时候装载的文件
cat > /etc/fstab /etc/network/interfaces ~/xen-images/ubuntu_feisty_domU.cfg /boot/netbsd-INSTALL_XEN3_DOMU
zcat netbsd-XEN3_DOMU.gz > /boot/netbsd-XEN3_DOMU
2、创建一个镜像文件用于存储我们的NetBSD客户域
dd if=/dev/zero of=/home/pchaganti/xen-images/netbsd_domU.img bs=1M count=300
3、创建Xen配置文件用于启动NetBSD domU
cat > /root/xen-images/netbsd_domU.cfg /root/xen-images/centos_domU.cfg web应用服务器,然后挂载rh5.1的dvd镜像,并设置web应用允许用户访问dvd镜像内的文件。
(我们这里假设在192.168.20.9上架设了web服务器,并把http://192.168.20.9/RH5指到dvd镜像挂载的目录)
在运行xen的系统上执行以下命令创建放置镜像的目录:
mkdir -p /data/xen
执行以下命令开始启动一个xen客户机的安装:
virt-install -n rh5 -r 256 -s 4 vcpus=1 -f /data/xen/rh5 nographics -p -d -l "http://192.168.20.9/RH5″
新建立一个基于文件的虚拟机,256M内存,4G硬盘,1个CPU。
基于文件的虚拟机效率相对低下,安装标准的系统(1G左右)用了35分钟左右。
在xen的系统上运行以下命令:
virt-install -n rh5 -r 256 vcpus=1 -f /dev/sda7 nographics -p -d -l "http://192.168.20.9/RH5″
新建立一个基于分区的虚拟机,256M内存,1个CPU。
基于分区的虚拟机效率比文件的高许多,安装标准的系统(1G左右)只用了8分钟左右,选择的分区必须没有被host系统使用,如果该分区已经被mount到系统中,必须先umount该分区后进行安装,否则会报错。
内核文件放在/var/lib/xen目录
上述方法尝试安装rh4u6,rh5u1,rh5u2成功
原文地址 http://www.amazon.com/Xen-Virtualization-Practical -Prabhakar-Chaganti/dp/1847192483
三、Xen管理
* xm
Xen Domain Configuration Files
Xen域配置文件
Xen域的域配置文件指定管理域行为的多个参数。这些不同的配置Xen的文件放在/etc/xen目录下。以key=value格式保存着多个选项的配置 文件是以python写的可执行文件,所以各选项必须是合法的python代码。/etc/xen/xend-config.sxp指定用于创建dom0 的配置文件。
如果你在创建域的时候提供绝对路径的话你可以把创建domUs的配置文件放在任何地方。/etc/xen/auto是一个特殊目录,所有放置在里面的域配置文件对应的域都会在xend监听程序启动的时候被自动启动。
下面是一些在Xen域配置文件中要配置的常用的选项:
* kernel:用于域的内核镜像,提供到内核镜像文件的绝对路径
* ramdisk:指定给域的初始ramdisk。如果你的内核有用于你的根文件系统和硬盘的内置驱动,可能你不需要创建和指定ramdisk。此配置提供到initrd文件位置的完整路径
* memory:指定分配给域的总体内存容量,以MB为单位。如果分配的内存不足将阻止域的启动。你还必须确定Xen管理的总内存 包含dom0和所有的domUs 必须少于或等于安装在你的机器上面的物理内存总量。
* name:提供一个识别域的唯一的名称。这名称将会在你列出系统里正在运行的域的时候被显示。
* root:指定用于域的根设备
* disk:指定输出到域的块设备列表。它以如下格式提供:
disk = [ "backend device", "frontend device", "mode" ]
"backend device"指定输出到客户域的设备的格式和名称。格式可以是一个简单的文件镜像或一个实际的物理磁盘。Xen把输出到客户域的文件镜像认作是基于文件的VBD。因为这是开始Xen最简单而且快捷的方式,所以我们这章将选用此格式。
file://path_to_the_file_image:文件镜像以loopback设备的形式输出。loopback设备的设置将由Xen管理。
tap:aio:/path_to_the_file_image:文件镜像以能够被Xen的blktap驱动访问的tap设备的形式输出。在Xen文档中推荐以这种方式输出文件镜像到客户域。
phy:device:/name_of_the_device:输出到客户域的特定物理设备。此设备可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定 0×301
"frontend device"指定输出的backend device如何出现在客户域中。它可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定 0×301
"mode"指定设备是以只读还是可读写的形式输出。两个合法的选项是:
r - read-only
rw - read and write
* vif:指定域的虚拟网络接口配置。以如下的格式指定:
vif = [ "key1 = value1", "key2 = value2" ]
配置该指令的常用的选项是:
bridge:指定用于此接口的网桥
mac:指定此虚拟接口的MAC地址。如果有没有提供一个MAC地址,它将在Xen启动的时候随机配置一个MAC地址。此随机的地址是从IEEE分配给 XenSource的(00-16-3E)的范围内选取的。你也可以用此指令定义一个静态的MAC地址,使你能够从DHCP服务器上分配到一个静态的IP 地址。
* on_reboot:指定域重启过程中发生的动作。重启时候的合法状态有:
destroy:完全关闭域
preserve:域不会被清除,可得到域的调试信息以帮助调试崩溃
rename-restart:旧的域不被清除。替代的是它被重命名同时启动一个新的域替换旧的域
* on_crash:指定domU崩溃后所执行的动作。此指令的合法状态与on_boot选项一样
* vcpus:虚拟CPUs的数量
Xen Management User Interface-xm
xm是通过xend(Xen的监听进程)与Xen管理器通信的一个管理工具。由于它需要有使用xend和管理器之间的信道的特权,所以运行xm的命令需要有系统管理员的权限。
执行一个xm命令将马上会返回给访问者,但是实际的操作可能还没完成,某些域的命令可能会运行相当长的一段时间才能完成。确定命令是否成功执行完毕的唯一方法就是定期打印列表并检查。
域列表中某个域的状态栏的状态可能是下面五个中的一个:
* r running:当前正在使用CPU的域
* b blocked:中断的域。这种情况一般出现在当vcpu等待一个外部事件在该域发生。
* p paused:挂起的域。暂停的域仍然会消耗分配的资源(例如内存),but is not eligible for scheduling by the Xen hypervisor
* s shutdown:正在进行关机操作的域。
* c-crashed:列出崩溃的域。
通常的域列表是一个不容易被其他工具分析的表的格式,因此xm也提供了一个"-long"选项以S-Expression格式列出容易被其他工具分析的域信息。
Time for Action-Xen Manager
现在我们论证让xm完成一些普通任务
1、打印当前Xen环境下正在运行的域
xm list
2、打印当前Xen环境中dom0的详细信息
xm list Domain-0 long
3、打印当前Xen环境下关于一个域的详细信息
xm list long domain-name
4、暂停当前Xen环境下正在运行的一个domU
xm pause domain-name
5、解除之前暂停的domU的暂时状态
xm unpause domain-name
6、保存当前Xen环境下面正在运行的domU的状态到指定文件,接下来状态将会被保存为磁盘上的文件并把此域从运行域列表里面移除
xm save domain-name file-name
7、从保存的状态恢复一个域。它将从保存着状态信息的文件恢复域并把域恢复为运行状态。
xm restore file-name
8、检查Xen内核缓冲信息
xm demsg
9、打印当前Xen环境的主机信息
xm info
10、打印Xen日志
xm log
11、类似Unix的top一样实时监测Xen的域
xm top
12、列出某个域所使用的所有块设备
xm block-list domain-name
13、列出某个域使用的所有的网络接口
xm network-list domain-name
15、列出某个域使用的所有的网络接口的详细信息
xm network-list domain-name long
16、显示你的Xen环境里所有域的正常运行时间
xm uptime
17、重启一个域。它不会重新读取该域的Xen配置文件。如果你想重载该域的配置,你需要使用halt命令然后再执行create命令。
xm reboot domain-name
18、挂起一个域
xm suspend domain-name
19、恢复一个挂起的域
xm resume domain-name
20、重命名一个正在运行的域
xm rename domain-name-old domain-name-new
21、连接到域的控制台
xm console domain-name
22、关闭域
xm shutdown domain-name
原文地址 http://www.amazon.com/Xen-Virtualization-Practical -Prabhakar-Chaganti/dp/1847192483
四、Xen网络
* 桥接网络
* 路由网络
* 包含NAT的虚拟局域网
桥接网络
Time for Action-Using Bridged Networking
1、xen里面缺省的网络设置是桥接,这可以通过查看Xen在配置文件(/etc/xen/xend-config.sxp)来进一步确认,它应该有非注释的下面两行。
(network-script network-bridge)
(vif-script vif-bridge)
2、为domU创建一个新的配置文件,你可以使用在之前章节创建的任何一个镜像或你自己拥有的其他镜像。根据你选择的镜像替换文件中的配置:
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "bridged_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'bridge=xenbr0' ]
root = "/dev/hda1 ro"
3、用xm启动domU
xm create /root/xenimages/ttylinux_domU.cfg c
4、检查以确定domU已启动并正常运行
xm list
下面是启动Xen服务和xend时发生的事件队列:
1、执行/etc/xen/scripts/network-bridge脚本
2、这将创建一个叫xenbr0的新网桥
3、从物理网卡eth0复制MAC和IP地址
4、停止物理网卡eth0
5、创建一对新的已连接的虚拟网络接口 veth0和vif0.0
6、将之前复制的MAC和IP地址指派到veth0
7、重命名物理网卡eth0为peth0
8、重命名虚拟网卡veth0为eth0
9、连接peth0和vif0.0到xenbr0
10、启动网桥xenbr0和网卡peth0、eth0、vif0.0
使用brctl show命令可以查看连接到各个网桥上的网络接口情况
路由网络
Time for Action-Using Routed Networking
1、因为我们需要修改xend的配置文件,所以我们首先要停止xend
service xend stop
2、修改xen配置文件/etc/xen/xend-config.sxp使我们能够使用路由网络。注释关联桥接网络的两行并取消注释关联路由网络的两行。如果在配置文件中没发现配置路由网络的行,那么加上他们:
(network-script network-route)
(vif-script vif-route)
3、重新启动xend让它用新的配置起动
xend start
4、修改我们之前使用的domU的配置文件使它能使用路由网络
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "routed_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.1.165' ]
root = "/dev/hda1 ro"
5、起动domU
xm create /root/xen-images/ttylinux_domU.cfg -c
6、检查domU已经起动并正常运行
xm list
下面是xend用路由网络配置起动的事件队列
1、允许dom0进行IP转发
2、当domU起动的时候,xen从eth0复制IP地址到虚拟网络接口vif.0。虚拟接口的ID是自动分配给xen起动的每个客户域的。被分配的id在单个会话里面永远不会被重用,因此如果你停止并重启一个域,它将重新分配到一个新的ID。
3、启动虚拟接口vif.0。
4、为domU的配置文件中指向虚拟接口vif.0分配的IP地址增加静态路由
Virtual Local Network with Network Address Translation
Time for Action-Using VLAN with NAT
我们将在192.168.2.0上创建一个虚拟网络并且此网络保护一个web服务器和一个数据库,所有在此网络的虚拟机的IP地址都将在此范围内。我们将在此网络创建两个虚拟机并从一个公网IP地址去访问他们。端口将被dom0转发到各个虚拟机上。
1、第一个网络接口被dom0使用了,我们需要创建一个新的网络接口用于我们的VLAN。这个接口使用dummy网络去掉创建并命名为dummy0。创建一个新的名为/etc/sysconfig/network-scripts/ifcfg-dummy0的文件:
A DEVICE=dummy0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=x.x.x.x
ARP=yes
2、分配一个IP地址到这个接口并把它加到网络接口文件-/etc/network/interfaces:
auto dummy0
iface dummy0 inet static
address 192.168.2.1
netmask 255.255.255.0
3、修改xend配置(/etc/xen/xend-config.sxp)增加下面的行,使我们在新的dummy网络接口dummy0上监听桥接:
(network-script 'network-bridge netdev=dummy0′)
4、确定IP转发被允许
echo "1″ > /proc/sys/net/ipv4/ip_forward
5、重启sysctl使修改被live kernel获取
/sbin/sysctl -p
6、在我们的VLAN上创建第一个虚拟机。修改它的配置文件使它看起来像下面这样:
# assume this is the webserver vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_1″
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.2.2' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1″
7、在我们的VLAN上创建第二个虚拟机,修改他的配置文件使它看起来像下面这样:
# assume this is the mysql vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_2″
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.2.3' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1″
8、通知dom0必须为特定的端口转发请求到这个VLAN。为此我们需要首先在dom0允许NAT:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
9、现在我们可以配置规则转发端口到正确的虚拟机,首先我们转发80端口:
iptables -A PREROUTING -t nat -p tcp -i eth0 dport 80 -j DNAT to 192.168.2.2:80
10、然后转发mysql的端口3306:
iptables -A PREROUTING -t nat -p tcp -i eth0 dport 80 -j DNAT to 192.168.2.3:3306
重启xend然后创建虚拟机,现在我们已经有一个简单的网络配置使dom0转发基于端口的请求到VLAN里面的一个客户域。
五、存储
使用xen可选的高级存储选项
* 文件存储
* 网络文件系统(NFS)存储
* 逻辑卷管理(LVM)存储
文件存储
普通的文件可以用作虚拟块设备来容纳Xen域,这是开始使用Xen最快速的方法。
虽然文件是存储VM最简单快捷的方式,但是他们存在一些不利因素:
* 它们不适于I/O密集型的应用,因为它们在沉重的I/O负载下效率会降低,在dom0上的loopback块设备在用于支持file-backed VBD时对I/O的处理上表现得非常差。
* Linux在缺省情况下在所有的域上最多支持8个file-backed VBD。如果CONFIG_BLK_DEV_LOOP命令被编译进来作为dom0内核的一个模块,那么这个限制能够通过修改max_loop内核参数来增加。
NFS
Network File System(NFS)是一个允许用户通过网络访问文件并像本地文件目录一样处理它们的C/S系统。
NFS是允许一个系统在一个网络上与其他系统共享目录和文件的伟大方法。它允许远程系统上的用户像访问文件就如它们访问它们本地的文件。NFS的有力因素如下:
* 通过把常用和访问的数据存储在一个通过网络可以访问到单一的机器上,减少了本地磁盘空间的使用率
* 单个用户的家目录可以建立并存储在远程的NFS服务器上而且遍及整个网络都有效
* 存储设备能够被安装在一个远程的NFS服务器上,通过NFS对该设备的访问减少了企业硬件需求
* 通过网络经由NFS根文件系统远程启动linux机器
Xen允许我们利用NFS的功能,用NFS上的一个根文件系统来启动一个客户域。
Time for Action-Using NFS
要使用NFS,我们首先需要有一个支持NFS的Xen domU内核。
1、大多数的内核都支持NFS,但我们假设你的不支持,你需要编译内核以支持NFS,为domU的内核运行linux内核配置
make linux-2.6-xenU-config CONFIGMODE=menuconfig
2、选择File systems Network file systems选项,然后选择"NFS File system support"和"Root file system on NFS"。选择它们编译进内核,也可以选择转换它们为模块,如果你转换它们作为模块,那么需要确定在你的initrd镜像里面要包含它们,否则你将不能通 过NFS根文件系统启动你的客户域
3、编译内核并安装:
make linux-2.6-xen0-build
make linux-2.6-xen0-install
4、重启以获取新的修改。现在我们需要一个可以被我们使用的NFS服务,可以使用已有的可以访问的。在这里我们在一个新的服务器上建立一个新的NFS服 务。这个服务器上运行着Ubuntu Feisty Fawn,某些安装包的命令类似debain,你可以用特定发布版本的包管理命令替换它们
5、安装NFS服务和portmap包。portmap和NFS服务监控将在安装完成后自动启动。仔细检查以确定你的发布版本是相同的
apt-get install nfs-user-server portmap
6、创建一个包含我们客户安装的目录,这将是我们从这个服务器上经由NFS输出的目录。
mkdir /mnt/feisty
7、修改/etc/exports文件以添加这个目录到我们需要导出的目录
/mnt/feisty 192.168.1.86(rw,sync,no_root_squash)
8、使用debootstrap让Ubuntu Feisty居于此目录,这将下载并释放所有必需的文件到上面挂载的目录:
/usr/sbin/debootstrap arch i386 feisty /mnt/feisty http://archive.ubuntu.com/ubuntu
9、我们将使用Xen服务器系统的domU内核模块,从/lib/modules目录拷贝它们到此目录:
scp -r root@192.168.1.86:/lib/modules/2.6.**.**-xenU /mnt/feisty/lib/modules/
10、chroot到新的系统并配置它
chroot /mnt/feisty /bin/bash
11、添加我们需要的包:
apt-get install nfs-common portmap
12、为系统配置主机名
echo "ubuntu_feisty_nfs_domU" > /etc/hostname
13、配置在启动时候载入的文件系统
cat > /etc/fstab /etc/network/interfaces /root/xen-images/ubuntu_feisty_nfs_domU.cfg /etc/hostname
11、配置启动时候载入的文件系统
cat > /etc/fstab /etc/network/interfaces /root/xen-images/ubuntu_feisty_domU.cfg 共享和访问逻辑块设备,GNBD的一个通常用法是从LVM输出逻辑块设备,这是类似存储区域网络 (SAN)的一个简单廉价的替代品。但是需要注意的是使用GNBD可能是因为网络而降低速率,除非有一个非常快速的网络,否则速率将不如直接从磁盘读取那 么快。
下面是对配置GNBD有用的一些资源:
How to build, install, and run GNBD:
http://sources.redhat.com/cluster/gnbd/gnbd_usage. txt
Xen with DRBD, GNBD and OCFS2 Howto:
http://xenamo.sourceforge.net/
2011年03月25日
一、Xen的安装
源代码安装:
1、创建一个目录用于保存Xen源代码,并进入该目录。
mkdir ~/xen-source
cd ~/xen-source
2、Xen的源代码被保存在Mercurial版本修订控制库中,所以需要安装可以用于检查源代码的mercurial客户端。可以使用yum来安装mercurial。
yum install mercurial
然后使用mercurial客户端(hg)运行类似下面的命令来检验源代码:
hg clone http://xenbits.xensource.com/xen-3.2-testing.hg
它将会在xen-source目录下面创建一个叫 xen-3.2-testing.hg 的目录并把源代码置于其中,现在我们就已经准备好编译Xen了。
在编译Xen前我们需要检查系统是否已经包含提供编译器、库文件和建立Xen开发环境需要的开发头文件包,下面是必须要安装的包:
gcc
glib-devel
libgomp
glibc-headers
ncurses-devel
openssl-devel
zlib-devel
xorg-X11-proto-devel
python-devel
tetex-latex
xen-devel
如果没有安装这些包,可以用yum安装:
yum install gcc glibc-devel xen-devel libgomp glibc-headers ncurses-devel openssl-devel zlib-devel xorg-X11-proto-devel python-devel tetex-latex
4、我们编译内核前的第一步是先配置它。我们一般使用缺省值,除非你要增加一些驱动或选项的支持,然后退出对话并保存修改。
make linux-2.6-xen0-config
5、编译内核和模块
make linux-2.6-xen0-build
6、上面的命令将会编译并生成大量的文件到dist/install目录
在dist/install下的boot目录包含了用于Xen内核的配置文件、内核镜像文件和内核调试符号文件;
在dist/install下的lib目录下包含了所有的内核模块和驱动;
7、使用root用户运行下面的命令来安装刚才生成的文件,它将安装内核模块并拷贝内核镜像和符号文件到/boot
make linux-2.6-xen0-install
8、运行depmod命令读取/lib/modules/2.6.**.**-xen0(用你所编译的内核版本替换**,下同)下的每个模块来创建一个模块依赖关系列表,并确定哪些符号是它输出的符号和哪些符号是必需的
depmod -a 2.6.**.**-xen0
9、在/boot目录创建启动的时候Xen内核需要用到的initrd文件,在xen-3.2-testing.hg目录下运行:
/sbin/mkinitrd -v -f with=sd_mod with=scsi_mod /boot/initrd-2.6.**.**-xen0.img 2.6.**.**-xen0
编译并安装Xen工具、库文件和Python模块,但是在这样做之前必须确定没有Xen工具的二进制包已经安装
make install KERNELS="linux-2.6-xen0″
10、修改grub文件,增加启动新的Xen内核的入口
11、重启并进入新的Xen系统
12、确定所有的程序正常启动
13、检查网络接口以确定都已经启动并正常运行
到此你已经成功编译和安装开发版的Xen到你的机器上并正常运行了。
用yum安装xen:
相比源代码安装,yum使xen的安装变得轻而易举,步骤如下:
1、运行下面的命令安装xen内核和工具:
yum install kernel-xen xen
这将下载并安装下面的包和它们的关联包:
kernel-xen:包含允许主机和客户机运行xen的内核,类似管理器
xen:包含与管理器交互的用户空间工具
bridge-untils:用于配置连接多个Ethernet设备的网桥
libvirt:提过使用Xen框架的API的C库
libvirt-python:包含一个让Python应用程序使用libvirt提供的xen框架的API的Python模块
python-virtinst:包含一个使用libvirt在虚拟机内部启动安装Fedora/Red Hat Enterprise Linux发布版本的Python模块
xen-libs:包含运行管理xen的应用程序所需的库
2、Xen内核在安装完后不会设置为缺省的启动项,需要修改/boot/grub/grub.conf,改变default=1为default=0
3、用xen内核重启系统
4、系统启动并运行后,检查正在运行的内核的版本以确定是否在运行Xen内核
5、xend-Xen控制daemon管理着域,可以用/etc/rc.d/init.d/xend脚本来启动和停止它,它在系统启动的时候默认是自动启动的。检查并确定xend是否正在运行,可以用下面的命令来搜索系统正在运行的进程的列表:
pidof xend
6、一旦xend运行,它将启动Domain0,这是个私有域。用xm命令检查domain0是否已经被创建并在运行。
xm list
7、检查网络接口是否已经起了,包括通常的网络接口如eth0和lo,分配给Xen的接口。在高于Fedora 7.0的版本中,名叫peth0的网络接口已经更名为eth0
二、Xen客户机的安装
总体流程
1、选择存储介质 文件、分区、LVM等;
2、安装客户机操作系统文件到选择的存储介质,安装这些文件的机制可以是一个自举工具(例如debootstap),一个ISO镜像文件,一个cd-rom,甚至可以是一个包含了所有需要的文件的简单文件系统目录;
3、创建一个指定Xen创建子域时用到的参数的配置文件;
4、使用xm创建子域;
物理地址扩展
物理地址扩展(PAE)是一种为用户模式应用程序增加总体有效的物理或虚拟内存,使服务可以访问4GB以外的物理内存的技术。为达到此目的,PAE修改32位的寻址模式为64的寻址模式,因此操作系统或用户应用程序可以访问额外的物理内存。
如果存在PAE的话那么linux内核和Xen管理器都将受益于它。能有效运行Xen的三张模式:
*纯32位模式
*带PAE的32位模式
*纯64位模式
在使用这些模式的时候有一些重点需要确定的:
*当采用不完全虚拟时Xen管理器、dom0和domU必须运行在同一种模式下,混合使用不同的模式将导致错误;
*当使用完全虚拟或硬件虚拟机(HVM)时上面的限制不会生效。但当前使用HVM需要Intel或AMD芯片支持这功能。
编译一个domU内核
我们使用上面下载的Xen源代码来创建domU内核
1、进入包含源代码的目录
cd ~/xen-source
2、编译domU内核
make linux-2.6-xenU-config
3、选择domU内核需要的选项,如果不确定,可以使用缺省选项,记得在退出时保存选项。
4、创建domU内核然后安装
make linux-2.6-xenU-build
make linux-2.6-xenU-install
5、为domU内核创建initrd
mkinitrd -v -f with=ide-disk with=sd_mod with=ide-generic with=ext3 with=scsi_mod /boot/initrd-2.6.**.**-xenU.img 2.6.**.**-xenU
6、现在我们已经有编译好的domU内核并且已经准备好,我们将使用它启动我们下一章将要创建的虚拟机。
Xen域的内存
在我们当前的配置中,dom0的内核处理所有在系统启动时候激活的内存,然后在domUs需要的时候分配给它们。当我们创建客户域的时候我们需要一种给我 们创建的每个客户域提供内存的方法。Xen提供了一个在启动时侯简单指定dom0内核使用的内存值的参数。在你的基本系统里面修改/boot/grup /memu.lst,添加指定dom0内核可以使用的内存总值的参数。
kernel /xen.gz noreboot dom0_mem=256M
Pygrub
在Xen里通常情况下我们都会在dom0的配置文件中指定内核和initrd,这也就意味着任何时候内核需要修改或改变的时候,你都需要有在dom0主机 上的管理员权限来修改它。Redhat开发了一个类似grub的启动装载器叫Pygrub,它允许domU用户们使用grub一样的用户接口选取他们自己 的内核。Xen在domUs启动前启动Pygrub,控制台用户可以在一个与grub /grub/menu.lst在同一个配置文件中读取的菜单中选取 一个内核启动,一旦用户选择了一个内核和initrd,控制权回到Xen上,Xen启动所选择的domU内核。
Time for Action Bootstrapping an Ubuntu System
1、Ubuntu使用叫做debootstrap的debian工具来创建系统,当前它在Fedora中还未预置。我们将从Ubuntu Feisty下载最新版的debootstrap并安装到我们基于Fedora Core的系统中。由于它是deb格式的包,所以我们需要把它转换为适合安装在Fedora系统的格式。首先获取下面两个从属软件包并安装。
wget http://www.hccfl.edu/pollock/AUnix1/alien/deb-1.10 .27-3.i586.rpm
wget http://www.hccfl.edu/pollock/AUnix1/alien/html2tex t-1.3.2a-3.i586.rpm
rpm ivh -nodeps deb-1.10.27-3.i586.rpm
rpm ivh -nodeps html2text-1.3.2a-3.i586.rpm
2、下载并安装用于把包从一种发布格式转换为另一种的alien。
wget http://www.hccfl.edu/pollock/AUnix1/alien/alien_8. 64.tar.gz
tar -zxvf alien_8.64.tar.gz
perl Makefile.PL
make PREFIX=/usr
make PREFIX=/usr install
3、从Ubuntu下载debootstrap,转换它为rpm格式并安装
wget http://librarian.launchpad.net/6615094http://libra rian.launchpad.net/6615094/debootstrap_0.3.3.2ubunt u3_all.deb
alien to-rpm debootstrap_0.3.3.2ubuntu3_all.deb
rpm -Uvh debootstrap-0.3.3.2-2.noarch.rpm
现在我们已经有了自举一个Ubuntu Feisty系统所需要的所有工具。
(当前debootstrap有源代码的版本,所以可以尝试用源代码编译,也就免去了前面的步骤中deb包到rpm包的转换了)
4、创建一个叫xen-images的目录,我们将把所有的客户镜像创建到这个目录。
mkdir ~/xen-images
你可以在本地文件、NFS系统、LVM组、或iSCSI存储里面创建虚拟机。
5、创建三个文件,一个用于存储根文件系统(/),一个用于/boot,另一个用于swap
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_domU.img bs=1G count=6
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_swap_domU.img bs=1G count=1
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_boot_domU.img bs=1k count=1000
6、在根文件镜像上创建一个ext3的文件系统,这是/被挂载的镜像
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_domU.img
7、在启动文件镜像上创建一个ext3的文件系统并在swap文件上创建swap
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_boot_domU.img
/sbin/mkswap ~/xen-images/ubuntu_feisty_swap_domU.img
我们需要挂载这些文件到目录下面以对其进行读写操作
8、创建一个xen-mounts目录,我们将在里面创建挂载其他文件镜像的目录
mkdir -p ~/xen-mounts/ubuntu_feisty_domU
9、使用loop back挂载用于存储根文件系统的文件
mount -o loop ~/xen-images/ubuntu_feisty_domU.img ~/xen-mounts/ubuntu_feisty_domU
10、运行debootstrap。他将下载并解压所有需要的到上面挂载的目录
/usr/sbin/debootstrap arch i386 feisty ~/xen-mounts/ubuntu_feisty_domU http://archive.ubuntu.com/ubuntu
11、我们将使用之前创建的domU内核来启动这个域,所以这个域将需要预编译了该内核需要的内核模块,从/lib/modules目录下面拷贝它们
mkdir -p ~/xen-mounts/ubuntu_feisty_domU/lib/modules
cp -dpR /lib/modules/2.6.**.**-xenU ~/xen-mounts/ubuntu_feisty_domU/lib/modules
12、chroot到新的系统并配置它
chroot ~/xen-mounts/ubuntu_feisty_domU
13、设置系统的主机名
echo "ubuntu_fesity_domU" > /etc/hostname
14、设置启动时候装载的文件
cat > /etc/fstab /etc/network/interfaces ~/xen-images/ubuntu_feisty_domU.cfg /boot/netbsd-INSTALL_XEN3_DOMU
zcat netbsd-XEN3_DOMU.gz > /boot/netbsd-XEN3_DOMU
2、创建一个镜像文件用于存储我们的NetBSD客户域
dd if=/dev/zero of=/home/pchaganti/xen-images/netbsd_domU.img bs=1M count=300
3、创建Xen配置文件用于启动NetBSD domU
cat > /root/xen-images/netbsd_domU.cfg /root/xen-images/centos_domU.cfg web应用服务器,然后挂载rh5.1的dvd镜像,并设置web应用允许用户访问dvd镜像内的文件。
(我们这里假设在192.168.20.9上架设了web服务器,并把http://192.168.20.9/RH5指到dvd镜像挂载的目录)
在运行xen的系统上执行以下命令创建放置镜像的目录:
mkdir -p /data/xen
执行以下命令开始启动一个xen客户机的安装:
virt-install -n rh5 -r 256 -s 4 vcpus=1 -f /data/xen/rh5 nographics -p -d -l "http://192.168.20.9/RH5″
新建立一个基于文件的虚拟机,256M内存,4G硬盘,1个CPU。
基于文件的虚拟机效率相对低下,安装标准的系统(1G左右)用了35分钟左右。
在xen的系统上运行以下命令:
virt-install -n rh5 -r 256 vcpus=1 -f /dev/sda7 nographics -p -d -l "http://192.168.20.9/RH5″
新建立一个基于分区的虚拟机,256M内存,1个CPU。
基于分区的虚拟机效率比文件的高许多,安装标准的系统(1G左右)只用了8分钟左右,选择的分区必须没有被host系统使用,如果该分区已经被mount到系统中,必须先umount该分区后进行安装,否则会报错。
内核文件放在/var/lib/xen目录
上述方法尝试安装rh4u6,rh5u1,rh5u2成功
原文地址 http://www.amazon.com/Xen-Virtualization-Practical -Prabhakar-Chaganti/dp/1847192483
三、Xen管理
* xm
Xen Domain Configuration Files
Xen域配置文件
Xen域的域配置文件指定管理域行为的多个参数。这些不同的配置Xen的文件放在/etc/xen目录下。以key=value格式保存着多个选项的配置 文件是以python写的可执行文件,所以各选项必须是合法的python代码。/etc/xen/xend-config.sxp指定用于创建dom0 的配置文件。
如果你在创建域的时候提供绝对路径的话你可以把创建domUs的配置文件放在任何地方。/etc/xen/auto是一个特殊目录,所有放置在里面的域配置文件对应的域都会在xend监听程序启动的时候被自动启动。
下面是一些在Xen域配置文件中要配置的常用的选项:
* kernel:用于域的内核镜像,提供到内核镜像文件的绝对路径
* ramdisk:指定给域的初始ramdisk。如果你的内核有用于你的根文件系统和硬盘的内置驱动,可能你不需要创建和指定ramdisk。此配置提供到initrd文件位置的完整路径
* memory:指定分配给域的总体内存容量,以MB为单位。如果分配的内存不足将阻止域的启动。你还必须确定Xen管理的总内存 包含dom0和所有的domUs 必须少于或等于安装在你的机器上面的物理内存总量。
* name:提供一个识别域的唯一的名称。这名称将会在你列出系统里正在运行的域的时候被显示。
* root:指定用于域的根设备
* disk:指定输出到域的块设备列表。它以如下格式提供:
disk = [ "backend device", "frontend device", "mode" ]
"backend device"指定输出到客户域的设备的格式和名称。格式可以是一个简单的文件镜像或一个实际的物理磁盘。Xen把输出到客户域的文件镜像认作是基于文件的VBD。因为这是开始Xen最简单而且快捷的方式,所以我们这章将选用此格式。
file://path_to_the_file_image:文件镜像以loopback设备的形式输出。loopback设备的设置将由Xen管理。
tap:aio:/path_to_the_file_image:文件镜像以能够被Xen的blktap驱动访问的tap设备的形式输出。在Xen文档中推荐以这种方式输出文件镜像到客户域。
phy:device:/name_of_the_device:输出到客户域的特定物理设备。此设备可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定 0×301
"frontend device"指定输出的backend device如何出现在客户域中。它可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定 0×301
"mode"指定设备是以只读还是可读写的形式输出。两个合法的选项是:
r - read-only
rw - read and write
* vif:指定域的虚拟网络接口配置。以如下的格式指定:
vif = [ "key1 = value1", "key2 = value2" ]
配置该指令的常用的选项是:
bridge:指定用于此接口的网桥
mac:指定此虚拟接口的MAC地址。如果有没有提供一个MAC地址,它将在Xen启动的时候随机配置一个MAC地址。此随机的地址是从IEEE分配给 XenSource的(00-16-3E)的范围内选取的。你也可以用此指令定义一个静态的MAC地址,使你能够从DHCP服务器上分配到一个静态的IP 地址。
* on_reboot:指定域重启过程中发生的动作。重启时候的合法状态有:
destroy:完全关闭域
preserve:域不会被清除,可得到域的调试信息以帮助调试崩溃
rename-restart:旧的域不被清除。替代的是它被重命名同时启动一个新的域替换旧的域
* on_crash:指定domU崩溃后所执行的动作。此指令的合法状态与on_boot选项一样
* vcpus:虚拟CPUs的数量
Xen Management User Interface-xm
xm是通过xend(Xen的监听进程)与Xen管理器通信的一个管理工具。由于它需要有使用xend和管理器之间的信道的特权,所以运行xm的命令需要有系统管理员的权限。
执行一个xm命令将马上会返回给访问者,但是实际的操作可能还没完成,某些域的命令可能会运行相当长的一段时间才能完成。确定命令是否成功执行完毕的唯一方法就是定期打印列表并检查。
域列表中某个域的状态栏的状态可能是下面五个中的一个:
* r running:当前正在使用CPU的域
* b blocked:中断的域。这种情况一般出现在当vcpu等待一个外部事件在该域发生。
* p paused:挂起的域。暂停的域仍然会消耗分配的资源(例如内存),but is not eligible for scheduling by the Xen hypervisor
* s shutdown:正在进行关机操作的域。
* c-crashed:列出崩溃的域。
通常的域列表是一个不容易被其他工具分析的表的格式,因此xm也提供了一个"-long"选项以S-Expression格式列出容易被其他工具分析的域信息。
Time for Action-Xen Manager
现在我们论证让xm完成一些普通任务
1、打印当前Xen环境下正在运行的域
xm list
2、打印当前Xen环境中dom0的详细信息
xm list Domain-0 long
3、打印当前Xen环境下关于一个域的详细信息
xm list long domain-name
4、暂停当前Xen环境下正在运行的一个domU
xm pause domain-name
5、解除之前暂停的domU的暂时状态
xm unpause domain-name
6、保存当前Xen环境下面正在运行的domU的状态到指定文件,接下来状态将会被保存为磁盘上的文件并把此域从运行域列表里面移除
xm save domain-name file-name
7、从保存的状态恢复一个域。它将从保存着状态信息的文件恢复域并把域恢复为运行状态。
xm restore file-name
8、检查Xen内核缓冲信息
xm demsg
9、打印当前Xen环境的主机信息
xm info
10、打印Xen日志
xm log
11、类似Unix的top一样实时监测Xen的域
xm top
12、列出某个域所使用的所有块设备
xm block-list domain-name
13、列出某个域使用的所有的网络接口
xm network-list domain-name
15、列出某个域使用的所有的网络接口的详细信息
xm network-list domain-name long
16、显示你的Xen环境里所有域的正常运行时间
xm uptime
17、重启一个域。它不会重新读取该域的Xen配置文件。如果你想重载该域的配置,你需要使用halt命令然后再执行create命令。
xm reboot domain-name
18、挂起一个域
xm suspend domain-name
19、恢复一个挂起的域
xm resume domain-name
20、重命名一个正在运行的域
xm rename domain-name-old domain-name-new
21、连接到域的控制台
xm console domain-name
22、关闭域
xm shutdown domain-name
原文地址 http://www.amazon.com/Xen-Virtualization-Practical -Prabhakar-Chaganti/dp/1847192483
四、Xen网络
* 桥接网络
* 路由网络
* 包含NAT的虚拟局域网
桥接网络
Time for Action-Using Bridged Networking
1、xen里面缺省的网络设置是桥接,这可以通过查看Xen在配置文件(/etc/xen/xend-config.sxp)来进一步确认,它应该有非注释的下面两行。
(network-script network-bridge)
(vif-script vif-bridge)
2、为domU创建一个新的配置文件,你可以使用在之前章节创建的任何一个镜像或你自己拥有的其他镜像。根据你选择的镜像替换文件中的配置:
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "bridged_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'bridge=xenbr0' ]
root = "/dev/hda1 ro"
3、用xm启动domU
xm create /root/xenimages/ttylinux_domU.cfg c
4、检查以确定domU已启动并正常运行
xm list
下面是启动Xen服务和xend时发生的事件队列:
1、执行/etc/xen/scripts/network-bridge脚本
2、这将创建一个叫xenbr0的新网桥
3、从物理网卡eth0复制MAC和IP地址
4、停止物理网卡eth0
5、创建一对新的已连接的虚拟网络接口 veth0和vif0.0
6、将之前复制的MAC和IP地址指派到veth0
7、重命名物理网卡eth0为peth0
8、重命名虚拟网卡veth0为eth0
9、连接peth0和vif0.0到xenbr0
10、启动网桥xenbr0和网卡peth0、eth0、vif0.0
使用brctl show命令可以查看连接到各个网桥上的网络接口情况
路由网络
Time for Action-Using Routed Networking
1、因为我们需要修改xend的配置文件,所以我们首先要停止xend
service xend stop
2、修改xen配置文件/etc/xen/xend-config.sxp使我们能够使用路由网络。注释关联桥接网络的两行并取消注释关联路由网络的两行。如果在配置文件中没发现配置路由网络的行,那么加上他们:
(network-script network-route)
(vif-script vif-route)
3、重新启动xend让它用新的配置起动
xend start
4、修改我们之前使用的domU的配置文件使它能使用路由网络
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "routed_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.1.165' ]
root = "/dev/hda1 ro"
5、起动domU
xm create /root/xen-images/ttylinux_domU.cfg -c
6、检查domU已经起动并正常运行
xm list
下面是xend用路由网络配置起动的事件队列
1、允许dom0进行IP转发
2、当domU起动的时候,xen从eth0复制IP地址到虚拟网络接口vif.0。虚拟接口的ID是自动分配给xen起动的每个客户域的。被分配的id在单个会话里面永远不会被重用,因此如果你停止并重启一个域,它将重新分配到一个新的ID。
3、启动虚拟接口vif.0。
4、为domU的配置文件中指向虚拟接口vif.0分配的IP地址增加静态路由
Virtual Local Network with Network Address Translation
Time for Action-Using VLAN with NAT
我们将在192.168.2.0上创建一个虚拟网络并且此网络保护一个web服务器和一个数据库,所有在此网络的虚拟机的IP地址都将在此范围内。我们将在此网络创建两个虚拟机并从一个公网IP地址去访问他们。端口将被dom0转发到各个虚拟机上。
1、第一个网络接口被dom0使用了,我们需要创建一个新的网络接口用于我们的VLAN。这个接口使用dummy网络去掉创建并命名为dummy0。创建一个新的名为/etc/sysconfig/network-scripts/ifcfg-dummy0的文件:
A DEVICE=dummy0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=x.x.x.x
ARP=yes
2、分配一个IP地址到这个接口并把它加到网络接口文件-/etc/network/interfaces:
auto dummy0
iface dummy0 inet static
address 192.168.2.1
netmask 255.255.255.0
3、修改xend配置(/etc/xen/xend-config.sxp)增加下面的行,使我们在新的dummy网络接口dummy0上监听桥接:
(network-script 'network-bridge netdev=dummy0′)
4、确定IP转发被允许
echo "1″ > /proc/sys/net/ipv4/ip_forward
5、重启sysctl使修改被live kernel获取
/sbin/sysctl -p
6、在我们的VLAN上创建第一个虚拟机。修改它的配置文件使它看起来像下面这样:
# assume this is the webserver vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_1″
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.2.2' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1″
7、在我们的VLAN上创建第二个虚拟机,修改他的配置文件使它看起来像下面这样:
# assume this is the mysql vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_2″
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w ']
vif = [ 'ip=192.168.2.3' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1″
8、通知dom0必须为特定的端口转发请求到这个VLAN。为此我们需要首先在dom0允许NAT:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
9、现在我们可以配置规则转发端口到正确的虚拟机,首先我们转发80端口:
iptables -A PREROUTING -t nat -p tcp -i eth0 dport 80 -j DNAT to 192.168.2.2:80
10、然后转发mysql的端口3306:
iptables -A PREROUTING -t nat -p tcp -i eth0 dport 80 -j DNAT to 192.168.2.3:3306
重启xend然后创建虚拟机,现在我们已经有一个简单的网络配置使dom0转发基于端口的请求到VLAN里面的一个客户域。
五、存储
使用xen可选的高级存储选项
* 文件存储
* 网络文件系统(NFS)存储
* 逻辑卷管理(LVM)存储
文件存储
普通的文件可以用作虚拟块设备来容纳Xen域,这是开始使用Xen最快速的方法。
虽然文件是存储VM最简单快捷的方式,但是他们存在一些不利因素:
* 它们不适于I/O密集型的应用,因为它们在沉重的I/O负载下效率会降低,在dom0上的loopback块设备在用于支持file-backed VBD时对I/O的处理上表现得非常差。
* Linux在缺省情况下在所有的域上最多支持8个file-backed VBD。如果CONFIG_BLK_DEV_LOOP命令被编译进来作为dom0内核的一个模块,那么这个限制能够通过修改max_loop内核参数来增加。
NFS
Network File System(NFS)是一个允许用户通过网络访问文件并像本地文件目录一样处理它们的C/S系统。
NFS是允许一个系统在一个网络上与其他系统共享目录和文件的伟大方法。它允许远程系统上的用户像访问文件就如它们访问它们本地的文件。NFS的有力因素如下:
* 通过把常用和访问的数据存储在一个通过网络可以访问到单一的机器上,减少了本地磁盘空间的使用率
* 单个用户的家目录可以建立并存储在远程的NFS服务器上而且遍及整个网络都有效
* 存储设备能够被安装在一个远程的NFS服务器上,通过NFS对该设备的访问减少了企业硬件需求
* 通过网络经由NFS根文件系统远程启动linux机器
Xen允许我们利用NFS的功能,用NFS上的一个根文件系统来启动一个客户域。
Time for Action-Using NFS
要使用NFS,我们首先需要有一个支持NFS的Xen domU内核。
1、大多数的内核都支持NFS,但我们假设你的不支持,你需要编译内核以支持NFS,为domU的内核运行linux内核配置
make linux-2.6-xenU-config CONFIGMODE=menuconfig
2、选择File systems Network file systems选项,然后选择"NFS File system support"和"Root file system on NFS"。选择它们编译进内核,也可以选择转换它们为模块,如果你转换它们作为模块,那么需要确定在你的initrd镜像里面要包含它们,否则你将不能通 过NFS根文件系统启动你的客户域
3、编译内核并安装:
make linux-2.6-xen0-build
make linux-2.6-xen0-install
4、重启以获取新的修改。现在我们需要一个可以被我们使用的NFS服务,可以使用已有的可以访问的。在这里我们在一个新的服务器上建立一个新的NFS服 务。这个服务器上运行着Ubuntu Feisty Fawn,某些安装包的命令类似debain,你可以用特定发布版本的包管理命令替换它们
5、安装NFS服务和portmap包。portmap和NFS服务监控将在安装完成后自动启动。仔细检查以确定你的发布版本是相同的
apt-get install nfs-user-server portmap
6、创建一个包含我们客户安装的目录,这将是我们从这个服务器上经由NFS输出的目录。
mkdir /mnt/feisty
7、修改/etc/exports文件以添加这个目录到我们需要导出的目录
/mnt/feisty 192.168.1.86(rw,sync,no_root_squash)
8、使用debootstrap让Ubuntu Feisty居于此目录,这将下载并释放所有必需的文件到上面挂载的目录:
/usr/sbin/debootstrap arch i386 feisty /mnt/feisty http://archive.ubuntu.com/ubuntu
9、我们将使用Xen服务器系统的domU内核模块,从/lib/modules目录拷贝它们到此目录:
scp -r root@192.168.1.86:/lib/modules/2.6.**.**-xenU /mnt/feisty/lib/modules/
10、chroot到新的系统并配置它
chroot /mnt/feisty /bin/bash
11、添加我们需要的包:
apt-get install nfs-common portmap
12、为系统配置主机名
echo "ubuntu_feisty_nfs_domU" > /etc/hostname
13、配置在启动时候载入的文件系统
cat > /etc/fstab /etc/network/interfaces /root/xen-images/ubuntu_feisty_nfs_domU.cfg /etc/hostname
11、配置启动时候载入的文件系统
cat > /etc/fstab /etc/network/interfaces /root/xen-images/ubuntu_feisty_domU.cfg 共享和访问逻辑块设备,GNBD的一个通常用法是从LVM输出逻辑块设备,这是类似存储区域网络 (SAN)的一个简单廉价的替代品。但是需要注意的是使用GNBD可能是因为网络而降低速率,除非有一个非常快速的网络,否则速率将不如直接从磁盘读取那 么快。
下面是对配置GNBD有用的一些资源:
How to build, install, and run GNBD:
http://sources.redhat.com/cluster/gnbd/gnbd_usage. txt
Xen with DRBD, GNBD and OCFS2 Howto:
http://xenamo.sourceforge.net/