IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Web development | Open source  >

使用开源软件设计、开发和部署协作型 Web 站点,第 12 部分: 主机托管和部署

理解虚拟化技术的好处

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 中级

Alister Lewis-Bowen, 高级软件工程师, IBM 
Stephen Evanchik, 软件工程师, IBM 
Louis Weitzman, 高级软件工程师, IBM 

2007 年 9 月 14 日

在这个文章系列中,在 IBM® Internet Technology Group 团队的带领下使用一套可免费获得的软件为虚构的 International Business Council(IBC)公司设计、开发和部署一个外部网 Web 站点。在本文中,我们将研究使用虚拟化技术部署 Drupal 站点的相关问题。介绍团队为什么选择使用虚拟化、考虑了哪些技术以及最终生产环境的设置。

简介

到达 Drupal 站点开发的最后阶段时,就要开始考虑如何部署它。在我们的示例中,International Business Council(IBC)Web 站点支持几百个用户,他们在全年定期访问内容。在业务会议期间,使用量会增加,有许多并发用户同时访问内容并下载大文件,而且站点操作人员会创建新内容。这种使用模式带来了几个限制,在部署最终的 IBC Web 站点时必须解决这些问题。

您的 Web 站点有自己的使用模式,您必须了解这种使用模式,并选择合适的部署环境。

有两个问题尤其重要:会议期间集中的使用量和大文件传输。它们要求部署环境具有很大的带宽和通常为协作定位环境保留的专用系统资源(内存、CPU 周期和硬盘空间)。即使这个要求不算复杂(和昂贵),我们也不希望拥有 IBC Web 使用的任何硬件。我们已经在时间限制下完成了开发,无法再花时间对硬件进行升级、故障调试或监视。

对 Web 站点进行主机托管基本上有三种方法(以及这些方法的变体):简单的共享主机托管、物理服务器的协作定位虚拟化。每种方法在成本和管理的复杂性方面各有优缺点。通过明确地了解使用模式和时间限制,我们决定使用虚拟化对我们的 Drupal 环境进行主机托管。这使我们能够在本地构建和测试 Drupal 环境,并轻松地将整个虚拟机部署到生产平台上。

本文讨论我们为什么选择使用虚拟化、我们考虑了哪些技术以及最终生产环境的设置。

本文中的信息不应该解释为严格的开发规则,而是应该作为为 Web 站点选择主机托管方法时的起点。

主机托管方法

在搜索引擎中输入 Web 托管,就可以找到许多可以托管 Drupal 站点的地方。如果预期的站点通信量非常低或非常高,那么选择提供商就比较简单了。如果预期的站点通信量非常低,那么几乎任何 Web 主机托管提供商都能够满足 Drupal 的需要。如果预期的站点通信量非常高,那么可接受的 Web 主机托管提供商数量就会大大减少,只有最大型的提供商才能满足要求。

但是,如果站点的通信量处于这两个极端情况之间,问题就比较复杂了。我们不打算推荐任何主机托管提供商,但是建议您仔细评估站点的预期通信量。选择的 Web 主机托管提供商应该支持您的初始站点通信量,而且能够在不超过预算的情况下提供足以支持站点增长的资源。对于 IBC 站点,不需要使用外部 Web 主机托管提供商。我们已经确定了站点的需求,本文后面将详细描述这些需求。

主机托管的三种基本方法是:

共享主机托管(Shared hosting)
这是适合小型 Drupal Web 站点的低成本解决方案。Web 站点驻留在一个与其他 Web 站点共享的服务器上。这意味着您的 Web 站点总是要与其他站点竞争资源,比如内存和 CPU 时间。

协作定位(Co-location)
物理服务器的协作定位往往比较昂贵,而且要求您管理和维护物理硬件。一些提供商允许客户 “租用” 完整的物理服务器,这可以减轻物理硬件维护的负担。协作定位可以提供专用资源,并在 Web 站点部署方式方面提供很高的灵活性。

