在这个快速的提示中,我将展示如何使用VMware PowerCLI脚本来执行 VMware Site Recovery Manager (SRM)的恢复计划。这个快速提示是出自我将发行的新书VMware SRM 4.0。
虽然您可以使用经典的批处理(.bat)文件来执行SRM命令,但是Microsoft的.bat文件并不是一个用于操纵和修改vSphere平台的特别强大先进的编程接口(API)。如果你想做更微妙的脚本,则我们需要一个更为强大的脚本引擎。幸运的是,VMware已经接受了微软的PowerShell环境,并且补充了具体管理VMware虚拟环境的cmdlet。
首先,在SRM服务器上下载并安装Microsoft PowerShell,然后下载并安装VMware PowerCLI tools。
一旦你的SRM服务器内安装了PowerShell环境,你就可以创建.ps脚本。这就可以打开PowerCLI配置您的安全设置,并且可以通过PowerCLI登录vCenter的恢复站点。
在SRM论坛上提出了一个共同的问题,就是如何减少在恢复过程中使用的虚拟机内存,这是一个普遍存在的问题,因为人们有时没有那么强大的ESX主机,他们可能需要较少的物理内存占有率来保护站点。例如,使用 PowerCLI,我们可以运行PS脚本的power-on事件来实现自动减少虚拟机 (VM) 的进程的运行内存分配。
有几个使用PowerCLI这样做的方法,你可以用一个虚拟机.ps脚本来减少其内存。以下是一个我做PS脚本示例,其中我的虚拟机称为ctx01。此脚本使用set-vm cmdlet来降低恢复虚拟机时的内存分配到 1024MB。�CConfirm:$ false 命令是防止脚本等待人工操作来确认执行该脚本:
示例1
connect-viserver vc4nj.corp.com --user corp\administrator--password vmware Set-VM ctx01 -MemoryMB "1024" -Confirm:$FALSE Disconnect-VIServer �CServer vc4nj.corp.com -Confirm:$FALSE |
当然一个.PS脚本在每个虚拟机上执行会非常密集的,所以你可能更喜欢在响应更多地虚拟机的同时,搜索你需要的虚拟机的名字来做出改变。例如,在下面的.PS脚本里,get-vm cmdlet 用于查找开头为"ctx"的虚拟机然后通过set-vm 命令,来修改ctx01,ctx02等虚拟机的内存分配。
示例2
connect-viserver vc4nj.corp.com --user corp\administrator --password vmwareget-vm ctx* | Set-VM -MemoryMB "1024" -Confirm:$FALSE Disconnect-VIServer�CServer vc4nj.corp.com -Confirm:$FALSE |
一个更复杂的脚本不会设置一定的内存量,而是检查分配给虚拟机的内存量,然后减少某些因素。因此有一半的内存量分配给所有已恢复的虚拟机。下面的脚本时找到当前分配给虚拟机的内存量,然后将它减少 50%。找到以ctx开头的虚拟机,并检索他们的内存量,然后使用set-vm 命令去正确的设置它们。
示例3
connect-viserver vc4nj.corp.com --user corp\administrator --password vmwareForeach ($VM in Get-VM ctx*){ $NewMemAmount = $VM.MemoryMB / 2 Set-VM $VM-MemoryMB $NewMemAmount -Confirm:$FALSE} Disconnect-VIServer�CServer vc4nj.corp.com -Confirm:$FALSE |
对于我来说,这是我控制ctx开头的虚拟机的内存分配的最后方法。我想感谢来自英国的Al Renouf,最后一个例子是他帮助些的。如果你不知道Al Renouf是谁,他很善于用 PowerShell 和他的博客很值得一读。
接下来的部分将用SRM调用这些.ps文件。我不喜欢直接调用.ps脚本,而是去创建.cmd/.bat文件,在适当的时候调用脚本。这将有助于减少文本命令执行的步骤,我们可以重复使用它在SRM服务器上运行.ps文件。
第一步:创建一个redirect.bat文件
我第一是碰到redirect.bat是在阅读Carter Shaklin's PowerCLI 的博客时讨论
vCenter遇到报警所用.ps脚本。
在Virtu-AL's 网站的帮助下,I was able to come up with a .bat file that would call my .PS1 scripts.该脚本加载了 Microsoft Powershell 环境 PowerShell 控制台文件 (.psc1),使 VMware 的 PowerCLI 函数。在结束 (%1) 变量允许任何.PS1 文件调用同一个 redirect.bat 文件。
@echo off |
第二步:将 redirect.bat 和 powercli.ps 脚本复制到 SRM 服务器
这一步是复制您的redirect.bat 和 powercli.ps 脚本到SRM服务器的,其实你放的位置是没关系的,只要您在命令执行时键入脚本的路径是正确的,就不会出现错误。
在这种情况下,ctx01-ram.ps1, ctx-bulk-ram.ps1 和ctx-ram-half.ps1 代表以前讨论过的每一个不同的例子。
第三步:将命令添加到恢复计划
1.在恢复计划中,在恢复步骤选项卡上选择恢复高优先级虚拟机。
2.单击添加命令
点击放大。
3.键入命令解释器 (cmd.exe) 的 redirect.bat 文件和您想执行的 .PS 文件的完整路径。
注意: 在这种情况下,该对话框较小和所有的文件路径太长,因为文本已"包装。"它应改为: c:\windows\system32\cmd.exe /c c:\redirect.bat c:\ctx-ram-half.ps1
这将显示在该计划中如下所示:
点击放大。
重要的是.PS脚本的位置。它必须在高、 正常或低 Vm 的恢复之前调用。如果不是,.PS脚本将进行更改的占位符.vmx文件,而不是真正的虚拟机.vmx文件。记住,在“准备存储”阶段,占位符.vmx文件是从vCenter注册,真正的 VM.vmx 文件代替他们的位置。因此 placeholder.vmx 文件所做的任何更改将会忽略和更换。
用SRM自动运行这些脚本你可能觉得不舒服,另一个选择是把消息步骤恢复计划中,手动运行这些命令。
此外,您可能希望查看如何验证您 PowerShell.PS 文件到您的vCenter中。在我看来,为了简单,我的用户名和密码以纯文本格式放在.ps文件中。没有必要用PowerShell 中的身份验证方法。(Carter Shanklin's 的博客中讨论了如何使用本地系统帐户,能够存储加密的凭据用户名或密码不会出现.PS文件中。)
(警告:最后,想想使用 PowerCLI 修改虚拟机的故障恢复的后果。这些更改将复制回受保护的站点。请记住,在虚拟机的内存分配的情况下对 VMX 文件进行更改。作为故障恢复过程中的一部分,您可能会“翻转”复制的方向,使恢复站点累计变化复制回保护的站点。要停止这种情况,您需要撤消恢复计划所做的更改的 PS 脚本。)
结论
正如你看到的,当你执行恢复计划时再加上与VMware SRM PowerCLI可以提供适用于虚拟机和您的vSphere4平台所有的自定义的方式。而且它不会停止。PowerCLI Update 1 中新的 cmdlet 称为调用 vmscript。这允许您调用 PowerShell 和其他脚本恢复虚拟机的客户操作系统。但是,这将是下一个提示的主题!
Mike Laverick (VCP)自 2003 年以来一直参与 VMware 社区。. Laverick 是 VMware 论坛的版主和 伦敦的VMware用户组督导委员会的成员。 Laverick 是虚拟化的网站和博客RTFM Education的所有者和作者, 他发布针对VMware ESX的/ VirtualCenter用户的免费指南和实用工具,2009年加入SearchVMware.com作为一个大型的编辑。Laverick获得VMware vExpert奖,并帮助发现爱尔兰和苏格兰的VMware用户群体。 Laverick 已出版的书籍有VMware Virtual Infrastructure 3, VMware vSphere4 和 VMware Site Recovery Manager。