如何用VMware PowerCLI脚本来定制SRM恢复计划

日期: 2010-03-04 作者:Mike Laverick翻译:李哲贤 来源:TechTarget中国 英文

在本篇快速提示中,我将演示如何把VMware PowerCLI脚本功能应用到VMware SRM(Site Recovery Manager)恢复计划中。本篇取自于我即将出版的一本关于VMware SRM4.0的书。   虽然您还可以采用传统的(.bat)文件方式在SRM中执行命令行步骤,但是微软提供的.bat文件并不是专门创建的,为操作和调整vSphere平台而提供的扩展程序接口(API-advanced programming interface)。如果您的目的是为了制作更为精细的脚本,那么我们确实需要一种更为全面的脚本引擎工具。

幸运地是,VMware即将整合微软的PowerShell环境……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在本篇快速提示中,我将演示如何把VMware PowerCLI脚本功能应用到VMware SRM(Site Recovery Manager)恢复计划中。本篇取自于我即将出版的一本关于VMware SRM4.0的书。

  虽然您还可以采用传统的(.bat)文件方式在SRM中执行命令行步骤,但是微软提供的.bat文件并不是专门创建的,为操作和调整vSphere平台而提供的扩展程序接口(API-advanced programming interface)。如果您的目的是为了制作更为精细的脚本,那么我们确实需要一种更为全面的脚本引擎工具。幸运地是,VMware即将整合微软的PowerShell环境,并推出专用于管理VMware虚拟环境的cmdlets命令接口。

  首先下载并在恢复站点的SRM服务器上安装微软的PowerShell,然后下载和安装VMware PowerCLI工具。

  一旦我们完成了在恢复站点SRM服务器上PowerCLI的安装,就可以开始创建.PS脚本。并且在此之前,我们要通过PowerCLI配置相应的安全设置,并且确保可以通过PowerCLI登陆恢复站点的vCenter,这么做是非常有意义的。

  在SRM论坛上,最常见的问题之一就是如何减少恢复进程中虚拟机对内存的占用量。这是一个实际上很常见的问题,因为通常情况下恢复站点的ESX服务器要相对差一些。例如,或许恢复站点的服务器物理内存数量要少于被保护的站点。通过使用PowerCLI,我们可以通过.PS脚本,在启动虚拟机之前自动调用减少虚拟机内存分配的进程。

  通过使用PowerCLI,可以有很多种实现方法。您可以为每台虚拟机都创建一个.PS脚本来减少其内存占用。如下是一个实例,通过这个PS脚本可以完成对我命名为ctx01的虚拟机的处理。在脚本中,我使用了set-vm cmdlet把恢复站点虚拟机的内存分配减少为1024MB。另外,–confirm:$false命令 用来在需要人工确认更改时,完成操作而无须等待。

  例1

connect-viserver vc4nj.corp.com --user  corpadministrator --password  vmware
Set-VM ctx01 -MemoryMB "1024" -Confirm:$FALSE
Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE

  当然,为每台虚拟机都创建一个.PS脚本对管理员来说是非常沉重的负担,所以您可能更喜欢通过虚拟机名称来搜索和定位,并对多个虚拟机同时完成修改的操作方式。例如,在如下的.PS脚本中,get-vm cmdlet 是用来查找所有以“ctx”文本开头的虚拟机,并把找到的虚拟机传递给set-vm命令。这个操作将对那些命名为ctx01, ctx02,……等等的虚拟机内存分配做调整。

  例2

connect-viserver vc4nj.corp.com --user  corpadministrator --password  vmware
get-vm ctx* | Set-VM -MemoryMB "1024" -Confirm:$FALSE
Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE

  更加精简的脚本方式是,并不指定特定的内存数量,而是通过检查虚拟机内存数量并设置在特定的条件下减少内存分配数量。

  例如,假设我需要把分配给恢复的虚拟机的内存数量全部减少为原来的一半。如下的脚本就可以自动查询现在分配给虚拟机的内存数量,然后减少为50%。通过查找虚拟机名字中的ctx*字符串来定位并查询现在为虚拟机分配的内存数量,然后使用set-vm cmdlet实现正确的设置。

  例3