对于这种方法,要做一些权衡。例如,如果需要物理硬件冗余,就需要购买或租用两台机器,并正确地配置它们。简单地说,如果您有时间维护从物理硬件到软件的完整环境,那么协作定位是一个好选择。

虚拟化(Virtualization)
这是一种对 Web 站点进行主机托管的新方法。通过使用虚拟化,可以获得协作定位的许多好处,比如专用的资源,同时无需承担管理物理硬件的负担。

虚拟化是将物理计算机资源抽象成等效的虚拟资源。例如,可以使用虚拟化将一台物理服务器划分成多个服务器。这些划分出的部分称为虚拟机(virtual machine)。从用户或管理员的角度来看,虚拟机的表现就像物理机器一样。与物理机器一样,虚拟机也是相互隔离的。如果一个虚拟机上的软件发生了故障,它不会影响同一物理机器上其他虚拟机的执行。图 1 给出物理主机和虚拟机的典型组合方式。


图 1. 带虚拟机的物理机器
带虚拟机的物理机器

使用虚拟化技术进行开发和部署有许多优点。最吸引我们的优点是:

  • 对操作系统的控制能力
  • 单一的分布单元
  • 资源的获得和升级

因为我们实际上要创建一个完整的计算机系统,所以可以选择安装一种熟悉的操作系统。我们选择 Red Hat Enterprise Linux® 4 来运行 IBC Web 站点。我们熟悉运行 IBC Web 站点的操作系统,所以可以将精力集中于 Drupal 的设置和自己的定制代码,而不需要为不熟悉的操作系统特性操心。

在虚拟机中安装操作系统和 IBC 站点之后,就获得了一个干净的软件包,包括它的所有必备软件。虚拟机的物理形式只是一个大文件。虚拟机本质上就像一个只有三个按钮的设备:启动/关闭、暂停和复位。因此非常容易将 IBC 站点分发给主机托管环境和其他开发人员,或者进行现场演示。

最后,我们还不确定支持 IBC 站点需要多少内存或硬盘空间。我们知道大致的范围,但是不清楚精确的数字。我们不希望购买用不着的硬件,也不希望购买能力太低的硬件,导致在站点使用量增加之后不得不进行升级。通过使用虚拟机,我们可以对初始资源分配进行合理的估计;如果发现估计值不准确,只需敲几下键盘就可以纠正它。

有许多可用的虚拟化平台。其中一些是开放源码的,一些是商业产品,但是可以免费下载和使用,其他平台需要购买商业许可证。我们考虑了两种平台,Xen 和 VMware。

Xen

Xen 是一种开放源码的虚拟化平台,最初是在剑桥大学计算机实验室开发的。Xen 的速度很快而且是完全免费的。与 Linux 内核的开发情况相似,它由一个大型的知识丰富的开放源码社区进行积极的开发。我们对 Xen 的潜力感到非常兴奋,但是还不能使用它部署 IBC 站点,我们对此感到失望。

我们不使用 Xen 是因为它的管理工具不够健壮和出色。我们喜欢能够编辑虚拟机描述符文件并通过 Linux 机器的命令行进行操作,但是这些特性对于我们的目标并不太重要,我们的目标是尽可能节省时间,这样就能够集中精力开发和测试 IBC 站点。所以,我们选择了来自 VMware 的一种更完整更精致的虚拟化平台。

VMware Server

VMware 是一种免费的商业平台,它提供供任何人(从开发人员到数据中心管理员)使用的几种虚拟化产品,我们使用两种来自 VMware 的产品:

  • VMware Server —— 用来构建和测试虚拟机,产生的虚拟机最终将部署到生产环境中。VMware Server 是一种来自 VMware 的免费产品,它非常适合在开发人员的工作站上构建和执行虚拟机。它具有朴素的容易使用的图形界面。

  • VMware ESX Server —— 用来在生产环境中部署 IBC 虚拟机。VMware ESX Server 提供了业务关键型 Web 站点所需的性能、可伸缩性和管理工具。
关于这些产品的信息,参见 参考资料





回页首


创建虚拟机

本节带领您创建一个虚拟机。

启动 VMware Server Console 程序并连接本地机器。应该会看到与 图 2 相似的窗口。


图 2. 初始 VMware Server Console
初始 VMware Server Console

点击 New Virtual Machine 图标,开始创建新的虚拟机。应该出现 图 3 所示的对话框。


图 3. New Virtual Machine Wizard 对话框
New Virtual Machine Wizard 对话框

点击 Next 进入第一步。对于这个虚拟机,不需任何特殊设置,所以可以选择 Typical 机器配置,见 图 4。Custom 配置选项允许选择高级选项,比如虚拟磁盘适配器类型。如果您是有经验的 VMware 用户,那么应该选择 Custom。点击 Next 继续。


图 4. 选择机器配置类型
选择机器配置类型

VMware Server 记录虚拟机将执行的操作系统。对于 IBC 站点,我们使用 Red Hat Enterprise Linux 4。

图 5 中,选择最匹配的操作系统。这个设置向 VMware 提供关于如何执行虚拟机的信息。点击 Next


图 5. 选择虚拟机操作系统
选择虚拟机操作系统

虚拟机的物理形式是一个大文件,所以需要为这个文件选择它在本地系统上的文件名和目录,见 图 6。点击 Next 继续。


图 6. 选择虚拟机名称和目录
选择虚拟机名称和目录

连网类型是个人喜好问题。如 图 7 所示,我们选择 network address translation(NAT),因为它允许虚拟机访问连网的资源,而不必向其他网络机器暴露它。在生产环境中部署虚拟机时,必须重复这个过程,所以可以选择您认为最合适的选项。做出选择之后点击 Next


图 7. 选择连网类型
选择连网类型

下一步是指定虚拟机用来存储数据的虚拟硬盘,见 图 8。我们选择初始大小 8 GB,因为这个数量比较小,便于管理,也不会导致过分浪费磁盘空间。

确保取消选项 Allocate disk space now。如果选中了这个选项,向生产环境转移的过程就会在虚拟机中包含格式化的磁盘空间。我们只希望转移绝对必需的数据。这个设置会降低磁盘性能。在将虚拟机部署到生产环境中时,将重新设置这个选项。点击 Next 继续。


图 8. 创建虚拟磁盘
创建虚拟磁盘

现在有了一个空的虚拟机,可以安装操作系统了,见 图 9。在安装操作系统之前,建议给虚拟机增加 256 MB 的内存,达到 512 MB。


图 9. 完成的虚拟机
完成的虚拟机

点击菜单上的 VM 并选择 Settings,见 图 10


图 10. 修改虚拟机的设置
修改虚拟机的设置

选择之后,将看到 图 11 所示的对话框。这个对话框允许修改虚拟机的所有属性。将内存增加到 512 MB 并点击 OK


图 11. 增加虚拟机的内存
增加虚拟机的内存

既然已经创建了虚拟机,就该安装操作系统了。我们选择 Red Hat Enterprise Linux 4,因为我们熟悉它;选择您熟悉的操作系统。(完整的安装过程超出了本文的讨论范围。)

一定要按照 第 3 部分第 4 部分 中的描述安装 Apache、PHP 和 MySQL,因为它们构成了 Drupal 站点的基础。如果用初始站点内容填充了 Drupal 数据库,那么应该从开发环境中导出数据库,并将它重新导入虚拟机上的数据库服务器。以下特性节省了我们的时间并简化了部署过程。

逻辑卷管理

逻辑卷管理是一个磁盘抽象层,它可以将多个物理磁盘分组成称为卷组(volume group) 的单一实体。卷组划分成一个或多个逻辑卷,文件最终驻留在逻辑卷中。图 12 显示一个使用逻辑卷管理的磁盘布局示例。


图 12. 逻辑卷管理
逻辑卷管理

