如果运行VMware ESX服务器的物理服务器出现故障的话,将会有什么样的后果?如果没有及时的故障备份选择,会是非常麻烦的事情。不过已经有办法来应对这个糟糕的问题,并且还不需要购买任何硬件,仅仅需要一个冗余备份虚拟机文件服务器。
在本系列文章的***部分,虚拟化专家Harley Stagner曾经介绍了使用客体虚拟机内iSCSI挂载存储设备设置一台文件服务器虚拟机。目前通用的方法是如果服务器出现故障,就把iSCSI存储设备挂载在另外一台物理服务器上,但这样做需要驱动的重新匹配,并且给用户带来更多的宕机时间。然而由于文件服务器是一台虚拟机,这将能够在很短的宕机时间之后启动另外一台ESX服务器。由于在两台ESX服务器之间没有共享存储,维持可用性唯一行得通的方法就是在两台ESX服务器都有文件服务器客体虚拟机的拷贝。这两台服务器需要在虚拟机有任何改变都能够及时保持同步。因为只有虚拟机驱动是系统卷,所以大概在打包之后需要做出一点更改。
用户在打包之后大概需要每个月手动备份一次虚拟机文件。实践证明***在文件备份之前关闭虚拟机,对用户来讲这就是宕机时间,对管理员来讲应该只是某个凌晨早起起床的事情。本文中用到的解决方案是在目标虚拟机持续运行的情况下,使用VMware Converter 3.0.1企业版负责调度从目标虚拟机到另外一台ESX服务器新位置的转换过程,所以该解决方案受到宕机时间约束。
在VMware Converter 3.0.1企业版中,用户可以使用p2vtool.exe工具,该工具是VMware Converter 3.0.1的命令行接口,但需要提醒的是该工具只有实验性的支持。然而我曾多次测试本文所提供的脚本程序,并没有发现问题。为了使用p2vtool.exe转换当前的测试虚拟机,需要做一些预先准备工作:
必须拥有一个源虚拟机上有管理员特权的账号;
如果希望在转换完成之后收到一份电子邮件提醒,就必须使用脚本语言,如Powershell或者VBscript;
在Windows系统(要求版本是Windows XP SP2)下安装VMware Converter 3.0.1(需要有企业版许可证);
创建一个xml文件,其中包含p2vtool.exe运行所需要的参数;
VMware Converter 3.0.1在Windows XP负责管理任务的计算机上安装完成之后,就可以开始运行脚本程序。***步是创建p2vtool.exe处理转换请求所需要的xml文件,用在这个场景中的该简单文件如下所示:
--Begin Code--
<?xml version="1.0" encoding="UTF-8" ?>
<p2v version="2.1"
xmlns="http://www.vmware.com/v2/sysimage/p2v"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.vmware.com/v2/sysimage/p2v p2v.xsd"
uninstallAgentOnSuccess="0">
<source>
<liveSpec>
<creds host="source_vm"
username="Administrator" password="youradminpassword" />
</liveSpec>
</source>
<dest>
<managedSpec vmName="Test-Migrate">
<!-- username and password may be omitted,
in which case you will be interactively prompted for credentials -->
<creds host="target_esx_server"
username="root" password="yourrootpassword" />
</managedSpec>
</dest>
<importParams targetProductVersion="PRODUCT_MANAGED" />
<postProcessingParams>
<reconfigParams />
</postProcessingParams>
</p2v>
--End Code--
VMware Converter 3.0.1帮助文档的p2vtool.exe使用部分给出了对该xml文件中参数的详细解释,在附录帮助文档接近***部分列出了p2vtool.exe的使用指南。之所以把源虚拟机当做物理机对待是为了允许虚拟机在转换过程中持续运行。如果在转换过程中源虚拟机关机的话,只能完成从一台虚拟机到另外一台虚拟机的转换。为演示方便,所有脚本文件在xml文件都保存在C:\p2v。
可能很多管理员已经发现本文中给出了Powershell和VBscript两种脚本程序。其中Powershell脚本需要两个文件,如下所示:
p2v.ps1 Powershell脚本文件;
常规的p2v.cmd文件,该文件用来调用p2v.ps1以完成合适调度;
需要使用p2v.cmd的原因是因为在Windows的默认配置中ps1(Powershell脚本程序)文件没有文件关联。然而使用常规的“cmd”命令行可以激活“ps1”文件的执行,需要在注册表中手动添加文件关联。为简化处理,可以使用“p2v.cmd”代替,使用该文件的具体命令如下:
--Begin Code--
powershell -command "& 'c:\p2v\p2v.ps1' "
--End Code--
点击该链接可以下载到可用的p2v.ps1文件。
运行p2v.ps1文件之前还有另外一个前提要求。Powershell默认设置是只解释输入到Powershell命令提示符的命令,这就意味着Powershell并不能够执行脚本程序。可以通过在Powershell命令提示符后敲入命令“Get-ExecutionPolicy”确认一下,策略的默认设置是“受限”,即只能解释输入的命令。因此为了运行p2v.ps1文件,必须把执行策略至少设置为“远程签名”,意思是可以运行本地创建的Powershell脚本程序,不能够运行下载的脚本程序。设置Powershell的执行策略需要先输入“Set-ExecutionPolicy”,然后再输入“Set-ExecutionPolicy RemoteSigned”。这样设置之后就可以正常运行Powershell脚本了。在Powershell命令提示符后输入“help about_signing”可以获得脚本签名的更多信息。如果需要以调度好的任务方式运行该脚本程序,只需要以正常需求调度p2v.cmd任务运行即可。
如果倾向于使用VBscript,我也创建了转换流程的p2v.vbs版本,点击该链接可以下载到可用的p2v.vbs文件。
可以把p2v.vbs安排在需要的时间段来运行。需要注意的是p2v.vbs脚本程序在运行的时候会占用较多的处理器资源,这是因为p2v.vbs要监控“p2vtool.exe”的处理过程以便计算转换流程的完成时间。
在该流程完成之后,p2v.ps1和p2v.vbs脚本程序都会给脚本中列出的管理员发电子邮件,提供更多信息。这一点是非常必要的,因为在转换流程完成之后需要一些手动的清理工作。首先,在第二个计划任务完成之后,将会有两台虚拟机有相同的名字,需要删除其中一台虚拟机。其次,由于源虚拟机以物理机的方式进行转换,就需要从虚拟机设置上去掉一些额外的设备,并且需要增加合适的vSwitch。下面列出的是VI客户端镜像和清理新转换虚拟机的必要步骤:
注意下图中列出的额外硬件:
移除必要的额外附件,增加连接在合适vSwitch上的新网络适配器设备。首先,选择“以太网适配器设备”,点击“下一步”:
接下来,给网络以合适的名称,并且确保选择了“开机时建立连接”,点击“下一步”:
在最终的界面重新检查设置,确保所有的设置正确。点击“完成”:
此刻就已经成功地设置了一个冗余备份的虚拟机文件服务器。如果主ESX服务器文件出现故障,就可以在另外一台ESX服务器上启动备份的文件服务器虚拟机。如果需要的话,该恢复流程可以手动完成。然而并不需要额外开销来配置一个有VMotion能力的基础架构。如果用户或者客户SLA可以接受手动故障恢复流程的话,这就是不需要任何额外花费就可以完成宕机恢复的一个方法。
【编辑推荐】