我们公司最近准备在外地的灾难恢复中心进行一次业务连贯性测试。在整个测试中,我们需要模拟一个场景,在这里,我们失去了整个工作环境,这当然包括我们所有的服务器,我们的任务是在72小时内恢复整个业务功能。几个月的精心安排终于换来一次成功的测试。尽管在这次测试中,我们遇到了许多的困难和挑战,但是最让人映象深刻的还是当我们准备去恢复装有Exchange Server 2003 SP2的active/passive群集时,发现竟然没有专为群集准备的硬件。经过短暂的思考,我决定通过在虚拟环境中搭建群集再恢复Exchange数据来解决这个难题。
失败的尝试
作为公司的Windows & Exchange管理员,我的工作就是把恢复每台服务器的过程文档化。我曾经无数次成功地使用带有/disasterrecovery参数的Exchange安装命令来恢复独立的Exchange服务器,所以我原本认为同样的方法也适用于恢复Exchange群集环境。现在看来,这是多么大的一个错误。
在真正开始测试前的几周,为了避免任何遗漏,我决定测试一下我的计划。我首先在测试环境中恢复了活动目录,然后准备使用带有/disasterrecovery参数的命令来安装Exchange。当安装仅仅进行了短短几秒钟后,我就看到了操作成功的提示,您可以想象我当时有多吃惊。很明显,一定有什么地方弄错了。我快速浏览了一下安装文件setup.log,发现如图1所示的报错。我立刻意识到我遇到麻烦了。我的计划有个大漏洞,简单来说,就是不能在独立服务器上恢复Exchange群集环境中的邮箱存储。
图1:在独立服务器上恢复Exchange群集时的错误信息
我的第一感觉是去创建一个只包含单一节点的群集环境。如果我有第二个SCSI控制器,群集服务就应当认为我正在使用共享磁盘。不幸的是,在我们外地的灾难恢复中心,所有的服务器都只有一块SCSI卡。无论我如何尝试,除了本地仲裁(local quorum),我无法使群集服务创建出任何其它的组件。绝望之后,我尝试使用本地仲裁来安装Exchange服务器。太“幸运”了,我又遇到了另一个常见的报错——Microsoft Windows Server 2003使用本地仲裁资源时不启动微软分布式事务处理协调器(MSDTC)服务。(更多信息,请参阅以下文章:FIX:在安装Windows Server2003带有SP1后:MSDTC服务未启动独立群集中http://support.microsoft.com/kb/899426/zh-cn。)
现在,我迷茫了。我没有能够让我继续进行下去所需的硬件,在使用本地仲裁安装Exchange服务器时又遇到了一个我没有时间来解决的问题。
VMware可以拯救你!
我需要寻找一个快速的解决方案。我们的灾难恢复测试只剩下几天了,不去恢复中央邮件系统是不现实的。所以我不得不去寻找一个恢复Exchange的办法。
我的第一个想法是使用VMware在虚拟机(virtual machine,VM)上来搭建和运行Exchange群集(你也可以使用微软的Microsoft Virtual Server而不是VMware来搭建环境)。在2006年2月,VMware把它的GSX服务器改名为VMware服务器,并且供用户在官方网站上免费下载(http://www.vmware.com/products/server)。我原来曾经在VMware产品上成功搭建过Exchange群集。如果遇到任何问题,我知道我可以在Mark Minasi的读者论坛上提出问题并寻求帮助,我自己也长期活跃在这个论坛。这个论坛的网址是http://www.minasi.com/forum。
因为我几乎每天都要用到VMware产品做测试,所以我拥有所有的Windows操作系统的镜像文件。当建立好一个Windows镜像文件的时候,Windows系统准备工具会生成一个唯一的SID。当复制完镜像文件以后,重启机器,一个新的SID就会在简单安装的过程中被生成了。这是微软支持的唯一一种复制或者“克隆”Windows机器的方法,它工作起来非常有效。有了这些操作系统的镜像文件意味着您不用再从VM的平台上重新安装操作系统,这样可以帮我节省几个小时的时间。现在我只需要把虚拟机的镜像文件拷贝到一个新的文件夹,就可以开始运行了。开始的时候,系统会运行一个安装向导,包括输入用户名、服务器名、IP地址和授权码。
在复制完Windows Server 2003企业版到一个新的文件夹后,我就开始配置这台服务器,使它支持微软的群集服务。在这里我们最需要注意的一件事情是如何配置硬盘。作为灾难恢复服务器,它必须和工作环境中的服务器使用一样的配置。举个例子,我们的Exchange文件是安装在D盘的(D:Program FilesExchsrvr),而不是C盘。Exchange信息存储(Information Store)和日志文件(transaction logs)也被放置在其它的磁盘。这些存储路径信息都是被保存在活动目录中的,所以遗失任何一个重要的细节都会导致整个安装的失败。
要让群集服务认为服务器正在使用共享磁盘,我必须设置群集磁盘使用第二个SCSI控制器(VMware服务器默认带有四个SCSI控制器)。要这样做,当创建虚拟磁盘的时候,我们需要在添加硬件向导中选择高级选项。所以尽管被配置了C和D盘符的磁盘已经使用了SCSI ID 0:0,我们还需要把仲裁磁盘、日志文件和信息存储分别放置在SCSI ID 1:0、1:1和1:2上,如图2所示。忽视这重要的一步将会导致群集安装使用本地仲裁。
图2:在添加硬件向导中设置SCSI控制器
然后我启动服务器,登录,格式化硬盘,这里要特别注意使用正确的盘符,并且确保磁盘有足够的空间。再次强调一下,这里的盘符必须和工作环境中的Exchange服务器一致。如果不是,Exchange在群集上的安装也将会失败。在完成了服务器的安装之后,我们需要对现在的虚拟机的镜像文件作一个快照,这主要是考虑到一旦出现任何问题,我们还需要回过头来重新开始。(对虚拟机镜像文件的快照可以备份所有VM的磁盘,VM内存的内容以及VM的设置。)
现在我已经拥有了我所需要的(虚拟的)硬件了,是时候在群集上配置Exchange了。和在Windows 2000上安装群集相比,Windows Server 2003有了明显的改进。现在,不需要去使用添加/删除程序来安装群集服务,Windows Server 2003企业版默认安装了群集服务并可以随时使用。我给我的群集取名为“备份”,并给它配置了合适的IP地址。这些IP地址不需要一定和工作环境的配置一致。
群集配置向导将会选择Q盘作为仲裁。如果它选择了一个本地仲裁而不是SCSI磁盘,这就意味着配置上有问题。检查您硬盘的SCSI设定,做一些适当的修改,然后再尝试一遍。如图3所示,向导还会提示您这个节点上只有一块网卡,您可以忽略这条信息,因为我们不需要它和第二台服务器建立连接。
图3:群集配置向导警告信息
如果我是在工作环境中安装群集,现在是时候加入第二个节点并且在两台服务器之间移动资源以确保群集工作正常。但是,现在不需要,因为它仅仅是为了灾难恢复测试。我只是需要去确保我能够创建原来的工作环境并且恢复数据。并不需要添加第二个节点。
在虚拟群集上安装Exchange
我基本上已经准备就绪可以开始Exchange的安装了,但是在这之前我们还需要安装一些必需的组件:ASP.NET、Microsoft IIS 6.0、Network News Transfer Protocol (NNTP)、SMTP和MSDTC群集资源。
如果您为群集配置了Microsoft SQL服务器,您知道MSDTC是其中非常重要的组件,它依赖于一些其它的资源。图4是MSDTC群集资源的属性页,在这里您可以看见它依赖哪些资源。但是,在Exchange中,您可以在这里配置MSDTC依赖于群集的IP地址、群集名和仲裁磁盘。解释为什么可以这样做的原因超出了本篇文章的范围,但是在微软Exchange团队的官方博客文章中,您可以看到关于MSDTC资源和Exchange的深层次的解释(http://msexchangeteam.com/archive/2005/01/17/354497.aspx)。
图4:MSDTC群集资源的属性页
现在我就可以开始安装Exchange了。当我第一次安装的时候,我忘记了在工作环境中我把Exchange安装在D盘,而使用了安装程序默认的路径C:Program FilesExchsrvr。不幸的是,我并没有认识到我犯了这个错误,直到如图5所示在群集管理工具(我将稍后解释)创建Exchange System Attendant群集资源的时候。这个例子告诉我们为什么在开始的时候为虚拟机的镜像文件创建一个快照是多么好的一个主意。通过使用快照备份,当您遇到一个不可挽回的错误时,可以不用从头再搭建Windows平台。我在第二次安装Exchange的时候,记得把Exchange安装在一个正确的路径。(小提示:记住您不一定要运行Forestprep和Domainprep。如果您是使用备份来恢复活动目录,您的AD已经知道了您的Exchange安装的所有信息。您只需要把服务器激活。)
图5:在群集管理工具中创建Exchange System Attendant群集资源
在Exchange安装成功之后,为了模仿在工作环境中的Exchange群集,我创建了两个群集资源,IP地址和网络名称。它们和我的用户在Outlook配置文件里的信息一致。在这里我们也可以使用不同的IP地址,但是考虑到网络名称是存储在活动目录中,它必须和工作环境中的群集一致。我发现如果使用了不同的IP地址,一些Exchange服务,像SMTP和POP,要不就不能启动,要不就停止运行。如果您也遇到了这种情况,您可以按照下面这篇文章来解决问题:在Exchange群集上的IP地址更改后会记录事件(http://support.microsoft.com/kb/315691/zh-cn)。
请务必记住工作环境中的Exchange群集是如何配置的,因为你知道在灾难恢复的过程中要创建许多资源时要用到这些信息。幸运的是,Exchange System Attendant会为您创建好这些资源。要访问Exchange System Attendant,您可以打开群集管理,点击文件*新建*资源,然后从下拉菜单中选择Exchange System Attendant。我按照剩余的向导,确定选择了IP地址、网络名称、物理磁盘,最后它们出现在依赖关系列表中。
安装Service Pack然后恢复数据
在我恢复数据之前的最后一步是去安装Exchange 2003 SP2。很重要的一点是在我们尝试去装入存储(mount)Exchange数据库时,需要保证在灾难恢复环境和工作环境中的Exchange服务器使用的是同样版本的service pack。这样做是因为随着service pack版本的不同,数据库中每一页的物理结构也可能会不同。尝试在一台没有安装service pack的机器上恢复来自于Exchange 2003 SP2的数据库是不可行的。
我下载了Exchange 2003 SP2,并尝试运行update.exe来安装它。但是却看见了如图6所示的报错。我的第一感觉是我需要搭建第二个群集节点。然后我想到了,“我是不是可以先停用群集,然后再安装service pack?”于是我先停用了第一个节点,正如我预料的,我可以成功地运行update.exe来安装SP2了。
图6:在只有一个节点的Exchange群集上安装SP2
在安装完成之后,我重新启动这台VM虚拟机,打开群集管理器,通过右键点击Exchange资源,点击升级Exchange虚拟服务器,来升级Exchange。现在我的灾难恢复环境就搭建成功了,它和我的工作环境一模一样。然后我们就可以运行虚拟机,来开始恢复数据文件了。
这个故事最后有一个完美的结局:我们的灾难恢复测试进行的非常顺利,没有遇到任何问题,管理层现在也很开心,他们知道我们有能力恢复我们的数据中心。在这个例子里所展示的只是这些年来虚拟技术带给我的许多帮助中的一个。如果您还没有使用过虚拟技术,我建议您尝试着去使用它,像软件测试、服务器整合、延长操作系统的生命周期,或者像我们公司一样,用于灾难恢复。现在,不论是微软还是VMware,他们都提供虚拟服务器产品的免费下载,您至少有个借口来试试这个技术了。