物理磁盘 Disk 1 和 Disk 3 组成卷组 Main,Disk 2 和 Disk 4 组成 Data 卷组。这些卷组都可以划分成任意数量的逻辑卷,只要卷组中还有未分配的空间。逻辑卷表现得就像一般的硬盘分区,由 LV1 - LV6 表示。

如果一个卷组满了,那么可以在其中添加另一个物理磁盘,从而创建一个新的逻辑卷或者扩大现有的逻辑卷。通过使用逻辑卷管理工具,可以快速地在系统中增加磁盘容量,而不需要到处移动数据。配置好磁盘布局之后,就可以像平常一样安装操作系统。

安装基本操作系统并成功地启动它之后,使用 第 4 部分 中讨论的技术登录并配置 Apache、PHP 和 MySQL。在完成这些步骤之后,安装 VMware Tools。

VMware Tools

VMware Tools 包使虚拟机可以利用高速网络驱动程序和高级内存管理。还允许虚拟机可靠地向主机机器同步它的内部时钟。为了让 Drupal 站点有意义,底层服务器必须维护一个精确的时钟。在传统的环境中,使用 Network Time Protocol(NTP)守护进程保持内部时钟的精确性。但不幸的是,NTP 在虚拟机中会导致问题,因此有必要使用 VMware Tools。

首先,从 VM 菜单选择 Install VMware Tools,见 图 13


图 13. Install VMware Tools
Install VMware Tools 菜单项

在选择这个菜单项时,显示 图 14 所示的对话框。点击 Install 继续。


图 14. 安装 VMware Tools 之前的 Information 对话框
安装 VMware Tools 之前的 Information 对话框

作为根用户登录虚拟机,开始 VMware Tools 的安装过程。清单 1 演示使用命令行安装 VMware Tools 的过程。在运行命令 /usr/bin/vmware-config-tools.pl 时,一定要仔细查看屏幕上的说明,确保正确地配置所有组件。


清单 1. VMware Tools 安装
                
$ mount /dev/hdc /mnt
$ cd /mnt
$ rpm -ivh VMwareTools-1.0.1-29996.i386.rpm
$ /usr/bin/vmware-config-tools.pl
$ cd ~
$ umount /mnt
	

现在,已经安装了 VMware Tools 包。建议重新启动虚拟机以确保所有组件运行正常。当虚拟机重新启动之后,按照下一节的描述将 Drupal 代码部署进虚拟机中。





回页首


部署 Drupal

既然已经在虚拟机中安装了操作系统,就该将编写和测试过的代码部署进去了。本节的目标是将代码从修订控制系统有条不紊地转移到生产服务器中。最后要做的事情是让生产站点使用修订控制系统中的代码修改。还希望防止意外更新生产站点上的代码。

创建代码的快照

首先,使用 Eclipse 的 CVS 支持将版本标记(version tag) 应用到要部署的文件。版本标记将一个有意义的名称应用于存储库中每个文件的一个特定修订版本,这实际上创建开发项目的一个命名快照。即使以后修改了受这个版本标记影响的一个或多个文件,也可以使用这个有意义的标记获取 CVS 存储库中的内容。

为了应用版本标记,在 Eclipse 的 Navigator 面板中右击顶级项目条目(例如 ibc_site),并选择 Team > Tag as version,见 图 15


图 15. 在 CVS 中创建版本标记
在 CVS 中创建版本标记

点击 Tag as version 之后,显示另一个对话框。这个对话框要求您指定有意义的标记名称,见 图 16


图 16. 为 CVS 中的版本标记命名
为 CVS 中的版本标记命名

输入一个对您有意义的标记名称。对于这个站点的第一次部署,我们选用 ibc-0-1-0。点击 OK 并应用标记名称。如果需要恢复到代码的这个版本,那么可以右击项目目录并选择 Replace With > Another Branch or Version,从而用保存的版本替换现有代码。

在虚拟机上安装快照

既然在 CVS 存储库中设置了版本标记,就要在已经构建的虚拟机上部署它了。我们假设 Drupal 生产站点将驻留在 /var/www/htdocs 目录中。清单 2 显示获得源代码的 ibc-0-1-0 版本所用的命令。


清单 2. 部署 IBC 站点代码的特定版本
                
$ cd /var/www/htdocs
$ export CVS_RSH=ssh
$ cvs -d :ext:username@cvs.yourserver.com:/cvsroot/drupal checkout ibc_site -r ibc-0-1-0
	

CVS 命令 checkout 将所有源代码从 CVS 服务器下载到本地机器。以后,很容易从 CVS 存储库更新下载的代码。checkout 命令有几个控制签出过程的选项。我们使用 -r 开关选择适当的版本标记。在您熟悉 CVS 之后,可以根据部署需要试试其他开关。

在虚拟机中进行配置

既然已经将源代码签出到了虚拟机中,就可以开始配置和测试 Drupal 生产站点。在配置过程中,可以参考 第 4 部分 和 Drupal 文档。至少需要修改站点目录下的站点设置文件,最好是添加新的站点设置文件。

生产维护

在测试期间,可能会发现 bug 或其他未预料到的问题。强烈建议您不要在生产机器上编辑站点的源代码。生产虚拟机应该是存放经过彻底测试的代码的地方,不应该作为开发场所。

在本地开发工作站上进行所有修改,然后将这些修改提交给 CVS 存储库。如果觉得存储库中的修改已经让人满意,可以投入生产了,就可以使用 CVS 更新部署的代码。例如,假设您找到了一个 bug 并修复了它,现在需要将更新应用到生产环境。首先要做的是给修复 bug 之后的代码加上版本标记。我们使用标记名称 ibc-0-1-1 表示此代码是标记 ibc-0-1-0 的更新。在存储库中设置这个标记之后,在生产服务器上执行 清单 3 所示的命令。


清单 3. 将部署的代码更新到新版本
                
$ cd /var/www/htdocs
$ cvs update -Pd -r ibc-0-1-1
	

这里指定了三个选项:-P 指示更新过程删除空目录;-dcheckout 命令一样建立新目录;-r 指定标记 ibc-0-1-1 作为更新的基础。如果没有在生产服务器上对代码做任何修改,那么更新过程基本上是用新的修订版本 ibc-0-1-1 替换代码的前一个修订版本 ibc-0-1-0

在开发过程中,我们有意省略了关于使用 CVS 的大量信息。这里提到的一点儿细节只是 CVS 提供的全部功能的一小部分。您可以以这里为起点,考虑如何更好地将 CVS(或您选择的其他修订控制系统)集成进整个开发过程。





回页首


生产环境

既然已经在虚拟机中安装、配置和部署了 Drupal,就该将它部署到最终的主机托管环境了。幸运的是,我们能够访问企业虚拟化平台 VMware ESX Server。主机托管环境具有快速的互联网连接,通常处于数据中心环境中,并由专业的 IT 人员管理。我们只需向 IT 人员提供我们的虚拟机的虚拟磁盘文件和资源需求。

提出执行 IBC 站点所需的资源需求很容易;一封电子邮件就够了。传输和安装虚拟磁盘文件比较复杂,可能需要经过尝试和纠正错误的过程。

将虚拟机迁移到生产服务器

我们使用的两个 VMware 产品并未直接产生兼容的虚拟磁盘文件。另一个额外的问题是,我们预先分配了虚拟磁盘文件,这使通过网络传输文件出现问题,因为文件太大了(8 GB)。如果您按照前面的说明和 图 8 来创建虚拟机,那么就不会遇到这个问题。不幸的是,将虚拟磁盘导入 VMware ESX Server 不如我们期望的那么容易。在免费的 VMware Server 中创建的虚拟磁盘文件无法轻松地直接导入,需要一些帮助才能完成。我们不确定这是完成此任务最合适的方法,但是这种方法是有效的。

清单 4 给出为虚拟机创建的虚拟磁盘描述文件中的一行代码。在我们的示例中,虚拟磁盘描述文件名为 IBC.vmdk;您的文件名应该与虚拟机的名称相似。


清单 4. 不兼容的虚拟磁盘文件的细节
                
...
ddb.virtualHWVersion = "4"
...
	

这一行为虚拟机定义某些东西的版本,这使它与我们的 VMware ESX Server 版本不兼容。我们决定试着降低版本号,直到能够导入磁盘并进行测试。简单的修改见 清单 5


清单 5. 兼容的虚拟磁盘文件
                
...
ddb.virtualHWVersion = "3"
...
	

在进行修改之后,就能够将虚拟磁盘导入 VMware ESX Server 并完成部署过程。

存储扩展

既然已经将基本虚拟机导入最终的主机托管环境,就需要添加另一个硬盘,以便处理将上传的许多文件。由于我们使用了逻辑卷管理,这个任务很容易完成。我们请求管理 VMware ESX Server 的 IT 人员在我们的虚拟机中安装另一个 8 GB 硬盘。我们启动虚拟机,将新硬盘添加到卷组中并对它进行格式化。清单 6 给出使用的命令。


清单 6. 在卷组中添加新硬盘
                
$ pvcreate /dev/sdb
$ vgextend /dev/VolGroup00 /dev/sdb
$ lvextend -L +8GB /dev/VolGroup00/LogVol00
$ ext2online /dev/VolGroup00/LogVol00 16g
	

清单 6 中的前三个命令对逻辑卷管理系统中的新硬盘进行格式化,将它添加到卷组 VolGroup00 中,然后扩展逻辑卷 LogVol00 来使用这个新空间。逻辑卷相当于硬盘分区。最后一个命令 ext2online 在系统运行时改变 ext3 文件系统的大小。

现在,我们已经构建了包含 Drupal 系统的虚拟机,将它安装在生产环境中,增加了上传文件所需的硬盘空间。现在要检查上传的文件是否受到 Drupal 访问控制系统的保护,而不是向公众开放。访问 admin/settings URL,应该会看到与 图 17 相似的界面。将下载方法设置为 Private,并将文件系统路径设置为不在目录 /var/www/htdocs 中的位置。


图 17. 为文件配置受保护下载
为文件配置受保护下载




回页首


结束语

在本文中,您学习了如何以及为什么使用虚拟化技术部署 Drupal 站点。我们通过充分了解用户的访问模式确定了部署需求,同时意识到不能花时间去管理物理硬件。对于部署 Drupal 站点,没有放之四海皆准的方法。我们选择虚拟化是因为它符合我们的需要,这种方法最终获得了成功。

请继续关注下一篇文章,我们将讨论如何使用 Eclipse IDE 开发 Drupal Web 站点。



参考资料

学习

获得产品和技术
  • 下载 IBM 产品评估版,试用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

讨论


作者简介

Alister's photo

Alister Lewis-Bowen 是 IBM 的 Internet Technology Group 的高级软件工程师。他从 1993 年开始作为 IBM 英国职员从事互联网和 Web 技术方面的工作。Alister 后来到美国为 IBM 赞助的体育活动的 Web 站点工作,之后成为 ibm.com 的高级网管。他当前正在帮助创建语义 Web 原型。可以通过 alister@us.ibm.com 联系 Alister。


Stephen's photo

Stephen Evanchik 是 IBM 的 Internet Technology Group 的软件工程师。他是许多开放源码软件项目的代码贡献者,其中最著名的是 Linux 内核中的 IBM TrackPoint 驱动程序。Stephen 当前从事语义 Web 技术。可以通过 evanchik@us.ibm.com 联系 Stephen。


Louie's photo

Louis Weitzman 是 IBM 的 Internet Technology Group 的高级软件工程师。他从事设计和计算已经有 30 年了。他曾经帮助开发 ibm.com 使用的基于 XML 片段的内容管理系统,当前正在从事将设计过程融入新项目的工作。可以通过 louisw@us.ibm.com 联系 Louis。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款