connect-viserver vc4nj.corp.com --user  corpadministrator --password  vmware
Foreach ($VM  in Get-VM ctx*){
     $NewMemAmount = $VM.MemoryMB / 2
     Set-VM $VM-MemoryMB $NewMemAmount -Confirm:$FALSE

}
 Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE

  在我的环境中,最终采用了最后一种方法来控制分配给CTX虚拟机的内存。这里我想感谢来自英国的Al Renouf,是他帮助我编写了最后一个例子中的脚本。或许您不知道Al是谁,他对PowerShell非常的熟悉,而且他的Virtu-Al blo博客也非常值得一读。

  在下一步中要完成的是,让这些PS文件可以被SRM调用。相比SRM直接调用这些.PS脚本的方式,我更喜欢创建一个.cmd/.bat文件,然后通过该文件在合适的时机调用。这种方式可以减少在编写命令脚本程序时的代码行。通过在.cmd/.bat文件中使用变量,我可以多次使用它来调用保存在SRM服务器上的.PS文件。

  步骤1:创建一个可重定向的.bat文件

  我第一次关注可重定向的.bat方式是在阅读一个博客(Carter Shaklin's PowerCLI blog)中,那里讨论了如何在vCenter Alarms中使用.PS脚本。

  在Virtu-AL主页的帮助下,我创建了一个可以引用我的.PS1脚本的.bat文件。该脚本会加载微软的Powershell环境,同时启动PowerShell控制台文件(.psc1,该文件使得VMware PowerCLI可以正常工作)。通过末尾的变量字符串“%1”,可以在同一个重定向的.bat文件中实现对所有.PS1文件的调用。

@echo off
C:WINDOWSsystem32windowspowershellv1.0powershell.exe -psc "C:Program FilesVMwareInfrastructurevSphere PowerCLIvim.psc1" "& '%1'"

  步骤二:把.bat重定向文件和powercli.ps脚本拷贝到恢复站点的SRM服务器上

  下一步是要完成把redirect.bat 和 .PS文件拷贝到恢复站点SRM服务器上。相对来说,您把这些文件拷贝到什么地方并不重要,只要您在脚本中正确地键入了文件路径,那么当您在恢复计划中键入命令并执行后,它们就会毫无差错地运行起来。

脚本


 
  在这个演示中,ctx01-ram.ps1, ctx-bulk-ram.ps1 和 ctx-ram-half.ps1分别代表了如上讲过的三种不同处理方式。

  步骤三:在恢复计划中加入命令

  1.在Recovery Steps页的恢复计划中,选择Recovery High Priority Virtual Machines
  2.点击Add Command Step按钮

Add Command Step按钮
 
点击看大图

  3.在翻译器中键入您希望执行的.bat和.ps文件的完整路径。

.ps文件


 
  注:在本例中,因为对话框比较小而文件的路径非常的长,所以文件部分被覆盖了。完整命令应该是: c:windowssystem32cmd.exe /c c:redirect.bat c:ctx-ram-half.ps1,这在恢复计划中也可以看到。

.ps文件

点击看大图

  .PS脚本的位置是非常重要的,它必须在对高、中或低优先级虚拟机恢复之前被调用。否则的话,.PS脚本将会对占位符.vmx文件做修改,而不是修改原始的虚拟机.vmx文件。请牢记,在"Prepare Storage"步骤里,占位符.vmx文件是无法在vCenter中注册的,原始的虚拟机.vmx文件会占据该位置。因此,所有对占位符.vmx文件所做的修改都会被忽略和抛弃。

  或许您对SRM自动运行这些脚本感到不太放心。另外一种方式是在恢复计划中输入这些信息并手动执行。

  另外,您可能希望了解如何在vCenter中实现PowerShell .PS文件的验证。在演示中,我把问题简单化了:通过把用户名和密码以纯文本的形式保存在.PS文件里。其实PowerShell有很多种实现验证的方法,但是这些都不是必要的。(Carter Shanklin的博客讨论了如何使用这种方式来存储经过加密的认证信息,这样的话用户名和密码就不用直接出现在.PS文件中了。)

  警告:最后,请考虑使用PowerCLI调整虚拟机在故障回切时所造成的影响。当您决定切回到被保护站点的时候,所做的这些改变也被同时复制到被保护站点。请牢记,我们为了改变虚拟机内存分配而对VMX文件做了修改。作为故障回切操作的一部分,我们需要考虑到所有在恢复站点所做的修改在回切时也被反向复制回了被保护站点。为了防止这种情况出现,您需要一个PS脚本文件来完成对恢复计划中所做修改的“释放”过程。

  结论:

  您已经看到,在执行恢复计划时,通过结合VMware SRM,PowerCLI可以实现对虚拟机和vSphere4平台的各种定制和修改方式。而且,它的作用还不限于此。在PowerCLI Update1,加入了称为invoke-vmscript的新cmdlet。它可以允许我们在已经完成恢复的子系统虚拟机上调用PowerShell和其他脚本程序。这将是我们在下一篇中讨论的问题!

作者

Mike Laverick
Mike Laverick

A professional instructor with over 15 years of experience in technologies such as Novell, Windows and Citrix.

翻译

李哲贤
李哲贤

TT虚拟化特约作者

相关推荐