一、迁移的准备工作
在进行迁移之前,有一些准备工作要做,主要是目的主机和源主机及其网络方面。下面分别加以介绍。
首先,在源主机和目的主机方面,两者必须都运行有Xen和xend守护进程。必须确保目的主机具有足够的磁盘空间、内存容量和资源,以供迁移后的domain运行之用。此外,源主机和目的主机还必须具有相同的体系结构和虚拟化扩展,例如,如果源主机使用的是具有虚拟化扩展的x86-64体系结构的话,目的主机也必须如此。之所以这样做,是为了防止由于内核和用户库使用的指令集不匹配而导致domain迁移之后无法正常工作的情况。
其次,在网络方面,要求源主机和目的主机还必须位于同一子网上。迁移domain时,如果目的地结点位于不同的子网上,那么迁移将会失败,因为该domain的MAC和IP地址也随之迁移。如您运行了防火墙,你可能需要创建相应的iptables规则来准许迁入连接。
再者,迁移时,xend守护进程会中止domain在源主机上的运行,接着将其复制到目的主机,然后重新启动该domain 。默认时,xend守护进程从本机接受迁移请求。为了使迁移目标接受来自远程主机的迁入请求,您必须修改目的主机在/etc/xend-config.sxp文件中的xen-relocation-hosts-allow 参数。因为没有提供认证,所以为安全起见您必须限定允许迁移的主机。
下面,我们开始介绍用于迁移domain的第一种方法:存储还原法。
二、存储还原迁移法
存储还原法的过程是这样的:首先,将一个domain的当前运行状态保存到硬盘上的一个文件中,然后,Xend 再利用该文件实现对该domain原状态的还原。其实这与便携式计算机的休眠功能非常相像:休眠时,便携式计算机会保存硬盘状态的映像,然后自动关机。退出休眠时,它会使用保存的磁盘映象将系统还原到之前的运行状态。
本节中,我们为读者介绍如何将一个运行中的domain 保存为一个文件,之后再用它将domain还原到之前的工作状态,至于在哪里还原,既可以在同一个服务器上,也可以在之外的Xen 服务器上。但在将domain 保存成映像文件之前,一定要腾出足以存放该文件的磁盘空间来。
操作过程
好了,下面开始介绍在Xen 服务器上迁移Domain的具体操作步骤。具体要做的是:创建一个Debian domain ,然后将它的状态保存到一个文件,该文件将用于还原这个Debian domain。
1、创建Debian guest domain :
# xm create debian_etch_domU.cfg –c
2、检查该domain的运行是否正常。因为我们给上述的xm 命令提供了-c参数,这将在当前控制台中启动客户机Domain。但是要想检查该Domain是否已经启动,就必须使用另外一个控制台会话。
3、我们将要把这个Domain的当前状态保存到/xen-saved-images 目录,当然也可以保存到您选择的其他目录:
# xm save 1 /xen-saved-images/etch.save
4、保存的Domain会从当前运行的Domain列表中删除,我们可以用xm 命令列出眼下运行的Domain,看看它有没有被删掉。
5、从文件还原保存的Domain:
# xm restore /xen-saved-images/etch.save
6、再次执行xm 命令,我们将看到,还原后的Domain又回到当前Domain列表中了。
相关说明
把工作中的Domain的运行状态保存到一个磁盘文件的时候,文件没有经过任何形式的加密,所以恶意用户只要能够访问保存映像文件目录,就能对这些映像做手脚。因此,确保对存放这些映像的文件夹的访问的安全就显得格外重要。
一个Domain的运行状态就是该Domain在被保存时刻的快照或者映像。所有运行中的进程的信息和状态都被存放到这个文件中。 查看该文件时,您会发现这是一个庞大的二进制文件,其大小等于该Domain被保存时所使用的内存量。 因为Xen Domain通常会运行一些企业应用程序,所以这个文件一般小不了,通常都在几GB左右。因此,你必须保证有足够的存储空间来存放这个文件。虽然本例将状态保持到了一个硬盘文件之上,但是您还可以将这个文件存放到一个足够大的网络文件夹上,甚至一个U盘上。将Domain保存到U盘的确不错,这样就可以随身携带,需要时还可以在不同的服务器上将其还原。
我们能够使用xm 命令加restore 选项来还原存储的Domain,这会再次启动该Domain,并将其还原至被保存时的状态。当使用存储还原法时,有一些事项需要时刻注意:因为Domain还原后的ID不同于其保存时刻的Domain ID,所以使用xm 查看还原后的Domain时,一定要注意ID 的变化。虽然Domain被恢复到了原先的状态(被存储时刻的状态),却不能自动连接到该domain的控制台,相反,我们必须显式的运行xm 命令才能连接到控制台。