`
atomoptics
  • 浏览: 92838 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[zz]使用虚拟 Linux 来测试应用程序

阅读更多
<p>构建一个沙盒,以保持您的应用程序独立、安全和正确<br /><a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/#author1">Bryan Clark</a><br />互动设计师, Red Hat<br />2005 年 4 月 04 日</p> <blockquote><p>Xen 是可用于 Linux? 内核的一种虚拟化技术,让您可以像在现有环境中一样安装并测试新的升级,而不必担心破坏原有的系统。作者将向您介绍如何使用 Fedora Core 安装 Xen,不过,安装之后,在任何发行版本上的 Xen 中,所有程序运转起来都是相同的。了解 Linux 上的虚拟化,知道具有一个用于测试新软件的沙盒的好处,并练习在同一台 Linux 机器上运行多个虚拟机。</p> <p>【zz】<a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/"><a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/">http://www-128.ibm.com/dev...</a></a></p> </p></blockquote> <p>随着对现有软件的改进和 bug 修复,开源世界的变化永无止境。要保持软件总是升级到最新,这可能得作为一份专职的工作。升级软件最难处理的问题之一是:您永远不会真正知道升级完成后应用程序是否还能够工作。大部分软件打包系统都具备回滚功能,但通常只有这项功能还不够;理想情况下,您应该去测试这些新的升级,并在一个不会破坏任何东西的环境中去尝试它们。 </p> <p>就像玩耍的小孩子一样,您希望拥有一个属于自己的沙盒,在那里您可以随意做任何事情。 </p> <p>通常通过 <i>虚拟化(Virtualization)</i>(或者“沙盒(sandbox)”)将同一硬件上的应用程序和系统彼此隔离开来。从硬件模拟到完全硬件虚拟化,Linux 支持很多种不同形式的虚拟化。在不断增加的虚拟化技术列表中,Xen 是近来最引人注目的技术之一,它由剑桥大学开发。Xen 值得您关注,因为它具有空前的性能与安全性。 </p> <p><a name="along_came_xen">初识 Xen</a><br />Xen 是在剑桥大学作为一个研究项目被开发出来的,它已经在开源社区中得到了极大的推动。Xen 是一款 <i>半虚拟化(paravirtualizing) VMM</i>(虚拟机监视器,Virtual Machine Monitor),这表示,为了调用系统管理程序,要有选择地修改操作系统,然而却不需要修改操作系统上运行的应用程序。虽然 VMWare 等其他虚拟化系统实现了完全的虚拟化(它们不必修改使用中的操作系统),但它们仍需要进行实时的机器代码翻译,这会影响性能。 </p> <p>由于 Xen 需要修改操作系统,所以您不能直接让当前的 Linux 内核在 Xen 系统管理程序中运行,除非它已经移植到了 Xen 架构。不过,如果当前系统可以使用新的已经移植到 Xen 架构的 Linux 内核,那么您就可以不加修改地运行现有的系统。 </p> <p><a name="IDAWSGKB"><b>图 1. 简单的 Xen 架构</b></a><br /><img height="190" alt="简单的 Xen 架构" src="http://www-128.ibm.com/developerworks/cn/linux/l-xen/figure1.gif" width="313" /></p> <p><a name="IDACTGKB">获得 Xen</a><br />可以从 Xen 的项目主页上获得它的源代码(请参阅 <a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/#Resources">参考资料</a> 部分的链接),但是,如果已经在使用某个 Linux 发行版本,那么您或许能够通过软件包升级或者安装来获得 Xen。这些主流发行版本都包含了 Xen: </p> <ul> <li><a href="http://fedora.redhat.com/projects/virtualization/">Fedora Core</a> </li> <li><a href="http://www.suse.de/~garloff/linux/xen/">SUSE Linux</a> </li> <li><a href="http://packages.debian.org/unstable/misc/xen">Debian</a> </li> <li>可以获得位于 <a href="http://bugs.gentoo.org/show_bug.cgi?id=70161">Gentoo's bugzilla</a> 的实验用的 e-builds。</li> </ul> <p>检查您的发行版本 —— 如果它不在这个列表中,那么您可能只能直接使用源代码。除了安装过程特定于发行版本之外,在任何发行版本上,Xen 中的所有工作都是相同的。 </p> <p><a name="IDABUGKB">使用 Fedora Core</a><br />我有一个可以使用的 <a href="http://fedora.redhat.com/participate/terminology.html#core">Fedora Core 3</a> 安装,为了保持本文的简洁,我将讨论如何在 Fedora Core 上安装和运行系统。 </p> <p>尽管软件包只是在最近才开始进行开发,但 Fedora 已经为大量 Xen 用户所使用。由于有很多人尝试在 Fedora 上使用 Xen,所以您可能成功地获得大量的在线帮助。 </p> <p><a name="installing_xen">安装 Xen</a><br />为了帮助您迅速上手和使用,本节着重指出了 <a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/#Resources">参考资料</a> 部分中 <i>Quick Start Guide</i> 的要点。由于 Fedora 中正在融入 Xen 更新,所以随着时间的推移,<i>Quick Start Guide</i> 将很可能会发生变化,希望 wiki 会保持对这些变化的更新。 </p> <p>首先,为基础机器(base machine)进行最简化的服务器安装。这台基础机器是您的系统管理程序,将不会运行任何服务器应用程序。您将可以在运行于此机器之上的 Xen 服务器中安装所需要的软件包,所以现在不需要安装想要运行的应用程序。 </p> <p>系统开始运行后,您应该将其更新到 Fedora 的最新开发版本(称为 <i>rawhide</i>)。要完成此任务,请遍历 /etc/yum.repos.d/ 目录中的元素,将除了 fedora-devel.repo 以外的所有元素都改为 <code>enabled=0</code>;将 fedora-devel.repo 改为 <code>enabled=1</code>。 </p> <p>建立了 yum 储存库(repository)后,需要将机器更新到 rawhide,以便您可以开始使用最新发布的 Xen。 </p> <p><a name="IDAPVGKB"><b>清单 1. 将 FC3 更新到 rawhide 并安装 Xen 软件包</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code><br />yum update<br /><br />yum install xen kernel-xen0 kernel-xenU<br /></code></pre></td> </tr> </tbody> </table> </p> <p>然后,创建一个将要使用的虚拟文件系统。 </p> <p><a name="IDAZVGKB"><b>清单 2. 格式化并建立 Xen 服务器文件系统</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code><br />mkdir -p /xen/base<br />dd if=/dev/zero of=/root/base.img bs=1M count=1 seek=1024<br />mkfs.ext3 /root/base.img<br />mount -o loop /root/base.img /xen/base<br /></code></pre></td> </tr> </tbody> </table> </p> <p>格式化并挂载 Xen 服务器文件系统之后,下一个步骤是安装必要的软件包,以便在这些软件包上运行某些程序。为了在 Xen 服务器上运行一个 Web 服务器,您应该安装一组 Web-server 软件包。(警告: <i>这将需要一段时间!您可以先</i>运行 yum,然后出去散散步。) </p> <p><a name="IDAGWGKB"><b>清单 3. 安装 Xen 服务器软件包</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code><br />yum --installroot=/xen/base -y groupinstall web-server \<br /> --enablerepo=base --disablerepo=development<br /></code></pre></td> </tr> </tbody> </table> </p> <p>(现在应该去散步了。) </p> <p>现在已经安装了所有需要的软件包,不过您应该去查看一个简单的 fstab 文件,这个文件会告知 Xen 服务器它们将要获得根(root)设备 sda1,将该设备作为根。根设备实际上是来自系统管理程序的一个虚拟的设备,但您的服务器不会知道这一点。 </p> <p><a name="IDARWGKB"><b>清单 4. Xen 服务器 fstab 文件</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code><br />/dev/sda1 / ext3 defaults 1 1<br />none /dev/pts devpts  gid=5,mode=620 0 0<br />none                    /dev/shm        tmpfs   defaults 0 0<br />none                    /proc           proc    defaults 0 0<br />none                    /sys            sysfs   defaults 0 0<br /></code></pre></td> </tr> </tbody> </table> </p> <p>将这个文件写入 /xen/base/etc/fstab。如果不是标准的 Fedora 安装,那么不会为您创建任何 fstab。预计 Fedora 的未来版本会包含处理此问题的工具。 </p> <p>最后,为了让系统正确地运行,您应该做一些处理。目前,Xen 使用 <code>initrd</code> 时仍然存在问题,所以,如果想要启动系统,则需要为自己创建一些设备代码。然后,为了让程序平稳运行,删除 TLS 程序库会有所帮助,因为目前它们与 Xen 冲突很严重。完成这个步骤后,可以卸载这个文件系统。 </p> <p><a name="IDABXGKB"><b>清单 5. 为开始运行所做的最后的处理</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code><br />for i in console null zero ; do MAKEDEV -d /xen/base/dev -x $i ; done<br /><br />mv /lib/tls /lib/tls.disabled<br />mv /xen/base/lib/tls /xeb/base/lib/tls.disabled<br /><br />umount /xen/base/<br /></code></pre></td> </tr> </tbody> </table> </p> <p><a name="running_xen">运行 Xen</a><br />既然已经细心地手工建立起了客户系统,那么您现在就可以真正重新启动机器,开始使用 Xen 内核。您可能将会看到比平时多得多的打印输出,并且您还会看到关于 TLS 程序库(上一节中您删除的那个会出问题的程序库)的可怕的消息。 </p> <p>Xen 要求为运行的每个服务器准备配置文件。尽管您可以为所有服务器创建一个惟一的动态配置文件,但我还是建议您创建两个静态的配置文件,各用一个。如您所见,磁盘标签告诉服务器您的文件映像是 sda1 设备。也指定了您所使用的 xenU 内核,以及服务器客户将要获得的内存。 </p> <p><a name="IDASXGKB"><b>清单 6. Xen 服务器配置文件</b></a><br /> <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"> <tbody> <tr> <td> <pre><code>/etc/xen/base<br />kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"<br />memory = 64<br />name = "BaseServer"<br />nics = 1<br />disk = ['file:/root/base.img,sda1,w']<br />root = "/dev/sda1 ro"<br /><br />/etc/xen/test<br />kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"<br />memory = 64<br />name = "TestServer"<br />nics = 1<br />disk = ['file:/root/test.img,sda1,w']<br />root = "/dev/sda1 ro"<br /></code></pre></td> </tr> </tbody> </table> </p> <p>要启动并运行服务器,首先要使用命令 <code>xend start</code> 启动 Xen 服务,然后使用命令 <code>xm create base</code> 通过基本配置文件创建 BaseServer。通过这些步骤,您将进入 Xen 客户系统中,可以看到该系统已经启动起来。不论何时,如果您想跳出客户系统控制台,那么按下 <b>Ctrl-]</b> 组合键就可以直接返回到系统管理程序控制台。 </p> <p><a name="using_xen">使用 Xen</a><br />现在您已经用了一些时间来编辑配置,并建立了运行两个 Xen 服务器的系统。所有这些艰苦的工作完成后,接下来做什么? </p> <p>现在您拥有了一个系统的两个副本,它们运行相同内核,在同一台机器上被虚拟化。如果 BaseServer 代表的是您希望正常运行 Web 服务的稳定环境,那么 TestServer 代表的就是 Fedora rawhide 所提供的最新软件更新。您可以随意保持对 TestServer 系统的升级,尝试所有新版本的软件更新 —— 当您认为它足够稳定时,可以将 TestServer 作为 BaseServer 来运行。 </p> <p><a name="base_server">设置 BaseServer</a><br />BaseServer 运行时,是修改将要运行的 httpd 服务的配置的好时机。您应该将 ssl.conf 文件移出 /etc/httpd/conf.d/ 目录,以此来停用 ssl;否则,您将需要为服务器生成证书。另外,可能需要向系统添加一个 apache 用户。 </p> <p>Xen 系统管理程序已经自动提供了一个可以使用的虚拟网络设备。如果您可以在这个设备上运行 dhcp,那么只需要执行 <code>dhclient eth0</code>,BaseServer 就会获得 IP 地址。 </p> <p><a name="test_server">设置 TestServer</a><br />设置了 BaseServer 的配置之后,在 BaseServer 控制台中执行 <code>poweroff</code> 以关闭该实例。如果您已经从 BaseServer 注销,那么可以使用 <code>xm console BaseServer</code> 重新进入它。 </p> <p>现在,通过 <code>cp /root/base.img /root/test.img</code> 复制基础映像,以便获得同一文件系统的副本。当运行 <code>xm create -c test</code> 时,它会运行与 BaseServer 相同的服务器,但是它的名称是 TestServer。登录到 TestServer,然后像您在 <a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/#installing_xen">安装 Xen</a> 那一节中所做的那样启用 rawhide 支持,然后运行 <code>yum update</code>。 </p> <p>TestServer 实例拥有与 BaseServer 完全相同的配置,但是您已经升级到了 Fedora rawhide 所必须具备的最新的软件包。在此,您可以查看 Web 站点是否仍然可用。 </p> <p><a name="IDAC0T3">关于 Xen 还有哪些内容?</a><br />我希望这些简短的说明和简单的示例能够帮助您安装和运行 Xen,这样您就可以尝试使用它。为了让您迅速地熟悉 Xen,我没有介绍如何利用 LVM 与快照(snapshots)等功能,也没有介绍如何完成 Xen 服务器从一台机器到另一台机器的网络迁移。但是,既然您已经了解了 Xen 所具备的一些优势,请浏览下面的 <a href="http://www-128.ibm.com/developerworks/cn/linux/l-xen/#resources">参考资料</a>,学习一些如何使用它的更为多变的技巧。 </p> <p><a name="resources">参考资料 </a></p> <ul> <li>您可以参阅本文在 developerWorks 全球站点上的 <a href="http://www.ibm.com/developerworks/linux/library/l-xen/">英文原文</a>。</p> </li> <li>在 <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen Project Page</a> 可以找到邮件列表以及对 Xen 提供支持的其他渠道。 </li> <li>“<a href="http://www.cl.cam.ac.uk/netos/papers/2003-xensosp.pdf">Xen and the Art of Virtualization</a>” 是一篇详细的研究论文,描述了 Xen 系统管理程序的架构。这篇文章以及 <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/architecture.html">关于 Xen 架构的其他论文</a> 是确切理解 Xen 如何工作的无价之宝。 </li> <li>“<a href="http://www.clarkson.edu/class/cs644/xen/files/repeatedxen-usenix04.pdf"> Xen and the Art of Repeated Research</a>”是 XenoLinux(运行于 Xen 虚拟机中的 Linux)与本地 Linux 以及与 IBM eServer? zSeries? 主机上的其他虚拟化工具的性能比较。它对结果的一致性重复进行初期的性能分析。 </li> <li>请参阅 <a href="http://fedora.redhat.com/projects/virtualization">Xen in Fedora Core Project</a>,以获得项目更新信息。 </li> <li>要安装使用 Xen 并共享您的经验,请使用来自 <a href="http://www.fedoraproject.org/">fedoraproject 站点</a> 的 <a href="http://www.fedoraproject.org/wiki/FedoraXenQuickstart">wiki page on the Xen Quick Start Guide for Fedora</a>。 </li> <li><a href="http://fedoraproject.org/fudcon/">FUDCon: Fedora User and Developer Conference</a> 对所有人开放,最近在第一次会议上引入了关于 Xen 的话题。 </li> <li>获得支持 Xen 的这些发行版本:<a href="http://www.suse.de/~garloff/linux/xen/">SUSE Linux</a>、 <a href="http://packages.debian.org/unstable/misc/xen">Debian</a> 和 <a href="http://bugs.gentoo.org/show_bug.cgi?id=70161">Gentoo's bugzilla</a>(实验用的 e-builds)。 </li> <li>“<a href="http://www.redbooks.ibm.com/abstracts/REDP9115.html?Open">Virtualization and the On Demand Business</a>” (IBM Redpaper,2004 年 8 月)描述了组织可以如何通过虚拟化技术让自己能够从 IT 基础设施获得更多商业价值和更高灵活性。 </li> <li>“<a href="http://www.ibm.com/developerworks/linux/library/ac-ve/">Autonomic features of the IBM Virtualization Engine</a>”(developerWorks,2004 年 9 月)介绍了标题中的引擎,它是一套系统服务和技术,能够以集成的系统而不是以单个组件的方式来管理资源、服务器、存储器和网络。 </li> <li>“<a href="http://www-128.ibm.com/developerworks/websphere/library/techarticles/hvws/virtualization.html">Architecture for Virtualization with WebSphere Application Server, Version 5</a>” 阐述了如何使用 WebSphere? Application Server 构建虚拟化资源。 </li> <li>“<a href="http://www.redbooks.ibm.com/abstracts/TIPS0477.html?Open">Advanced Virtualization Features on p5 Servers</a>”(IBM Redbooks Technote,2005 年 2 月)阐述了如何根据您的需要在 IBM eServer pSeries? 5 服务器上选择最佳的虚拟化配置。 </li> <li><a href="http://www.ibm.com/developerworks/ondemand/virtualized.html">Developer resources for an on demand world</a> 对关于虚拟化的参考资料进行了综述。 </li> <li>在 <a href="http://www-128.ibm.com/developerworks/cn/linux/">developerWorks Linux 专区</a> 可以找到更多为 Linux 开发者准备的参考资料。 </li> <li>通过参与 <a href="http://www.ibm.com/developerworks/blogs/">developerWorks blogs</a> 加入 developerWorks 社区。 </li> <li>在 Developer Bookstore Linux 区订购 <a href="http://devworks.krcinfo.com/WebForms/ProductList.aspx?Search=Category&amp;id=300&amp;parent=Linux">打折出售的 Linux 书籍</a>。 </li> <li><a href="http://www.ibm.com/developerworks/offers/sek/?S_TACT=105AGX03">订购免费的 SEK for Linux</a>,这套 DVD(两张),包含了来自 DB2?、Lotus?、Rational?、 Tivoli? 和 WebSphere? 的最新的用于 Linux 的 IBM 试用软件。 </li> <li>使用可以直接从 developerWorks 下载的 <a href="http://www.ibm.com/developerworks/downloads/?S_TACT=105AGX03">IBM 试用软件</a> 来改进您的下一个 Linux 开发项目。</li> </ul> <p /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><a name="author1"></a>关于作者<br />Bryan Clark 是 Red Hat 的 Desktop Group 的拥趸者。Bryan 还是很多关于 GNOME Desktop 的项目的成员,他在设法尽可能主动地去接管所有的桌面。Bryan 以及他来自 Clarkson Open Source Institute 的同事们于去年发表了一篇对 Xen 性能统计进行重新评价的研究论文。他当前居住在马萨诸塞州的 Cambridge,喜欢即兴到其他地方去旅行。您可以通过 <a href="mailto:bclark@redhat.com">bclark@redhat.com</a> 与 Bryan 联系。</td> </tr> </tbody> </table> </p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics